Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Génération et déploiement d'ipa

Avatar for teriiehina teriiehina
September 12, 2014

Génération et déploiement d'ipa

Une présentation à Cocoaheads Paris d'un outil interne @ PagesJaunes (hermes) qui permet de générer et distribuer des ipa à partir d'un plist

Avatar for teriiehina

teriiehina

September 12, 2014

More Decks by teriiehina

Other Decks in Programming

Transcript

  1. iOS @ PagesJaunes • 5 applications • 8 développeurs (3

    internes) en 2 CT • 300k VU par jour, 0.30% de crash • Scrum, une release toute les 6 semaines • TDD : "Tests Desired" Development
 (7% à 48% de couverture du code)
  2. Encore une prez sur le déploiement ? • 03/2014: Simone

    Civetta , TestFlight et les outils de distribution continue • 12/2013: Rémy Virin , Continuous Integration from Unit Tests to Hardware • 03/2013: Laurent Magnin , TestFlight • 05/2012: Jacques Foucry , Build automatique et distribution OTA avec Xcode 4.x et Jenkins • 05/2012: Gaël Durand & Jérémie Toudic: Intégration continue pour les nuls
  3. Encore une prez sur le déploiement ? • Oui, on

    a réinventé la roue • Non, on n'est pas meilleur que TestFlight, HockeyApp ou autre. Bien au contraire \o/ • On a un workflow ... spécifique ;) • C'est plus du retour d'expérience et de l'appel à témoignage/contribution que de la présentation de solutions «professionnelles»
  4. En théorie Dans la mythologie grecque, Hermès est une des

    divinités de l'Olympe. Il est le messager des dieux, donneur de la chance, l'inventeur des poids et des mesures, le gardien des routes et des carrefours, des voyageurs et du commerce. Il guide les héros et conduit leurs âmes aux Enfers. Page d'Hermès sur Wikipedia FR
  5. En pratique Hermes, c'est: ! - une procédure manuelle -

    devenu script shell - placé dans un job jenkins, - bidouillé au petit bonheur la chance, - sorti depuis dans une gem - qui ne demande qu'à être une CLI respectable.
  6. Historique (1/3) Ma boite email est pleine Archiver > Exporter

    AdHoc > Samba C'est compliqué à installer via iTunes C'est pas trop tôt ! Archiver > Exporter AdHoc > Email 2011 On a codé un AppStore interne à la boite 2012
  7. Historique (2/3) On veut pouvoir tester sur tous les serveurs

    (5 mini, pas de max) OK, on vous cache un menu de sélection dans l'appli pour passer d'un serveur à l'autre Non, on veut un IPA par serveur ... C'est pas trop tôt ! OK, on tout mis dans jenkins, maintenant ça déploie en continu
  8. Historique (3/3) Euh, dans chaque ipa ? Bon, ben on

    n'activera nos outils de validation que dans une version spécifique On veut ajouter une librairie (vraiment) tierce pour faire des tests fonctionnels 2013 Non, non, dans un ipa dédié. Et pour chaque serveur bien sûr On veut une application aussi rapide que l'éclair (pour faire le buzz) 2014 ...
  9. Pourquoi ? • Pour apprendre • Pour pouvoir être utilisé

    aussi facilement en manuel qu'en déploiement continu, (un MacMini, ça peut lâcher) • Parce que 4 schemes : Livraison, Validation, Ranorex, Release • Pour mettre à jour le fichier PagesJaunes-Info.plist • Pour utiliser notre AppStore maison • Par "facilité"
  10. Comment ? • Si ça sert à générer l'APP, c'est

    commité (PJPods) • Si ça sert à génerer l'IPA, ce n'est pas commité • Tout est (potentiellement) configurable dans un plist • Indépendant (il faut juste un serveur web, version sans Parse possible) • Tous les artefacts sont suffixés avec le SHA-1 du commit en cours
  11. hermes -h • WIVEP (Work In Very Early Progress) •

    git clone [email protected]:teriiehina/hermes.git • gem build hermes.gemspec; 
 gem install hermes-1.0.Z.gem • 3 actions: build , upload , deploy • un seul paramètre : le plist de déploiement
  12. build • MAJ à jour de l'Info.plist et de l'icône

    avant génération de l'ipa • 4 schemes, 3 versions = 11 IPAs • 12 minutes sur un MacPro
  13. upload & deploy • les IPA et les DSYM vont

    sur un serveur (en ssh), • les plists sur un autre (en ftp) (merci iOS7.1) • Ajout d'entrées dans parse.com pour le DTAppStore • On ne peut pas accéder à l'API Parse depuis le réseau d'entreprise
  14. tl;dl* • `git clone` doit suffir à compiler • Punissez

    quelqu'un en lui faisant faire une prez/ étude sur le déploiement • Faites tourner les déploiements • Feature flipping is fun • mdimport -g /Applications/Xcode.app/Contents/ Library/Spotlight/uuid.mdimporter ~ *too long, didn't listen
  15. Shameless plug • Peter, @teriiehina • Lead Dev iOS chez

    PagesJaunes avec @j_godon • BreakPointFM avec @jeffreymacko http://www.breakpoint.fm