2012-06-20 18 views
26

Estoy configurando Jenkins para automatizar las compilaciones de iOS. ¿Hay alguna posibilidad de proporcionar un archivo .mobileprovision que no se haya agregado a la herramienta de aprovisionamiento en Xcode para xcodebuild?Proporcione xcodebuild con el archivo .mobileprovision

Sé que puedo usar PROVISIONING_PROFILE y PROVISIONING_PROFILE [sdk = iphoneos *] pero requieren que el perfil de aprovisionamiento se agregue al Organizador.

Sé que puedo hacer la operación con xcrun. Pero antes de ejecutar xcrun, debo firmar la aplicación con éxito con xcodebuild.

¿Hay alguna manera de que pueda proporcionar el archivo de perfil de suministro (.mobileprovision) a xcodebuild?

Respuesta

46

Tenemos una solución para esto: básicamente, lo que debe hacer es "instalar" el archivo .mobileprovision copiándolo en un directorio con el nombre del UUID del archivo de suministro móvil. Esto es lo que realmente hace Xcode Organizer cuando hace doble clic en un archivo .mobileprovision.

Hay un pequeño programa llamado mpParse que puede extraer el UUID del archivo de la provisión móvil que utiliza el script - enlace para descargar en el código. Entonces es muy simple copiar el archivo de la provisión móvil al lugar correcto.

Aquí hay un script que hice para hacer esto:

#!/bin/sh 

# 2012 - Ben Clayton (benvium). Calvium Ltd 
# Found at https://gist.github.com/2568707 
# 
# This script installs a .mobileprovision file without using Xcode. Unlike Xcode, it'll 
# work over SSH. 
# 
# Requires Mac OS X (I'm using 10.7 and Xcode 4.3.2) 
# 
# IMPORTANT NOTE: You need to download and install the mpParse executable from  http://idevblog.info/mobileprovision-files-structure-and-reading 
# and place it in the same folder as this script for this to work. 
# 
# Usage installMobileProvisionFile.sh path/to/foobar.mobileprovision 

if [ ! $# == 1 ]; then 
echo "Usage: $0 (path/to/mobileprovision)" 
exit 
fi 

mp=$1 

uuid=`/usr/libexec/PlistBuddy -c 'Print UUID' /dev/stdin <<< $(security cms -D -i ${mp})` 

echo "Found UUID $uuid" 

output="~/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision" 

echo "copying to $output.." 
cp "${mp}" "$output" 

echo "done" 

Puede descargar el guión directamente de https://gist.github.com/2568707

Una vez que haya ejecutado la secuencia de comandos, puede utilizar PROVISIONING_PROFILE y PROVISIONING_PROFILE [SDK = iphoneos *] en xcodebuild para crear tu aplicación. Usamos esto en producción.

Editar: Sólo como referencia, me preguntó en esencia esta pregunta aquí hace un rato (Can an Xcode .mobileprovision file be 'installed' from the command line?) y se acercó con lo anterior cuando nadie parecía saber :-)

Actualización: Como alternativa a mpParse se podría utilizar herramientas de manzana: /usr/libexec/PlistBuddy -c 'Print UUID' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)

+0

1 Gran solución - gracias por compartir. – Till

+0

¡Impresionante! Gracias =) –

+1

Me alegro de poder ayudar! –

0

Si utiliza suspiro de fastlane puede asignar su salida a una variable provision_id=sigh

esto también funciona si tiene suspiro params: sigh(...)

Ésta es la única escritura que trabajó para mí:

`var = $ (grep UUID -A1 -a | grep io "[-A-Z0-9] {36}")'

uso con: "$var.mobileprovision"

Cuestiones relacionadas