18
Intégration continue avec Xcode Server Jeffrey Macko CocoaHeads Paris Octobre 2014 1

Xcode Server - Jeffrey Macko

Embed Size (px)

Citation preview

Page 1: Xcode Server - Jeffrey Macko

Intégration continue avec Xcode Server

Jeffrey Macko

CocoaHeads Paris Octobre 2014 1

Page 2: Xcode Server - Jeffrey Macko

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

Page 3: Xcode Server - Jeffrey Macko

Intérêts des tests

• Trouver des bugs

• Limiter les risques de régression

• Augmenter la qualité du produit

3

Page 4: Xcode Server - Jeffrey Macko

Type de tests

• Test Unitaire (XCTest)

• Test asynchrone

• Test de performance

• Test d’interface (UIAutomation)

4

Page 5: Xcode Server - Jeffrey Macko

Terminologie

• Scheme (Shared)

• Bot (Build / Analyse / Archive)

• Integration (Assemblage)

5

Page 6: Xcode Server - Jeffrey Macko

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

Page 7: Xcode Server - Jeffrey Macko

OSX Server

• Mac App Store (18€)

• Apple iOS Developer portal (Gratuit)

• Simple

7

Page 8: Xcode Server - Jeffrey Macko

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

Page 9: Xcode Server - Jeffrey Macko

• 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

Page 10: Xcode Server - Jeffrey Macko

Triggers

• Pre/Post

• Variables d’environnement

10

Page 11: Xcode Server - Jeffrey Macko

µ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

Page 12: Xcode Server - Jeffrey Macko

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

Page 13: Xcode Server - Jeffrey Macko

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

Page 14: Xcode Server - Jeffrey Macko

Solutions

• cd /Library/Developer/XcodeServer

• xcodebuild test -workspace projet.xcworkspace -scheme projet -sdk iphonesimulator8.0 | xcpretty

• rm -rf /Library/Developer/XcodeServer/Integrations/Caches/*

14

Page 15: Xcode Server - Jeffrey Macko

CMDs• instruments

• xcodebuild

• xcrun

• xcrun simctl

• xcpretty (Gem ruby)

15

Page 16: Xcode Server - Jeffrey Macko

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

Page 17: Xcode Server - Jeffrey Macko

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

Page 18: Xcode Server - Jeffrey Macko

Contact

• @jeffreymacko

• Breakpoint.fm

• Consultant iOS

• Q/A

18