xcodebuild perfil de aprovisionamiento diferente para la dependencia de destino

Estoy intentando 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 objectives. Uno de los objectives 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 esperaba:

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

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

    Pasé demasiado tiempo trabajando en esto hoy. Iba a la cama cuando me llegó la respuesta:

    En cada una de las configuraciones de comstackción de sus objectives, debe establecer $VARIABLE para el nombre del perfil. Para hacerlo, seleccionó “Otro” de la parte inferior de la lista de perfiles. Al hacer esto, se abrirá un campo de texto: elija una $VARIABLE diferente para cada objective; por ejemplo, elegí $APP_PROFILE para el destino de la aplicación de contenedor y $EXTENSION_PROFILE para mi objective de extensión Today.

    Agregar una variable variable de compilación ...

    Esto dará como resultado algo como lo siguiente:

    Perfiles

    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, hasta donde pude decir, XCode está seleccionando los perfiles predeterminados (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, porque 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 son las mismas.

    Por ejemplo, verá eso,

    • TargetApp -> Configuraciones de comstackción -> “Identidad de firma de código (id)” (Versión)
    • TargetExtension -> Build Settings -> “Code Signing Identity (id)” (Lanzamiento)

    son esencialmente la misma cadena, digamos que esta identidad es “Identidad de firma de código (id)” . Entonces, para construir y exportar archivos, lo que puedes ejecutar, son 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