Intégration continue
avec Xcode Server
Jeffrey Macko
CocoaHeads Paris
Octobre 2014 1
Intégration continue
• Découverte automatique et rapide de bug de
régression
• Améliorer la collaboration
• Améliorer la qualité du logiciel
• Automatisation et simplification de la distribution
• La re-factorisation devient plus envisageable
2
Intérêts des tests
• Trouver des bugs
• Limiter les risques de régression
• Augmenter la qualité du produit
3
Type de tests
• Test Unitaire (XCTest)
• Test asynchrone
• Test de performance
• Test d’interface (UIAutomation)
4
Terminologie
• Scheme (Shared)
• Bot (Build / Analyse / Archive)
• Integration (Assemblage)
5
Pré-requis
• OSX Maverick
• Réseau Local
• iOS7 Minimum
• Les devices déjà reconnus par iTunes
• Build Settings -> Provisioning profile Intégration
• Créer les bots sur la machine du serveur
6
OSX Server
• Mac App Store (18€)
• Apple iOS Developer portal
(Gratuit)
• Simple
7
Fonctions d’Xcode Server
• Intégration avec le programme developer
d’Apple
• Support de device de test
• Intégration avec Xcode simplifiée
• Archivage des ipa
• Hébergement du repository Git
8
• Le bot n’est administrable que depuis Xcode, il
faut être dans le projet correspondant pour les
administrer
• Ordonnancement de l’assemblage
• Notifications
• Scripts pre/post assemblage
Bots
9
Triggers
• Pre/Post
• Variables d’environnement
10
µXcodeServerBot
• Pre/Post hook
• Diffusion de l’état du bot sur Slack
• Limitations… manipulations de xcode server
pour lancer une intégration comme dans la
vidéo 415 de la WWDC 2014
11
Instruments
• Analyse de problèmes "simplifié"
• Génération de trace en cas de problèmes ?
• instruments -t Automation -D test.trace -w
82A63925-D544-48C2-A433-DF29F5270461
PagesJaunes.app -e UIASCRIPT test.js -e
UIARESULTSPATH test_instruments/
12
Problèmes
• Pas mal de problème avec le ssh
• if (Xcode Server < 3.2.1) [NSNightmare start];
• Message d’erreurs pas forcément
compréhensible
• Qui est _xcsbuildd ?
• Il manque des variables d’environnement au
niveau des triggers(le chemin vers le projet)
13
Solutions
• cd /Library/Developer/XcodeServer
• xcodebuild test -workspace projet.xcworkspace
-scheme projet -sdk iphonesimulator8.0 |
xcpretty
• rm -rf /Library/Developer/XcodeServer/
Integrations/Caches/*
14
CMDs
• instruments
• xcodebuild
• xcrun
• xcrun simctl
• xcpretty (Gem ruby)
15
Retour d’expérience
• Xcode Server fonctionne de façon vraiment
fiable depuis la dernière version(v2)
• Coupling entre Xcode et Xcode Server trop fort
• Sur device ce n’est pas encore parfait
• iOS 6 pas correctement supporté
16
Un peu de fun ?
• Xcode Server a une API REST versionnée a quand une documentation
officielle ?
• Xcode Server est composé d’une app node.js (/Library/Developer/
XcodeServer/CurrentXcodeSymlink/Contents/Developer/usr/share/xcs/
xcsd/) qui manipule des binaires sur la machine hôte
• Il stoque ses données dans :
• CouchDB -> http://127.0.0.1:10355/_utils
• Redis (127.0.0.1:10356)(a debugger avec redis-desktop-manager)
• http://127.0.0.1:20300/diagnostics/ (je n’ai pas encore compris l’utilitée
de cette interface)
17
Contact
• @jeffreymacko
• Breakpoint.fm
• Consultant iOS
• Q/A
18

Xcode Server - Jeffrey Macko

  • 1.
    Intégration continue avec XcodeServer Jeffrey Macko CocoaHeads Paris Octobre 2014 1
  • 2.
    Intégration continue • Découverteautomatique et rapide de bug de régression • Améliorer la collaboration • Améliorer la qualité du logiciel • Automatisation et simplification de la distribution • La re-factorisation devient plus envisageable 2
  • 3.
    Intérêts des tests •Trouver des bugs • Limiter les risques de régression • Augmenter la qualité du produit 3
  • 4.
    Type de tests •Test Unitaire (XCTest) • Test asynchrone • Test de performance • Test d’interface (UIAutomation) 4
  • 5.
    Terminologie • Scheme (Shared) •Bot (Build / Analyse / Archive) • Integration (Assemblage) 5
  • 6.
    Pré-requis • OSX Maverick •Réseau Local • iOS7 Minimum • Les devices déjà reconnus par iTunes • Build Settings -> Provisioning profile Intégration • Créer les bots sur la machine du serveur 6
  • 7.
    OSX Server • MacApp Store (18€) • Apple iOS Developer portal (Gratuit) • Simple 7
  • 8.
    Fonctions d’Xcode Server •Intégration avec le programme developer d’Apple • Support de device de test • Intégration avec Xcode simplifiée • Archivage des ipa • Hébergement du repository Git 8
  • 9.
    • Le botn’est administrable que depuis Xcode, il faut être dans le projet correspondant pour les administrer • Ordonnancement de l’assemblage • Notifications • Scripts pre/post assemblage Bots 9
  • 10.
  • 11.
    µXcodeServerBot • Pre/Post hook •Diffusion de l’état du bot sur Slack • Limitations… manipulations de xcode server pour lancer une intégration comme dans la vidéo 415 de la WWDC 2014 11
  • 12.
    Instruments • Analyse deproblèmes "simplifié" • Génération de trace en cas de problèmes ? • instruments -t Automation -D test.trace -w 82A63925-D544-48C2-A433-DF29F5270461 PagesJaunes.app -e UIASCRIPT test.js -e UIARESULTSPATH test_instruments/ 12
  • 13.
    Problèmes • Pas malde problème avec le ssh • if (Xcode Server < 3.2.1) [NSNightmare start]; • Message d’erreurs pas forcément compréhensible • Qui est _xcsbuildd ? • Il manque des variables d’environnement au niveau des triggers(le chemin vers le projet) 13
  • 14.
    Solutions • cd /Library/Developer/XcodeServer •xcodebuild test -workspace projet.xcworkspace -scheme projet -sdk iphonesimulator8.0 | xcpretty • rm -rf /Library/Developer/XcodeServer/ Integrations/Caches/* 14
  • 15.
    CMDs • instruments • xcodebuild •xcrun • xcrun simctl • xcpretty (Gem ruby) 15
  • 16.
    Retour d’expérience • XcodeServer fonctionne de façon vraiment fiable depuis la dernière version(v2) • Coupling entre Xcode et Xcode Server trop fort • Sur device ce n’est pas encore parfait • iOS 6 pas correctement supporté 16
  • 17.
    Un peu defun ? • Xcode Server a une API REST versionnée a quand une documentation officielle ? • Xcode Server est composé d’une app node.js (/Library/Developer/ XcodeServer/CurrentXcodeSymlink/Contents/Developer/usr/share/xcs/ xcsd/) qui manipule des binaires sur la machine hôte • Il stoque ses données dans : • CouchDB -> http://127.0.0.1:10355/_utils • Redis (127.0.0.1:10356)(a debugger avec redis-desktop-manager) • http://127.0.0.1:20300/diagnostics/ (je n’ai pas encore compris l’utilitée de cette interface) 17
  • 18.