Intégration continue pour iOS
Cocoaheads Montréal - 10 Septembre 2013
Tuesday, 10 September, 13
Slide 2
Slide 2 text
Qui ?
Romain Pouclet
@palleas
Développeur iOS chez
TechSolCom / R3D
Craint l’eau froide du
Pacifique
Tuesday, 10 September, 13
Slide 3
Slide 3 text
TechSolCom / R3D
Développement web, mobile (et plein d’autres trucs)
Radio Canada, Sur La Route, SAQ
Une équipe de soccer
Tuesday, 10 September, 13
Slide 4
Slide 4 text
Disclaimer
Tuesday, 10 September, 13
Slide 5
Slide 5 text
Integration continue
“L'intégration continue est un ensemble de pratiques
utilisées en génie logiciel consistant à vérifier à
chaque modification de code source que le résultat
des modifications ne produit pas de régression dans
l'application développée.”
(Wikipedia)
Tuesday, 10 September, 13
Slide 6
Slide 6 text
Round 1
Tuesday, 10 September, 13
Slide 7
Slide 7 text
Les besoins de TSC
S’assurer que l’application compile sur un
environnement “neutre” (“ça marche chez moi :(”)
Faciliter l’accès aux builds de développement pour les
testeurs et les clients
Tuesday, 10 September, 13
Slide 8
Slide 8 text
Jenkins
Tuesday, 10 September, 13
Slide 9
Slide 9 text
Je déteste Jenkins.
Tuesday, 10 September, 13
Slide 10
Slide 10 text
Jenkins
Lance les tests, build, deploie
Opensource (MIT)
Des millions de plugins dont un pour Xcode
Gestion de “slave”
Des bugs rigolos
Tuesday, 10 September, 13
Slide 11
Slide 11 text
Jenkins Xcodebuild
Fonctionne (c’est déjà ça)
Quelques bugs (espaces dans les arguments...)
Abstrait trop le processus...
... et en même temps pas assez (wat?)
Tuesday, 10 September, 13
Slide 12
Slide 12 text
Jenkins Xcodebuild
Tuesday, 10 September, 13
Slide 13
Slide 13 text
TSC Store
Hébergement des builds de démo pour les clients
Liste de toutes les applications pour les testeurs et les
commerciaux
Pas de testflight & co chez TSC : 100% homemade
Tuesday, 10 September, 13
Slide 14
Slide 14 text
TSCStore internals
Un gros script bash
PlistBuddy -c "Print :CFBundleIdentifier" "Payload/
Traffic.app/Info.plist" (génération du manifest)
scp Traffic.ipa tscstore:builds/traffic.ipa (upload du
fichier ipa)
Simple application Web pour lister les builds
Tuesday, 10 September, 13
Slide 15
Slide 15 text
TSCStore
Tuesday, 10 September, 13
Slide 16
Slide 16 text
TSCStore
Tuesday, 10 September, 13
Slide 17
Slide 17 text
Oui, mais
Pas de gestion du versionning des builds
Timeout SSH
Maintenance laborieuse
j’étais un peu nul en bash
mes collègues ne font pas de PHP
Interface douteuse (Raw twitter bootstrap)
iOS only
Tuesday, 10 September, 13
Slide 18
Slide 18 text
Round 2
Tuesday, 10 September, 13
Slide 19
Slide 19 text
Nouveaux besoins
Se débarasser de Jenkins Xcodebuild
Comment gérer le stockage et le versionning des
builds ?
Quelle technologie pour l’upload ?
Stockage des applications Android
Tuesday, 10 September, 13
Upload et stockage : nexus
“Sonatype Nexus sets the standard for repository
management providing development teams with the
ability to proxy remote repositories and share software
artifacts.”
(http://www.sonatype.org/nexus/)
Tuesday, 10 September, 13
Slide 22
Slide 22 text
Cherry on top : ant & maven
because xcodebuild wasn’t verbose enough
ant : formatter le script de build dans un format facile à
comprendre et à maintenir
maven : upload sur le nexus (mvn deploy:deploy-file)
Tuesday, 10 September, 13
Slide 23
Slide 23 text
TSCStore v2
Application Spring MVC communiquant avec le Nexus
via une API
Supporte du coup plusieurs versions et plusieurs
plateformes
Accès protégé par notre LDAP + ACL
Tuesday, 10 September, 13
Slide 24
Slide 24 text
TSCStore v2
Tuesday, 10 September, 13
Slide 25
Slide 25 text
TSCStore v2
Tuesday, 10 September, 13
Slide 26
Slide 26 text
Besoin bonus : qualité
Besoin de surveiller la “qualité” du code
Plugin sonar pour Objective-c très limité
Utilisation de OCLint
Tuesday, 10 September, 13
Slide 27
Slide 27 text
OCLint
OCLint is a static code analysis tool for improving quality
and reducing defects by inspecting C, C++ and
Objective-C code and looking for potential problems
(http://oclint.org/)
Tuesday, 10 September, 13
Slide 28
Slide 28 text
OCLint
Simple à installer
Pas forcément simple à utiliser si on ne sait pas lire
oclint-xcodebuild
oclint-json-compilation-database
Possibilité d’ajuster certains critères
⾠ Gourmand en mémoire (externals, Pods...)
Tuesday, 10 September, 13
Slide 29
Slide 29 text
OCLint + PMD
Tuesday, 10 September, 13
Slide 30
Slide 30 text
La suite
Intégrer les suites de tests
Code coverage ? (meh)
Regarder du coté des Bots Xcode 5
...
Tuesday, 10 September, 13