SlideShare ist ein Scribd-Unternehmen logo
1 von 41
COCOAPODS : INTRODUCTION ET BONNES PRATIQUES
COCOAHEADS – SESSION OCTOBRE 2016
SOMMAIRE
Introduction
Présentation
Installation
Utilisation
Fonctionnement
Créer ses propres Pods
Bonnes pratiques
Q/R
17.11.16 BACKELITE 2
INTRODUCTION
INTRODUCTION
Cocoa Pod
17.11.16 4BACKELITE
= Gousse de Cocoa
INTRODUCTION
CocoaPods est un gestionnaire de
dépendances pour les projets Cocoa.
17.11.16 5BACKELITE
PRÉSENTATION
Xcode Workspace
FONCTIONNEMENT
17.11.16 BACKELITE 7
AFNetworking
SwiftyJSON
MagicalRecord
CocoaPods Repo
Xcode Project
Podfile
- AFNetworking
- MagicalRecord
- SwiftyJSON
AFNetworking podspec
MagicalRecord podspec
SwiftyJSON podspec
Pods Project
AFNetworking
SwiftyJSON
MagicalRecord
INSTALLATION
INSTALLATION
17.11.16 BACKELITE 9
• Une seule commande :
sudo gem install cocoapods
UTILISATION
UTILISATION
17.11.16 BACKELITE 11
Le fichier Podfile
• Placé à la racine du projet (au même niveau que xcodeproj)
• Liste toutes les dépendances du projet
Comment ?
pod init
UTILISATION
Exemple de fichier Podfile
platform :ios, '8.0'
use_frameworks!
target 'MyApp' do
pod 'AFNetworking', '~> 2.6'
pod 'ORStackView', '~> 3.0'
pod 'SwiftyJSON', '~> 2.3'
end
17.11.16 BACKELITE 12
UTILISATION
Comment trouver des Pods (ou leurs noms) ?
• https://cocoapods.org/
• Directement sur les repos GitHub
• En ligne de commande :
pod search [QUERY]
17.11.16 BACKELITE 13
Et après ça ?
17.11.16 BACKELITE 14
UTILISATION
17.11.16 BACKELITE 15
pod install
UTILISATION
17.11.16 BACKELITE 16
UTILISATION
17.11.16 BACKELITE 17
UTILISATION
Comment utiliser nos Pods dans notre projet ?
Un simple #import à faire !
17.11.16 BACKELITE 18
UTILISATION
• Pour mettre à jour une dépendance
pod update [POD_NAME]
• Pour supprimer une dépendance
pod install (après avoir supprimé votre dépendance du Podfile)
17.11.16 BACKELITE 19
Pourquoi CocoaPods est-il si
pratique ?
17.11.16 BACKELITE 20
UTILISATION
• Crée / met à jour un workspace
• Ajoute votre projet au workspace
• Récupère les specs des Pods à installer sur le repo master de CocoaPods
(https://github.com/CocoaPods/CocoaPods)
• Récupère les sources des Pods
• Crée et ajoute la bibliothèque statique CocoaPods au projet (si nécessaire)
• Ajoute libPods.a sur vos targets dans les Build Phases (Link with libraries)
• Ajoute la Configuration Xcode CocoaPods à votre projet
• Modifie la configuration de vos targets pour utiliser CocoaPods
• Ajoute un script au Build Phase de vos targets pour copier les ressources des Pods
(images, assets, XIB, etc).
17.11.16 BACKELITE 21
CRÉER SES PROPRES PODS
CRÉER SES PROPRES PODS
DIVERSES RAISONS…
17.11.16 BACKELITE 23
• Isoler du code
• Ré-utiliser son propre code dans plusieurs projets
• « Modulariser » une grosse application
• Contribuer à la communauté
CRÉER SES PROPRES PODS
Comment ?
pod lib create [MY_POD_NAME]
17.11.16 BACKELITE 24
CRÉER SES PROPRES PODS
LA STRUCTURE D’UN POD
$ tree MyLib -L 2
MyLib
├── .travis.yml
├── _Pods.xcproject
├── Example
│ ├── MyLib
│ ├── MyLib.xcodeproj
│ ├── MyLib.xcworkspace
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ └── Tests
├── LICENSE
├── MyLib.podspec
├── Pod
│ ├── Assets
│ └── Classes
│ └── RemoveMe.[swift/m]
└── README.md
17.11.16 BACKELITE 25
CRÉER SES PROPRES PODS
LE FICHIER PODSPEC
Pod::Spec.new do |spec|
spec.name = 'Reachability'
spec.version = '3.1.0'
spec.license = { :type => 'BSD' }
spec.homepage = 'https://github.com/tonymillion/Reachability'
spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and macOS.'
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag =>
'v3.1.0' }
spec.source_files = 'Reachability.h,m'
spec.framework = 'SystemConfiguration'
spec.requires_arc = true
#spec.dependency 'SomeOtherPod’
spec.ios.deployment_target = '9.0'
spec.osx.deployment_target = '10.10’
#spec.resource_bundles = { 'Reachability' => [’Images/*.png’] }
end
17.11.16 BACKELITE 26
Comment utiliser nos Pods
fraîchement crées ?
17.11.16 BACKELITE 27
CRÉER SES PROPRES PODS
UTILISER UN POD LOCALEMENT
Dans le Podfile de votre projet, préciser le path de votre Pod.
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
17.11.16 BACKELITE 28
CRÉER SES PROPRES PODS
PUBLICATION SUR LE REPO OFFICIEL COCOAPODS
1. Vérifier votre podspec
pod spec lint
2. Publier votre podspec sur le repo CocoaPods/Specs
pod trunk push PODNAME.podspec
Le podspec est alors disponible sur https://github.com/CocoaPods/Specs
17.11.16 BACKELITE 29
BONNES PRATIQUES
BONNES PRATIQUES
GÉNÉRAL
Un Pod doit :
• Être fourni avec un projet Example contant :
• Un exemple d’implémentation / d’utilisation
• Des tests unitaires
• Documenté (au moins un README)
• Embarquer les ressources nécessaires à son utilisation (XIB, images,
assets, media, fonts, etc.)
• Déclarer ses propres dépendances dans son podspec (s’il y en a)
• Être utilisable tel quel après un « pod install »
17.11.16 BACKELITE 31
BONNES PRATIQUES
ASTUCES DIVERSES
• Utiliser l’option --no-repo-update lors d’un pod install / update
• Préciser les numéros de version de vos dépendances
• Utiliser les options :tag ou :branch pour récupérer des versions spécifiques
d’une dépendance qui n’a pas eu de release officielle sur un repo Spec
• Eviter d’inclure vos pods dans des targets et scheme ou ils ne sont pas utiles
• Penser à ajouter la ligne use_framewoks! dans votre Podfile en cas
d’utilisation de Swift
17.11.16 BACKELITE 32
BONNES PRATIQUES
ASTUCES DIVERSES
• Dans le cas où votre pod contient des ressources à exploiter, c’est au pod lui-même
de les retourner au projet hôte et non au projet hôte d’aller chercher dans le pod !
(XIB, Storyboard, images, media, font, etc.)
17.11.16 BACKELITE 33
BONNES PRATIQUES
ASTUCES DIVERSES
• Précisez le numéro de version de votre dépendance dans le Podfile !
• Consulter le fichier Podfile.lock pour suivre les versions installées de vos
dépendances
17.11.16 BACKELITE 34
BONNES PRATIQUES
POD PRIVÉ
Utiliser un repo de Spec privé pour vos outils internes.
Il s’agit d’un simple repo GIT.
Pour l’ajouter à CocoaPods :
pod repo add REPO_NAME SOURCE_URL
Pour posser un podspec sur votre repo privé
pod repo push REPO_NAME MyPod.podspec
17.11.16 BACKELITE 35
BONNES PRATIQUES
POD PRIVÉ
Solution alternative (sans repo Spec privé)
Préciser le repo Git du Pod à utiliser.
Exemple :
pod 'AFNetworking', :git =>
'https://github.com/gowalla/AFNetworking.git'
Options possibles :
:branch
:tag
:commit
17.11.16 BACKELITE 36
BONNES PRATIQUES
AVANTAGES
• Votre repo contient tout ce qu’il faut à
votre projet pour fonctionner
• Prévient de la disparition éventuelle d’une
dépendance
• En cas d’utilisation d’une intégration
continu, ne nécessite pas d’effectuer un
« pod install » côté IC, ce qui peut allonger
le temps de construction d’un build.
17.11.16 BACKELITE 37
Faut-il pousser les sources des Pods avec votre projets sur vos repos GIT/SVN ?
INCONVÉNIENTS
• Alourdi votre repo
• Nécessite un meilleur suivi du versioning
de vos dépendances.
• En travail collaboratif sur des pods privés,
peut s’avérer difficile à maintenir.
Q/R
LIENS UTILES
• https://guides.cocoapods.org/
17.11.16 BACKELITE 39
17.11.16 BACKELITE 40
david.yang@backelite.com
www.backelite.com
CONTACTEZ-NOUS
YANG David
iOS Developer / Tech Lead
17.11.16 BACKELITE 41

Weitere ähnliche Inhalte

Andere mochten auch

Messages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineMessages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineIdean France
 
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout
Meetup CocoaHeads Montpellier : conférence sur l'Auto LayoutMeetup CocoaHeads Montpellier : conférence sur l'Auto Layout
Meetup CocoaHeads Montpellier : conférence sur l'Auto LayoutIdean France
 
Cocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboardingCocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboardingIdean France
 
Cocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOSCocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOSIdean France
 
Opérer un unbundling : 6 questions que les marques doivent se poser
Opérer un unbundling : 6 questions que les marques doivent se poserOpérer un unbundling : 6 questions que les marques doivent se poser
Opérer un unbundling : 6 questions que les marques doivent se poserIdean France
 
Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}Idean France
 
CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}Idean France
 
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...Idean France
 
Sirikit par Julien Coudsi
Sirikit par Julien CoudsiSirikit par Julien Coudsi
Sirikit par Julien CoudsiIdean France
 
Un développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey HacqUn développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey HacqIdean France
 
Rendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas FontaineRendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas FontaineIdean France
 
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...Idean France
 
Les 10 Tendances du Design d'interface en 2016
Les 10 Tendances du Design d'interface en 2016Les 10 Tendances du Design d'interface en 2016
Les 10 Tendances du Design d'interface en 2016Idean France
 
Les 5 Tendances de la Performance Digitale en 2016
Les 5 Tendances de la Performance Digitale en 2016Les 5 Tendances de la Performance Digitale en 2016
Les 5 Tendances de la Performance Digitale en 2016Idean France
 
Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016Idean France
 
Les 10 tendances de la User Experience en 2015
Les 10 tendances de la User Experience en 2015Les 10 tendances de la User Experience en 2015
Les 10 tendances de la User Experience en 2015Idean France
 
Les bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerceLes bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerceUX REPUBLIC
 
Les 10 Tendances de l’Expérience Utilisateur en 2016
Les 10 Tendances de l’Expérience Utilisateur en 2016Les 10 Tendances de l’Expérience Utilisateur en 2016
Les 10 Tendances de l’Expérience Utilisateur en 2016Idean France
 
Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017Idean France
 
L'Apple Watch crée l'événement et bouscule le marché des smartwatches
L'Apple Watch crée l'événement et bouscule le marché des smartwatches  L'Apple Watch crée l'événement et bouscule le marché des smartwatches
L'Apple Watch crée l'événement et bouscule le marché des smartwatches Idean France
 

Andere mochten auch (20)

Messages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineMessages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas Fontaine
 
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout
Meetup CocoaHeads Montpellier : conférence sur l'Auto LayoutMeetup CocoaHeads Montpellier : conférence sur l'Auto Layout
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout
 
Cocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboardingCocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboarding
 
Cocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOSCocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOS
 
Opérer un unbundling : 6 questions que les marques doivent se poser
Opérer un unbundling : 6 questions que les marques doivent se poserOpérer un unbundling : 6 questions que les marques doivent se poser
Opérer un unbundling : 6 questions que les marques doivent se poser
 
Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}
 
CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}
 
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
 
Sirikit par Julien Coudsi
Sirikit par Julien CoudsiSirikit par Julien Coudsi
Sirikit par Julien Coudsi
 
Un développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey HacqUn développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey Hacq
 
Rendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas FontaineRendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas Fontaine
 
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
 
Les 10 Tendances du Design d'interface en 2016
Les 10 Tendances du Design d'interface en 2016Les 10 Tendances du Design d'interface en 2016
Les 10 Tendances du Design d'interface en 2016
 
Les 5 Tendances de la Performance Digitale en 2016
Les 5 Tendances de la Performance Digitale en 2016Les 5 Tendances de la Performance Digitale en 2016
Les 5 Tendances de la Performance Digitale en 2016
 
Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016
 
Les 10 tendances de la User Experience en 2015
Les 10 tendances de la User Experience en 2015Les 10 tendances de la User Experience en 2015
Les 10 tendances de la User Experience en 2015
 
Les bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerceLes bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerce
 
Les 10 Tendances de l’Expérience Utilisateur en 2016
Les 10 Tendances de l’Expérience Utilisateur en 2016Les 10 Tendances de l’Expérience Utilisateur en 2016
Les 10 Tendances de l’Expérience Utilisateur en 2016
 
Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017
 
L'Apple Watch crée l'événement et bouscule le marché des smartwatches
L'Apple Watch crée l'événement et bouscule le marché des smartwatches  L'Apple Watch crée l'événement et bouscule le marché des smartwatches
L'Apple Watch crée l'événement et bouscule le marché des smartwatches
 

Ähnlich wie CocoaPods par David Yang

Dev ops - Contiuous delivery
Dev ops - Contiuous deliveryDev ops - Contiuous delivery
Dev ops - Contiuous deliveryPatrice Ferlet
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
docker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugdocker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugamine17157
 
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et DerueGab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et DerueAZUG FR
 
Créer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et MavenCréer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et MavenAmico Fabien
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à dockerBoubker ABERWAG
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceChristian Charreyre
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation dockerOlivier Eeckhoutte
 
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour androidDébuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour androidBosco Basabana
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsRonan Amicel
 
Py osv newsletter-042018
Py osv newsletter-042018Py osv newsletter-042018
Py osv newsletter-042018FabMob
 
[Meetup] Optimiser ses builds Docker avec BuildKit.
[Meetup] Optimiser ses builds Docker avec BuildKit. [Meetup] Optimiser ses builds Docker avec BuildKit.
[Meetup] Optimiser ses builds Docker avec BuildKit. Julien CROUZET
 
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeConcevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeChristian Charreyre
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
Geek Time Mars 2017 : Workshop Docker
Geek Time Mars 2017 : Workshop DockerGeek Time Mars 2017 : Workshop Docker
Geek Time Mars 2017 : Workshop DockerNizar GARRACHE
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Adrien Blind
 

Ähnlich wie CocoaPods par David Yang (20)

Dev ops - Contiuous delivery
Dev ops - Contiuous deliveryDev ops - Contiuous delivery
Dev ops - Contiuous delivery
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
docker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugdocker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyug
 
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et DerueGab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
 
Créer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et MavenCréer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et Maven
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open Source
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour androidDébuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
 
Be zend docker
Be zend dockerBe zend docker
Be zend docker
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtools
 
Py osv newsletter-042018
Py osv newsletter-042018Py osv newsletter-042018
Py osv newsletter-042018
 
[Meetup] Optimiser ses builds Docker avec BuildKit.
[Meetup] Optimiser ses builds Docker avec BuildKit. [Meetup] Optimiser ses builds Docker avec BuildKit.
[Meetup] Optimiser ses builds Docker avec BuildKit.
 
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeConcevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Yocto oe
Yocto oeYocto oe
Yocto oe
 
Geek Time Mars 2017 : Workshop Docker
Geek Time Mars 2017 : Workshop DockerGeek Time Mars 2017 : Workshop Docker
Geek Time Mars 2017 : Workshop Docker
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 

Mehr von Idean France

Start with a Concept and Stop Designing like a Machine
Start with a Concept and Stop Designing like a MachineStart with a Concept and Stop Designing like a Machine
Start with a Concept and Stop Designing like a MachineIdean France
 
Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !Idean France
 
Design systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outilsDesign systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outilsIdean France
 
La recette graphique
La recette graphiqueLa recette graphique
La recette graphiqueIdean France
 
Graph QL par Andy Gigon
Graph QL par Andy GigonGraph QL par Andy Gigon
Graph QL par Andy GigonIdean France
 
Cocoheads react native + redux par Nicolas Fontaine
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas FontaineIdean France
 
Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017Idean France
 
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?Idean France
 
From Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre HarléFrom Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre HarléIdean France
 
RX Swift avril 2017 - David Yang
RX Swift avril 2017 - David YangRX Swift avril 2017 - David Yang
RX Swift avril 2017 - David YangIdean France
 
UI Design Trends for 2017
UI Design Trends for 2017UI Design Trends for 2017
UI Design Trends for 2017Idean France
 
A developer who knows how to design by Audrey Hacq
A developer who knows how to design by Audrey HacqA developer who knows how to design by Audrey Hacq
A developer who knows how to design by Audrey HacqIdean France
 
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...Idean France
 
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...Idean France
 
How to design forms that deliver a great user experience
How to design forms that deliver a great user experienceHow to design forms that deliver a great user experience
How to design forms that deliver a great user experienceIdean France
 
The top 9 Tech trends for 2016
The top 9 Tech trends for 2016The top 9 Tech trends for 2016
The top 9 Tech trends for 2016Idean France
 

Mehr von Idean France (16)

Start with a Concept and Stop Designing like a Machine
Start with a Concept and Stop Designing like a MachineStart with a Concept and Stop Designing like a Machine
Start with a Concept and Stop Designing like a Machine
 
Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !
 
Design systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outilsDesign systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outils
 
La recette graphique
La recette graphiqueLa recette graphique
La recette graphique
 
Graph QL par Andy Gigon
Graph QL par Andy GigonGraph QL par Andy Gigon
Graph QL par Andy Gigon
 
Cocoheads react native + redux par Nicolas Fontaine
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas Fontaine
 
Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017
 
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
 
From Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre HarléFrom Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre Harlé
 
RX Swift avril 2017 - David Yang
RX Swift avril 2017 - David YangRX Swift avril 2017 - David Yang
RX Swift avril 2017 - David Yang
 
UI Design Trends for 2017
UI Design Trends for 2017UI Design Trends for 2017
UI Design Trends for 2017
 
A developer who knows how to design by Audrey Hacq
A developer who knows how to design by Audrey HacqA developer who knows how to design by Audrey Hacq
A developer who knows how to design by Audrey Hacq
 
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
 
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...
 
How to design forms that deliver a great user experience
How to design forms that deliver a great user experienceHow to design forms that deliver a great user experience
How to design forms that deliver a great user experience
 
The top 9 Tech trends for 2016
The top 9 Tech trends for 2016The top 9 Tech trends for 2016
The top 9 Tech trends for 2016
 

CocoaPods par David Yang

  • 1. COCOAPODS : INTRODUCTION ET BONNES PRATIQUES COCOAHEADS – SESSION OCTOBRE 2016
  • 5. INTRODUCTION CocoaPods est un gestionnaire de dépendances pour les projets Cocoa. 17.11.16 5BACKELITE
  • 7. Xcode Workspace FONCTIONNEMENT 17.11.16 BACKELITE 7 AFNetworking SwiftyJSON MagicalRecord CocoaPods Repo Xcode Project Podfile - AFNetworking - MagicalRecord - SwiftyJSON AFNetworking podspec MagicalRecord podspec SwiftyJSON podspec Pods Project AFNetworking SwiftyJSON MagicalRecord
  • 9. INSTALLATION 17.11.16 BACKELITE 9 • Une seule commande : sudo gem install cocoapods
  • 11. UTILISATION 17.11.16 BACKELITE 11 Le fichier Podfile • Placé à la racine du projet (au même niveau que xcodeproj) • Liste toutes les dépendances du projet Comment ? pod init
  • 12. UTILISATION Exemple de fichier Podfile platform :ios, '8.0' use_frameworks! target 'MyApp' do pod 'AFNetworking', '~> 2.6' pod 'ORStackView', '~> 3.0' pod 'SwiftyJSON', '~> 2.3' end 17.11.16 BACKELITE 12
  • 13. UTILISATION Comment trouver des Pods (ou leurs noms) ? • https://cocoapods.org/ • Directement sur les repos GitHub • En ligne de commande : pod search [QUERY] 17.11.16 BACKELITE 13
  • 14. Et après ça ? 17.11.16 BACKELITE 14
  • 18. UTILISATION Comment utiliser nos Pods dans notre projet ? Un simple #import à faire ! 17.11.16 BACKELITE 18
  • 19. UTILISATION • Pour mettre à jour une dépendance pod update [POD_NAME] • Pour supprimer une dépendance pod install (après avoir supprimé votre dépendance du Podfile) 17.11.16 BACKELITE 19
  • 20. Pourquoi CocoaPods est-il si pratique ? 17.11.16 BACKELITE 20
  • 21. UTILISATION • Crée / met à jour un workspace • Ajoute votre projet au workspace • Récupère les specs des Pods à installer sur le repo master de CocoaPods (https://github.com/CocoaPods/CocoaPods) • Récupère les sources des Pods • Crée et ajoute la bibliothèque statique CocoaPods au projet (si nécessaire) • Ajoute libPods.a sur vos targets dans les Build Phases (Link with libraries) • Ajoute la Configuration Xcode CocoaPods à votre projet • Modifie la configuration de vos targets pour utiliser CocoaPods • Ajoute un script au Build Phase de vos targets pour copier les ressources des Pods (images, assets, XIB, etc). 17.11.16 BACKELITE 21
  • 23. CRÉER SES PROPRES PODS DIVERSES RAISONS… 17.11.16 BACKELITE 23 • Isoler du code • Ré-utiliser son propre code dans plusieurs projets • « Modulariser » une grosse application • Contribuer à la communauté
  • 24. CRÉER SES PROPRES PODS Comment ? pod lib create [MY_POD_NAME] 17.11.16 BACKELITE 24
  • 25. CRÉER SES PROPRES PODS LA STRUCTURE D’UN POD $ tree MyLib -L 2 MyLib ├── .travis.yml ├── _Pods.xcproject ├── Example │ ├── MyLib │ ├── MyLib.xcodeproj │ ├── MyLib.xcworkspace │ ├── Podfile │ ├── Podfile.lock │ ├── Pods │ └── Tests ├── LICENSE ├── MyLib.podspec ├── Pod │ ├── Assets │ └── Classes │ └── RemoveMe.[swift/m] └── README.md 17.11.16 BACKELITE 25
  • 26. CRÉER SES PROPRES PODS LE FICHIER PODSPEC Pod::Spec.new do |spec| spec.name = 'Reachability' spec.version = '3.1.0' spec.license = { :type => 'BSD' } spec.homepage = 'https://github.com/tonymillion/Reachability' spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' } spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and macOS.' spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' } spec.source_files = 'Reachability.h,m' spec.framework = 'SystemConfiguration' spec.requires_arc = true #spec.dependency 'SomeOtherPod’ spec.ios.deployment_target = '9.0' spec.osx.deployment_target = '10.10’ #spec.resource_bundles = { 'Reachability' => [’Images/*.png’] } end 17.11.16 BACKELITE 26
  • 27. Comment utiliser nos Pods fraîchement crées ? 17.11.16 BACKELITE 27
  • 28. CRÉER SES PROPRES PODS UTILISER UN POD LOCALEMENT Dans le Podfile de votre projet, préciser le path de votre Pod. pod 'AFNetworking', :path => '~/Documents/AFNetworking' 17.11.16 BACKELITE 28
  • 29. CRÉER SES PROPRES PODS PUBLICATION SUR LE REPO OFFICIEL COCOAPODS 1. Vérifier votre podspec pod spec lint 2. Publier votre podspec sur le repo CocoaPods/Specs pod trunk push PODNAME.podspec Le podspec est alors disponible sur https://github.com/CocoaPods/Specs 17.11.16 BACKELITE 29
  • 31. BONNES PRATIQUES GÉNÉRAL Un Pod doit : • Être fourni avec un projet Example contant : • Un exemple d’implémentation / d’utilisation • Des tests unitaires • Documenté (au moins un README) • Embarquer les ressources nécessaires à son utilisation (XIB, images, assets, media, fonts, etc.) • Déclarer ses propres dépendances dans son podspec (s’il y en a) • Être utilisable tel quel après un « pod install » 17.11.16 BACKELITE 31
  • 32. BONNES PRATIQUES ASTUCES DIVERSES • Utiliser l’option --no-repo-update lors d’un pod install / update • Préciser les numéros de version de vos dépendances • Utiliser les options :tag ou :branch pour récupérer des versions spécifiques d’une dépendance qui n’a pas eu de release officielle sur un repo Spec • Eviter d’inclure vos pods dans des targets et scheme ou ils ne sont pas utiles • Penser à ajouter la ligne use_framewoks! dans votre Podfile en cas d’utilisation de Swift 17.11.16 BACKELITE 32
  • 33. BONNES PRATIQUES ASTUCES DIVERSES • Dans le cas où votre pod contient des ressources à exploiter, c’est au pod lui-même de les retourner au projet hôte et non au projet hôte d’aller chercher dans le pod ! (XIB, Storyboard, images, media, font, etc.) 17.11.16 BACKELITE 33
  • 34. BONNES PRATIQUES ASTUCES DIVERSES • Précisez le numéro de version de votre dépendance dans le Podfile ! • Consulter le fichier Podfile.lock pour suivre les versions installées de vos dépendances 17.11.16 BACKELITE 34
  • 35. BONNES PRATIQUES POD PRIVÉ Utiliser un repo de Spec privé pour vos outils internes. Il s’agit d’un simple repo GIT. Pour l’ajouter à CocoaPods : pod repo add REPO_NAME SOURCE_URL Pour posser un podspec sur votre repo privé pod repo push REPO_NAME MyPod.podspec 17.11.16 BACKELITE 35
  • 36. BONNES PRATIQUES POD PRIVÉ Solution alternative (sans repo Spec privé) Préciser le repo Git du Pod à utiliser. Exemple : pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git' Options possibles : :branch :tag :commit 17.11.16 BACKELITE 36
  • 37. BONNES PRATIQUES AVANTAGES • Votre repo contient tout ce qu’il faut à votre projet pour fonctionner • Prévient de la disparition éventuelle d’une dépendance • En cas d’utilisation d’une intégration continu, ne nécessite pas d’effectuer un « pod install » côté IC, ce qui peut allonger le temps de construction d’un build. 17.11.16 BACKELITE 37 Faut-il pousser les sources des Pods avec votre projets sur vos repos GIT/SVN ? INCONVÉNIENTS • Alourdi votre repo • Nécessite un meilleur suivi du versioning de vos dépendances. • En travail collaboratif sur des pods privés, peut s’avérer difficile à maintenir.
  • 38. Q/R

Hinweis der Redaktion

  1. Historiquement, intégrer des bibliothèques tierces dans une application était un enfer. Le but principal de CocoaPods est de faciliter tout ça. CocoaPods en lui-même un projet opensource, hebergé sur GitHub et écrit en Ruby.
  2. On a donc fait notre pod install. Qu’est ce qui a changer ??
  3. Use_frameworks! -> CocoaPods écrit en Swift
  4. Et après ça ? On a listé nos dépendances, il ne reste plus qu’à les installer.
  5. Et après ça, on est tout bon ! Mais que s’est-il passé ? On va le voir dans le chapitre
  6. Du côté Finder… CocoaPods nous a crée un workspace. On a notre fichier Podfile. Le fichier Podfile.lock et un dossier Pods. Dorénavant on utilisera le workspace !
  7. Nos dépendances ont en fait été regroupées dans un projet « Pods ». Depuis notre projet principal, on a donc désormais accès à toutes les bibliothèques tierces qui se sont retrouvées dans le projet Pods. Comment on fait-ça ? -> Next slide.
  8. On a vu combien c’est pratique d’utiliser CocoaPods pour nos projets iOS. Et pour aller plus loin, il peut arriver qu’on ait envie de créer nos propres Pods
  9. Le code de notre pod va dans Pod. Example : projet d’example utilisant notre Pod. On voit que dedans on a un Podfile qui en fait indique au projet exemple d’utiliser le pod qu’on vient de créer. Remarque, lorsqu’on ajoute des resources, il faut donc faire un pod update dans le projet Example ! C’est aussi dans le projet Example qu’on fait les TU pour notre Pod. Transition : le podspec !
  10. Il s’agit d’un fichier qui présente votre Pod (nom, version, repo git, branche, description, etc). Il fournit également des informations importantes lorsqu’ils sont ajouté à un projet : Les sources du Pods Les frameworks natifs Les dépendances Les resources à embarquer Ce fichier est indispensable à l’utilisation d’un Pod. On ne peut pas l’installer sans.
  11. Pod trunk push : Pousse le fichier podspec sur le repo Git officiel de CocoaPods.
  12. Numéro de version : évite d’avoir une dépendance mise à jour malencontreusement lors de pod update :tag ou :branch -> pour récupérer des versions experimentales en Swift 3 par exemple…
  13. Numéro de version : évite d’avoir une dépendance mise à jour malencontreusement lors de pod update :tag ou :branch -> pour récupérer des versions experimentales en Swift 3 par exemple…
  14. Numéro de version : évite d’avoir une dépendance mise à jour malencontreusement lors de pod update :tag ou :branch -> pour récupérer des versions experimentales en Swift 3 par exemple…