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 :)