xcodebuild diferente perfil de aprovisionamiento para la dependencia de destino


Estoy tratando de compilar 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 plan tiene dos objetivos. Un objetivo 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 destino requiere un perfil de aprovisionamiento independiente. No se como especificar el PROVISIONING_PROFILE para la dependencia. Estoy recibiendo este error, como era de esperar:

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

StackOverflow y la página de manual de xcodebuild no parecen llegar a nada. Hacer ¿alguien sabe cómo construir un proyecto con xcodebuild que se base en dos perfiles de aprovisionamiento?

Author: Rey Gonzales, 2015-01-16

4 answers

Pasé demasiado tiempo trabajando en esto hoy. Yo estaba en mi camino a la cama cuando la respuesta me golpeó:

En cada configuración de compilación de sus destinos debe establecer un $VARIABLE para el nombre del perfil. Para ello, seleccione "Otros" en la parte inferior de la lista de perfiles. Al hacer esto se abrirá un campo de texto-elija un $VARIABLE diferente para cada destino-por ejemplo, elegí $APP_PROFILE para el destino de la aplicación contenedor y $EXTENSION_PROFILE para mi destino de extensión de hoy

Adición de una variable de compilación variable...

Esto resultará en algo como lo siguiente:

Perfil

Finalmente, cuando compile 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 dentro de XCode parece no verse afectada, por lo que pude ver, XCode está seleccionando los perfiles predeterminados (como si estuviera en modo "Automático")

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

Funciona para mí con XCode 6.3:)

 45
Author: Max Chuquimia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-13 12:47:02

Solución Sin Variable

Hay una opción, -exportSigningIdentity que puede ayudarlo, porque los perfiles de aprovisionamiento de la Aplicación y Extensión/Widget pueden ser diferentes, pero las identidades de firma de la aplicación y extensión se supone que son las mismas.

Por ejemplo, verás que,

  • TargetApp - > Configuración de compilación - > "Identidad de Firma de código (id)" (Lanzamiento)
  • TargetExtension - > Build Settings - > "Code Signing Identity (id)" (Release)

Son esencialmente iguales string, digamos que esta identidad es "Identidad de Firma de código (id)". Así que para construir y exportar el archivo, lo que puede ejecutar, son simplemente,

Limpieza

xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld

Edificio

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

Exportando

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

Referencia: documentación de xcodebuild

 2
Author: Sazzad Hissain Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-20 07:38:23

Meses después... Se encontró una solución que no implica valores de configuración dentro de Xcode: Dentro sigh hay un script que es capaz de renunciar a un archivo ipa con perfiles dados. Las siguientes obras 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

Donde:

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

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

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


Alternativamente, puedes usar sigh para realizar la renuncia. Desafortunadamente, sigh --help no dice nada sobre renunciar a los binarios con extensiones, sin embargo sigh resign --help hacer.

 1
Author: Max Chuquimia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-13 00:24:38

En Swift, Pod Files framework 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.

Repita lo mismo para todos los objetivos.

Soy capaz de generar build.

 0
Author: Pebby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-04 12:40:47