Automatiser le deploiement over the air

le 16/11/2010 par Vincent Daubry
Tags: Software Engineering

Automatiser le déploiement over the air

Nous en parlions déjà : depuis l'iOS4 un nouveau mode de déploiement "over the air" est disponible (i.e : par téléchargement de l'application directement depuis l'iPhone, sans passer par iTunes). Celui-ci simplifie la distribution de démo aux beta testeurs, en particulier en entreprise ou l'utilisation d'iTunes est parfois problématique. Ce mode de déploiement permet également la création d'un App Store d'entreprise. Jusqu'ici ce processus restait encore entièrement manuel. Plus maintenant !

Dans cet article nous verrons comment automatiser le déploiement au moyen d'une Usine De Dev iPhone (UDD), afin de le rendre plus fiable et plus productif.

La commande manquante :

Le déploiement over the air se base sur une nouvelle commande proposée par l'interface graphique d'Xcode : "Build and Archive" permettant de packager l'application en embarquant le fichier de provisionning. Dès la sortie de cette nouvelle fonction des questions ont commencé à fleurir un peu partout sur les forums demandant comment exécuter ce fameux build and archive en ligne de commande.

En effet si la commande "xcodebuild" pour lancer un simple build est bien connue, celle ci ne permet que de générer un fichier ".app". En l'état ce fichier ne peut être distribué over the air car il lui manque le fichier de provisionning : nous devons le packager dans un fichier ".ipa" contenant le provisionning profile et signer le tout avec notre certificat de développement Apple.

C'est en observant la console du mac que l'on voit passer la commande correspondant au build and archive permettant de packager l'application :

Extrait des logs de la console : 31/10/10 20:57:16 Xcode[16510] Running /usr/bin/xcrun with ( "-sdk", iphoneos, PackageApplication, "-v", "/Users/barbu/Library/MobileDevice/Archived Applications/FDA8B2FA-5AE1-43E7-BF9F-CD32FD258907.apparchive/TestTemplate.app", "-o", "/Users/barbu/Library/MobileDevice/Archived Applications/FDA8B2FA-5AE1-43E7-BF9F-CD32FD258907.apparchive/TestTemplate.ipa", "--sign", "iPhone Developer: M VINCENT DAUBRY (J9TS3TJRYX)", "--embed", "/Users/barbu/Library/MobileDevice/Provisioning Profiles/68D899AB-9FEB-4CBB-A080-1078FF2FABCF.mobileprovision" )

Le script de déploiement :

Nous pouvons maintenant écrire un script qui :

  • Build l'application en .app
 xcodebuild -target "${PROJECT_NAME}" -sdk "${TARGET_SDK}" -configuration Release
  • Package ce fichier en .ipa
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}"

Vous trouverez ici un exemple de script de build

EDIT : Le 13 juin 2012

Depuis la publication de cet article, l'industrialisation des développements iOS se sont enrichis. Notamment avec l'apparition du plugin XCode pour Jenkins.

OCTO développe depuis plus d'un an une solution de d'Enterprise App Store, Appaloosa Store, qui permet à nos équipes, à nos clients mais également à tous ceux qui le souhaitent, d'aller plus loin dans la distribution de leurs applications privées over-the-air.

Appaloosa bénéficie lui aussi d'un plugin pour Jenkins, permettant de déployer automatiquement la toute dernière version d'une application afin que les équipes de test puissent la recetter.