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?
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
Esto resultará en algo como lo siguiente:
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:)
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
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.
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.
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