Jenkins pour xCode

Il n’est pas concevable pour moi de développer sans avoir une plateforme d’intégration continue. Il existe pas mal de solutions pour le faire en mode SAAS (sur cloudbees pas exemple). Par contre pour le faire sur des projets iOS c’est plus dur à trouver car il faut le faire sur un MAC. J’ai donc installé un jenkins sur un Mac mini et ce n’est pas si évident que ça à faire.

Installation

Jenkins c’est un simple war à installer sur un serveur. Pour nous simplifier la vie une version installable est disponible ici. Mais les premiers problèmes arrivent vite à cause des droits utilisateur. Par défaut Jenkins utilise l’utilisateur deamon et ça pose pas mal de problèmes.

J’ai trouvé la solution sur ce blog (lien cassé :( ).

Pour résumer, il faut changer la configuration par défaut et installer Jenkins pour qu’il démarre avec l’utilisateur jenkins “Start at boot as jenkins”. Ensuite il faut créer l’utilisateur :

sudo dscl . create /Users/jenkins

sudo dscl . create /Users/jenkins PrimaryGroupID 1

sudo dscl . create /Users/jenkins UniqueID 300

sudo dscl . create /Users/jenkins UserShell /bin/bash

sudo dscl . create /Users/jenkins home /Users/Shared/Jenkins/Home/

sudo dscl . create /Users/jenkins NFSHomeDirectory /Users/Shared/Jenkins/Home/

sudo dscl . passwd /Users/jenkins

Grâce à ça vous allez pouvoir créer les clés SSH pour utiliser jenkins avec github. Pour cela il faut suivre la doc github en utilisant l’utilisateur jenkins.

XCode

Maintenant que nous pouvons récupérer les sources, il faut construire un IPA. Commencez par ajouter le plugin xcode dans jenkins.

A partir d’XCode 4.3, il faut commencer par changer le répertoire de base avec la commande :

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

J’ai eu aussi des problèmes avec les certificats développeurs. Par défaut ils sont installés dans le trousseau au niveau session donc inaccessibles d’un autre utilisateur. Là j’ai utilisé la méthode un peu “bourine” et j’ai ajouté mes certificats au niveau système.

Ensuite le build était bloqué car il ne trouvait pas le fichier de provisioning. Il suffit de les ajouter dans le répertoire :

/Users/jenkins/Library/MobileDevice/Provisioning

Et voilà ! On a enfin généré un fichier IPA avec Jenkins.

Over The Air

Pour aller un cran plus loin, j’ai eu envie de mettre en place un site pour faciliter l’installation de l’application. C’est possible depuis iOS 4. Il faut générer le plist associé à l’IPA et faire une page web avec un lien vers le plist. Mais j’ai arrété mes recherches de script pour faire ça lorsque j’ai découvert le service testFlight. Il suffit d’uploader l’IPA et testflight s’occupe de la diffusion sur les terminaux de tests (et bien plus en fait). Comme il y a un plugin jenkins pour testflight l’intégration est transparente.

 

En espérant que cette note vous gagne du temps ! :)

Liens :