IPhone xib in iPad xib konvertieren?


75

Wie machst du das? Ich habe ein Video-Tutorial gesehen, aber der Bildschirm war zu klein. Gibt es neben der Änderung der Ansichtsgröße noch weitere wichtige Änderungen, die ich an meinen iPhone-Apps vornehmen müsste, um sie auf das iPad zu konvertieren?

Antworten:


29

Angenommen, Sie haben das SDK mit Xcode 3 ,

  1. Öffnen Sie IB.
  2. Öffnen Sie das XIB.
  3. Datei -> iPad-Version mit Masken zur automatischen Größenänderung erstellen.

Welche Unterschiede sind zu erwarten?
Pestilenz669

7
Äh ... außer dass es keinen Interface Builder mehr gibt und keine äquivalente Option in XCode 4, die ich finden kann.
Nicholas MT Elliott

Ich habe überall nach der Lösung in Xcode 4 gesucht. Ich musste mein XIB als iPad von Grund auf neu erstellen, um es bisher zu lösen, was nicht richtig sein kann.
Peter Johnson

@Peter Johnson, @radven, @Nicholas MT Elliot, geben Sie eine Antwort unten, die tatsächlich für XCode 4 funktioniert (obwohl es nicht schön ist).
Dan Rosenstark

1
Eine Sache, die helfen kann: Wenn Sie simulierte Schnittstellenelemente deaktivieren, können Sie die Größe Ihrer Ansicht frei ändern.
Peter Johnson

159

Ich konnte es auf ein paar Dinge eingrenzen. Hier sind die Schritte, die für mich funktioniert haben:

1) Erstellen Sie eine Kopie der iPhone xib-Datei und fügen Sie sie Ihrem Projekt hinzu

2) Klicken Sie mit der rechten Maustaste auf die Datei (in xcode) und öffnen Sie als> Quellcode

3) Die 2. Zeile sollte folgendermaßen aussehen:

<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">

Ersetzen mit:

<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">

4) Suchen Sie nach "IBCocoaTouchFramework" und ersetzen Sie alle Vorkommen durch "IBIPadFramework".

5) Speichern Sie die Datei und öffnen Sie sie als> Interface Builder - iOS

Die Datei sieht zwar immer noch wie ein normales iPhone xib aus, aber für mich ist der Rest der xib, nachdem ich die Statusleiste im Attributinspektor auf "Schwarz" geändert habe, nur sozusagen in ein iPad xib "eingerastet"


1
Hat funktioniert. Meine Statusleiste war bereits schwarz. Ich habe es auf "Keine" und wieder auf "Schwarz" gesetzt, dann wurde die iPad-Ansicht aktiviert
Thomas,

4
Genial. Definitive Antwort für Xcode 4. Die mit all den Upvotes ist weit veraltet :)
Chris Newman

1
Ich möchte nur hinzufügen, dass diese Antwort in Xcode 4.2 funktioniert. Danke
jsherk

4
Wie zu erwarten ist, funktioniert diese Methode auch umgekehrt, wenn Sie zuerst eine iPad-Ressource erstellt haben und auf eine iPhone-Ressource zurückgreifen möchten.
Chrisbtoo

7
Beachten Sie, dass sich dies im neuesten XCode5 nur geringfügig geändert hat. Anstatt in Schritt 4 nach "IBCocoaTouchFramework" zu suchen, suchen Sie nach "iOS.CocoaTouch" und fügen Sie am Ende einfach ".iPad" hinzu. Es gibt nur ein Vorkommen und es befindet sich in derselben Zeile wie die erste Bearbeitung. Beachten Sie auch, dass Sie, wenn Sie dies in IB öffnen, es einfach in Hochformat oder Querformat (je nachdem, was nicht der Fall ist) und wieder zurück wechseln. Die Größe wird dann problemlos geändert.
Major Havoc

33

In Xcode 5 sollten Sie nur:

Finden:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">

Ersetzt durch:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">

Beachten Sie, dass wir den Eigenschaften und nur .iPad hinzufügen .typetargetRuntime

Wählen Sie nach dem Öffnen einfach eine neue Größe zum Anpassen aus. Beispiel: iPad Vollbild.


1
Kleiner Tippfehler: Sie sollten suchen <...type="com.apple.InterfaceBuilder3.CocoaTouch.XIB"...>.
Julian D.

22

XCode4:

In xcode 4 können wir das nicht für eine einzelne xib tun, aber wir können die entsprechenden iPad-Versionen auf einmal erstellen.

Bevor Sie Ihr Projekt für das iPad konfigurieren, klicken Sie mit der rechten Maustaste auf das Ziel und dann auf Duplizieren, wenn es nur für das iPhone konfiguriert ist.

Wählen Sie nun "Duplizieren und Übergang zum iPad". Ein neues Ziel und ein neuer Satz von XIBs werden erstellt. Dies sollte einige Arbeit reduzieren.

Ich hoffe es hilft.


das hat mir viel Zeit gespart ... Dies ist die richtige Antwort auf diese Frage :)
Guru

Leider funktioniert dies in Xcode 5.1 nicht. Es erstellt das neue iPad-Ziel, migriert jedoch nicht die xib. Ich habe sogar versucht, ein neues Projekt zu erstellen und das Storyboard auf Main.storyboard zu kopieren, dann das Ziel auf das iPad zu duplizieren, und es generiert immer noch nicht die xib. Aus irgendeinem Grund wird der Interface Builder von Xcode 3 in 10.9 nicht mehr geöffnet, sodass ich gezwungen bin, den xib-Text direkt zu bearbeiten.
Zack Morris

PS: Diese Antwort hat in Xcode 5 (möglicherweise auch in 4) am besten für mich funktioniert, da das Layout größtenteils automatisch geändert wurde
Zack Morris

14

Xcode 4 :

Die Funktion " iPad-Version mit Autosizing-Masken erstellen" wurde aus Xcode 4 entfernt. Derzeit ist es am einfachsten, Xcode 3 für die Konvertierung zu verwenden, da sich das Dateiformat "nib" (.xib) nicht geändert hat.

Xcode 3 und 4 können jetzt beide auf demselben System installiert werden, indem einfach ein anderer Ordner ausgewählt wird (siehe Installationsanweisungen auf dem Disk-Image).

Andernfalls müssen Sie die UI-Elemente aus der iPhone-Version kopieren / einfügen und sie erneut mit Ihrem Code verknüpfen.


2
Ich wünschte, ich könnte über dieses eine Beta-Betriebssystem zusammen mit dieser einen Beta-IDE
schimpfen

Xcode 4 hat eine Möglichkeit, dies zu tun. Siehe Tejeshs Antwort auf derselben Seite.
Marc M

6

Was ist, wenn Sie den Computer die Arbeit des Computers erledigen lassen?
Schnelleres, geringeres Fehlerrisiko.

Hier ist ein Workflow, der auf der hervorragenden Antwort von Jag basiert , aber mit sed automatisiert ist.

Lassen Sie uns zuerst einige Dinge einrichten. Wir müssen dies nur einmal tun.
Erstellen Sie in dem Verzeichnis, das Ihre XIBs enthält, zwei Dateien mit folgendem Inhalt:

Datei iPhoneToiPadXIBConversion.sed:

s/com.apple.InterfaceBuilder3.CocoaTouch.XIB/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g
s/IBCocoaTouchFramework/IBIPadFramework/g

und Datei iPadToiPhoneXIBConversion.sed:

s/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/com.apple.InterfaceBuilder3.CocoaTouch.XIB/g
s/IBIPadFramework/IBCocoaTouchFramework/g


Das Setup ist nun abgeschlossen. Geben Sie zum Konvertieren eines XIB einen der beiden folgenden Befehle in das Terminal ein:

Konvertierung von iPhone zu iPad:

sed -f iPhoneToiPadXIBConversion.sed  MyViewController~iphone.xib  > MyViewController.xib

Konvertierung von iPad zu iPhone:

sed -f iPadToiPhoneXIBConversion.sed  MyViewController.xib  > MyViewController~iphone.xib





Lassen Sie uns zum Spaß zwei Funktionen in zsh erstellen, um die Konvertierung noch einfacher zu gestalten:

function convertiPadXIBToiPhone () {
    newXibName=`echo "$1" | /usr/bin/sed "s/.xib/~iphone.xib/"`
    `/usr/bin/sed -f iPadToiPhoneXIBConversion.sed "$1" > "$newXibName"`
    echo "Did convert $1 to $newXibName."
}

function convertiPhoneXIBToiPad () {
    newXibName=`echo "$1" | /usr/bin/sed "s/~iphone.xib/.xib/"`
    `/usr/bin/sed -f iPhoneToiPadXIBConversion.sed "$1" > "$newXibName"`
    echo "Did convert $1 to $newXibName."
}

Nachdem Sie dies zu Ihrer zsh-Konfiguration hinzugefügt haben, ist das Konvertieren eines XIB wie folgt:

convertiPadXIBToiPhone MyViewController.xib

oder

convertiPhoneXIBToiPad MyViewController.xib

Fast so schön wie wenn XCode 3 dies eingebaut hat. :-)
Warren P

:) Hey, ich würde diesen Hack gerne durch eine neue Funktion der nächsten Version von Xcode unbrauchbar machen. Ich warte darauf und benutze es jedes Mal, wenn ich ein XIB konvertieren muss, und es funktioniert großartig!
Guillaume

5

Öffnen Sie die XIB in XCode 4 mit "Ansicht als Quellcode".

Vor

Sichern Sie die betreffende Feder.

Einer

Ersetzen Sie diese Gänsehaut

    <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
        <integer value="1056" key="NS.object.0"/>
    </object>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
        <integer value="3100" key="NS.object.0"/>
    </object>
    <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
    <int key="IBDocument.defaultPropertyAccessControl">3</int>
    <string key="IBCocoaTouchPluginVersion">301</string>

für diese andere goo

    <string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
        <integer value="3100" key="NS.object.0"/>
    </object>
    <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
    <int key="IBDocument.defaultPropertyAccessControl">3</int>
    <string key="IBCocoaTouchPluginVersion">301</string>

Zwei

Löschen Sie dann für jede Ansicht in der Feder mit dem integrierten IB diese und klicken Sie dann auf Rückgängig.

Drei

Duschen Sie dann in heißem Wasser, um das widerliche Gefühl, das Sie haben könnten, abzuwischen.


Hinweis: Der Code wird direkt von NIBs übernommen, die 1) defekt sind und 2) funktionieren.
Dan Rosenstark

4

Sie können die XIB als Textdatei öffnen und die UIView-Größe ändern:

Klicken Sie im Navigator mit der rechten Maustaste auf Ihre XIB-Datei und wählen Sie: "Öffnen als ..." Als Quelldatei öffnen.

Suchen Sie die UIView-Referenz und ändern Sie die Frame-Werte:

<object class="IBUIView" id="191373211">

<string key="NSFrame">{{0, 20}, {768, 1024}}</string>

Hmm, ich kann dort einen NSFrameSize sehen, aber keinen NSFrame ... Kann jemand bestätigen?
Peter Johnson

Das Gleiche hier, ich habe NSFrameSize geändert und es hat Auswirkungen, aber wenn ich die Benutzeroberfläche in Xcode bearbeiten möchte, sehe ich immer noch den kleinen Bildschirm.
DixieFlatline

3

In XCode 4.3.2 ist es für mich am einfachsten, eine iPad-Version von xib zu erstellen, diese xib-Datei zu duplizieren und ~ipaddem Dateinamen ein Suffix hinzuzufügen . Fügen Sie Ihrem Projekt sowohl "myVC.xib" als auch "myVC ~ ipad.xib" hinzu. Beachten Sie, dass es "~ ipad" NICHT "~ iPad" ist. Ihre App verwendet diese ~ ipad-Version automatisch, wenn sie auf dem iPad ausgeführt wird. Dies funktioniert auch mit Ressourcendateien (z. B. Bildern).

Die beste Referenz, die ich im Moment finden konnte ... https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html


Ich habe gehört, dass dies (automatische Auswahl der Datei mit "~ iPad") ein Problem mit älteren iOSes hat.
Karim

Ja, aber das ist eine typische Sache mit neuen Funktionen. Ich kann jedoch kein gutes Dokument dafür finden. Aber ich bin mir ziemlich sicher, dass es mit iOS 5 und höher funktioniert, was gut genug sein sollte.
Hlung

Seltsam, dass Apple in seiner universellen App-Vorlage immer noch [[UIDevice currentDevice] userInterfaceIdiom] verwendet.
Timur Kuchkarov

3

Xcode 5 Update

targetRuntime = "iOS.CocoaTouch"

zu

targetRuntime = "iOS.CocoaTouch.iPad"


2

Ich werde dokumentieren, was ich in Xcode 4.5 getan habe:

  1. fixpattern.sh

    cp REPLACEME_Iphone.h REPLACEME_Ipad.h
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.h > REPLACEME_Ipad_tmp.h
    mv REPLACEME_Ipad_tmp.h REPLACEME_Ipad.h
    cp REPLACEME_Iphone.m REPLACEME_Ipad.m
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.m > REPLACEME_Ipad_tmp.m
    mv REPLACEME_Ipad_tmp.m REPLACEME_Ipad.m
    cp REPLACEME_Iphone.xib REPLACEME_Ipad.xib
    sed -e 's/com.apple.InterfaceBuilder3.CocoaTouch.XIB   /com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/IBCocoaTouchFramework/IBIPadFramework/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/320, 416/768, 1004/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    
  2. Erstellen Sie eine Liste der Dateien, in die Sie konvertieren möchten fixfile. Jede Zeile ist ein Dateiname ohne Erweiterung. Wenn Sie den ursprünglichen Dateinamen haben AAA_Iphone.h, geben Sie ihn einfach ein AAA. Wenn Ihre Originaldatei nicht diesem Muster entspricht, müssen Sie das Skript überarbeiten.

  3. In der Befehlszeile ausführen

    cat fixfile | while read line ; do sed -e "s/REPLACEME/${line}/g" fixpattern.sh ; done > fixall.sh
    
  4. Überprüfen und ausführen fixall.sh

  5. Neu erstellte Datei zum Projekt hinzufügen


2

Jags Antwort ist großartig. Es gibt jedoch einen Haken, wenn ein XIB in Xcode 5 geöffnet / erstellt wird.

Für Xcode 5

1) Erstellen Sie eine Kopie der iPhone xib-Datei und fügen Sie sie Ihrem Projekt hinzu

2) Klicken Sie mit der rechten Maustaste auf die Datei (in xcode) und öffnen Sie als> Quellcode

3) Die 2. Zeile sollte folgendermaßen aussehen:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4510"

ändere es auf

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510"

4) Die 8. Zeile sollte folgendermaßen aussehen:

<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>

ändere es auf

<rect key="frame" x="0.0" y="64" width="768" height="960"/>

Das war's und da hast du iPad XIB. Trotzdem geht der wahre Kredit an Jag.


1

Neben der Antwort von Jag suchen Sie auch nach "320.460" und ersetzen Sie es durch 768.1024. Ihr XIB wird auf die iPad-Abmessungen angepasst.


1

Für Xcode 4

Sie müssen nicht für jedes Gerät ein eigenes Ziel erstellen. Stattdessen können Sie die Geräte in der Projektzusammenfassung in Universal ändern, das sich bereits im iPhone befindet. Dies wird unter dem Link Aktualisieren der iOS 5-App auf Universal unter Xcode 4.2 beantwortet. Somit wird es den Übergang für Sie tun.


0

Klingt so, als ob die beste Lösung darin besteht, immer zuerst als iPhone zu entwickeln. Wenn Sie fertig sind, fügen Sie das iPad-Ziel hinzu und lassen Sie xcode das Update durchführen. Ich habe den gleichen Fehler gemacht, Universal zum Starten ausgewählt, der die ersten paar Dateien erstellt, aber dann musste jede andere xib von Hand im iPad-Ordner neu erstellt werden. Große Schmerzen


0
Jag has given Great Answer.

In manchen Fällen.

Sie müssen Ihr Iphone XIB nicht in Ipad XIB konvertieren. Sie können Autoresizingmask verwenden und auch Running Ipad herunterladen. Sie müssen lediglich Ihre APP für die Ausführung im Universalmodus mit der richtigen Autoresizing-Maske konfigurieren.


0

Einfach ersetzen

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch"

mit

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch.iPad"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.