tools from for ios xcode xcodebuild

ios - from - xcodebuild diferente perfil de aprovisionamiento para dependencia de destino



xcodebuild install (4)

Solución sin variable

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

Por ejemplo, verás que,

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

son esencialmente la misma cadena, digamos que esta identidad es "Identidad de firma de código (id)" . Entonces, para compilar y exportar archivos, 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: documentación de xcodebuild

Estoy tratando de construir 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 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 objetivo. Cada objetivo requiere un perfil de aprovisionamiento separado. No sé cómo especificar el PROVISIONING_PROFILE para la dependencia. Recibo este error, como se esperaba:

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 tener nada. ¿Alguien sabe cómo construir un proyecto con xcodebuild que se base en dos perfiles de aprovisionamiento?


En Swift, el marco de archivos 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.

Repita lo mismo para todos los objetivos.

Soy capaz de generar build.


Meses después ... Encontré una solución que no involucra valores de configuración dentro de Xcode: en un sigh hay un script que es capaz de renunciar a un archivo 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 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 el perfil principal de la aplicación

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 ), los perfiles con ID explícitos deben pasarse primero a -p .

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


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

En cada una de las configuraciones de compilación de tus objetivos, debes establecer un $VARIABLE para el nombre del perfil. Para hacerlo, seleccione "Otro" en la parte inferior de la lista de perfiles. Al hacer esto, se abrirá un campo de texto: elija un $VARIABLE diferente para cada objetivo; por ejemplo, elegí $APP_PROFILE para el objetivo de la aplicación de contenedor y $EXTENSION_PROFILE para mi objetivo de extensión Today

Esto resultará en algo como lo siguiente:

Finalmente, al xcodebuild 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 admitiría múltiples extensiones.

Funciona para mí con XCode 6.3 :)