2015-04-20 5 views
9

Wir haben eine API, die Benutzer aufrufen können, um Cordova Apps/Projekte zu erstellen, ihr www-Verzeichnis hochzuladen und dann mit der Kompilierung zu beginnen und die ausführbare Binärdatei herunterzuladen. Diese Binärdatei wird dann in einen privaten App Store übertragen.Exportieren von .ipa-Datei aus Xcode-Projekt ohne jemals zu öffnen Xcode

Ich habe Probleme mit dem Kompilierungsschritt für iOS. Der Cordova-Build-Schritt ist kein Problem, aber er gibt keine Binärdatei aus, wie es für Android der Fall ist. Nach der Lektüre alles, was ich auf Stackoverflow gefunden und an anderer Stelle, der Plan war:

xcodebuild clean -configuration Release -alltargets 
xcodebuild -scheme MyApp archive -archivePath build/MyApp 
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "My Prov Profile" 

In Anbetracht, dass die Unterzeichnung Identität und alles richtig eingerichtet ist, es funktioniert fast. Der erste Befehl wird ausgeführt. Der zweite Befehl hängt einfach.

Wenn ich jedoch das Projekt in Xcode öffnen und dann die Befehle ausführen, kompiliert und exportiert es, und ich bin mit einer .ipa-Datei, was ich wollte. Es scheint, dass Xcode beim ersten Öffnen des Projekts einen Arbeitsbereich und einige schemabezogene Dinge einrichtet.

Gibt es eine Möglichkeit, xcodebuild (oder xcrun, oder irgendetwas, für diese Angelegenheit), um diese Arbeitsbereich-Datei für mich zu erstellen?

Oder gibt es eine andere Möglichkeit, dies zu erreichen?

Im Moment habe ich eine Lösung, wo ich das Xcode-Projekt öffnen, 15 Sekunden warten und dann fortfahren. Aber ich kann mir tausend Möglichkeiten vorstellen, die irgendwann scheitern werden, also würde ich es gern etwas eleganter machen.

Ich habe derzeit Xcode 6.3 installiert, wenn das relevant ist.


Update: Opals Antwort unten setze mich auf den richtigen Weg (denke ich). Am Ende habe ich ein geteiltes Schema nach Opals Link exportiert und dieses als Vorlage für zukünftige Apps verwendet. Die Lösungen waren so etwas wie diese:

# Copy shared scheme file into directory 
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata 
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes 
cp data/MyScheme.xcscheme /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes/. 

# Use sed to replace app name in scheme file 
sed -i '' "s/%app_name%/MyApp/g" MyApp.xcodeproj/xcshareddata/xcschemes/MyScheme.xcscheme 

# CD into directory 
cd /path/to/project/dir 

# Move files from Cordova to our build directory 
cp -r CordovaLib/build/* build/. 

# Build and export 
xcodebuild clean -configuration Release -alltargets 
xcodebuild -scheme MyScheme archive -archivePath build/MyApp 
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "MyProvProfile" 
+0

Es scheint, dass Schemata in Ihrem Projekt nicht geteilt werden und xcode erstellt sie nach dem Öffnen des Projekts. Sie benötigen gemeinsame Schemas. – Opal

+0

@Opal OK. Wie gehe ich vor, um gemeinsame Schemas einzurichten? –

+0

Siehe hier: https://github.com/facebook/xctool im README-Bereich. – Opal

Antwort

2

Es scheint, dass die Anwendung, die Sie versuchen, keine gemeinsamen Regelungen zu bauen hat. Schemas, falls nicht geteilt, werden erstellt, wenn das Projekt in xcode geladen wird. Um gemeinsame Schemas zu erstellen, siehe this Website.

0

Dies sind die Schritte, die ich verwenden ipa Generation zu automatisieren, ohne Xcode in meiner cordova Umgebung zu öffnen. (Xcode Version: 6.0.1 cordova Version: 3.6.0)

  • Änderung cordova/build.xcconfig: CODE_SIGN_IDENTITY = iPhone Verteilung (ändern "Entwickler" auf "Distribution".)
  • laufen cordova build ios --device in cordova Arbeitsbereich, der .app-Datei
  • Zeichen erzeugt mit: xcrun -sdk iphoneos PackageApplication -v ${WORKSPACE}/platforms/ios/build/device/${application.name}.app -o ${WORKSPACE}/platforms/ios/build/${application.name}.ipa --embed ${ios.distribution.provisionfile}.mobileprovision --sign ${code.signing.identity}
+0

Danke, aber das funktioniert nicht für mich, ich bekomme eine Fehlermeldung zuerst "Warnung: Verwendung von --preserve-Metadaten mit Option" Ressourcen-Regeln "(veraltet in Mac OS X> = 10.10)!", Und dann "/var/folders/8l/l22zrl_n2v34qfxzwfpbdjxc0000gn/T/wh4epkuky9/Payload/TestMac.app/ResourceRules.plist: kann keine Ressourcen lesen". –

+0

Oh Ok! verwende OS X 10.9.5. Ich werde aktualisieren und versuchen, das Problem zu beheben. Danke für Ihr Update. – kumar

Verwandte Themen