Exporte el file .ipa desde el proyecto Xcode sin abrir nunca Xcode

Tenemos una API que los usuarios pueden llamar para crear aplicaciones / proyectos de Cordova, cargar su directory www, y luego comenzar a comstackr y download el file binary ejecutable. Este file binary ingresará en una tienda de aplicaciones privada.

Estoy teniendo problemas con el paso de compilation para iOS. El paso de compilation de Cordova no es un problema, pero no genera un file binary, como lo hace para Android. Después de leer todo lo que encontré en Stackoverflow y en otros lugares, el plan era el siguiente:

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" 

Dado que la identidad de la firma y todo está configurado correctamente, casi funciona. El primer command se ejecuta bien. El segundo command simplemente se cuelga.

Sin embargo, si abro el proyecto en Xcode y luego ejecuto los commands, comstackrá y exportará, y me quedo con un file .ipa, que es lo que quería. Parece que Xcode establece un espacio de trabajo y algunas cosas relacionadas con el esquema cuando se abre el proyecto por primera vez.

¿Hay alguna manera de que pueda get xcodebuild (o xcrun, o cualquier cosa, para ese caso) para crear este file de espacio de trabajo para mí?

¿O hay otra forma de abordar esto?

En este momento, tengo una solución donde realmente abro el proyecto Xcode, espero 15 segundos y luego prosigo. Pero puedo pensar en mil forms que fallarán en algún momento, así que me gustaría cambiarlo a algo un poco más elegante.

Actualmente tengo instalado Xcode 6.3, si eso es relevante.


Actualización: la respuesta de Opal a continuación me puso en el path correcto (creo). Lo que terminé haciendo fue exportar un esquema compartido según el enlace de Opal, y usar eso como una plantilla para futuras aplicaciones. Las soluciones eran algo como esto:

 # Copy shanetworking scheme file into directory mkdir /path/to/project/dir/MyApp.xcodeproj/xcshanetworkingdata mkdir /path/to/project/dir/MyApp.xcodeproj/xcshanetworkingdata/xcschemes cp data/MyScheme.xcscheme /path/to/project/dir/MyApp.xcodeproj/xcshanetworkingdata/xcschemes/. # Use sed to replace app name in scheme file sed -i '' "s/%app_name%/MyApp/g" MyApp.xcodeproj/xcshanetworkingdata/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" 

Parece que la aplicación que intenta build no tiene esquemas compartidos. Los esquemas, si no se comparten, se crean cuando el proyecto se carga en xcode. Para crear esquemas compartidos, vea este sitio.

Estos son los pasos que usé para automatizar la generación ipa sin abrir xcode en mi entorno cordova. (versión xcode: versión cordova 6.0.1: 3.6.0)

  • Cambiar en cordova / build.xcconfig : CODE_SIGN_IDENTITY = Distribución de iPhone (cambiar "Desarrollador" por "Distribución").
  • ejecutar cordova build ios --device en cordova área de trabajo que genera el file .app
  • Firme usando: 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}