xcodebuild perfil de aprovisionamiento diferente para la dependencia de destino

Estoy intentando comstackr mi aplicación con xcodebuild:

xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210" 

Mi esquema tiene dos objectives. Un objective es la aplicación, el otro es la extensión de la aplicación (construí una extensión para Safari). La extensión de la aplicación es una dependencia de destino. Cada objective requiere un perfil de aprovisionamiento por separado. No sé cómo especificar el PROVISIONING_PROFILE para la dependencia. Recibo este error, como se esperaba:

 CodeSign error: code signing is requinetworking for product type 'App Extension' in SDK 'iOS 8.1' 

StackOverflow y la página man para xcodebuild no parecen ofrecer nada. ¿Alguien sabe cómo build un proyecto con xcodebuild que se basa en dos perfiles de aprovisionamiento?

Pasé mucho time trabajando en esto hoy. Estaba en path a la cama cuando la respuesta me golpeó:

En cada configuration de compilation de tus objectives, debes establecer $VARIABLE para el nombre del perfil. Para hacer esto, seleccionó "Otro" en la parte inferior de la list de perfiles. Al hacer esto, se abrirá un campo de text: elija un $VARIABLE diferente para cada objective; por ejemplo, elegí $APP_PROFILE para el destino de la aplicación de contenedor y $EXTENSION_PROFILE para el objective de mi extensión de hoy

Agregar una variable de compilación ...

Esto dará como resultado algo como lo siguiente:

Perfiles

Finalmente, al build con xcodebuild , especifique los UUID de perfil como lo hizo con PROVISIONING_PROFILE :

 xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748" 

La construcción desde XCode parece no verse afectada, por lo que puedo decir que XCode está seleccionando los perfiles pnetworkingeterminados (como en el modo "Automático")

Teóricamente, esto también admitiría múltiples extensiones.

Funciona para mí con XCode 6.3 🙂

Solución sin variable

Existe una opción, -exportSigningIdentity que puede ayudarlo, ya que los perfiles de aprovisionamiento de Application & Extension / Widget pueden ser diferentes, pero se supone que las identidades de firma de la aplicación y la extensión sean las mismas.

Por ejemplo, verá que,

  • TargetApp -> Configuración de compilation -> "Identidad de firma de código (id)" (Versión)
  • TargetExtension -> Configuración de compilation -> "Identidad de firma de código (id)" (Versión)

son esencialmente la misma cadena, digamos que esta identidad es "Identidad de firma de código (id)" . Por lo tanto, para comstackr y exportar files, lo que puede ejecutar es, simplemente,

Limpieza

xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld

edificio

xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld archive -archivePath ~/output/HelloWorld.xcarchive

Exportador

xcodebuild -exportArchive -exportFormat ipa -archivePath ~/output/HelloWorld.xcarchive -exportPath "HelloWorld.ipa" -exportSigningIdentity "Code Signing Identity (id)"

Referencia: documentation xcodebuild

Meses más tarde … Encontré una solución que no involucra valores de configuration dentro de Xcode: Dentro del sigh hay una secuencia de commands que es capaz de renunciar a un file ipa con perfiles dados. Lo siguiente funciona para mí:

 bash resign.sh Experiments-AdHocProd.ipa "iPhone Distribution: Company Pty Ltd" output.ipa -p com.company.experiments.AudioPlugin=Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision -p com.company.experiments=Experiments-AdHocProd.mobileprovision --verbose 

dónde:

  • Experiments-AdHocProd.ipa es la ipa existente
  • com.company.experiments.AudioPlugin es la ID del package de extensión
  • Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision es el perfil de la extensión
  • com.company.experiments es el identificador principal del package de aplicaciones
  • Experiments-AdHocProd.mobileprovision es el perfil principal de la aplicación

El identificador de package de cada perfil debe coincidir con el de la aplicación con la que se firmará.

Algo que encontré que es importante tener en count es que si un identificador de package tiene un comodín (en mi caso Experiments-AdHocProd.mobileprovision ), los perfiles con ID explícitos primero deben pasarse a -p .


Alternativamente, puede usar sigh para realizar la renuncia. Desafortunadamente, sigh --help no dice nada acerca de renunciar a binarys con extensiones, sin embargo, sigh resign --help .

En Swift, el marco de los files Pod se empaquetará por separado. Los siguientes pasos resolvieron el problema.

  1. Select pods 2. Targets 3. General 4. Edit bundle id 5. Build Settings 6. Code Signing 7. Provisioning profile -> select the valid profile 8. Code Signing Identity -> Select the respective identity from profile. 

Repite lo mismo para todos los objectives.

Soy capaz de generar compilation.