Download - CocoaPods par David Yang
COCOAPODS : INTRODUCTION ET BONNES PRATIQUESCOCOAHEADS – SESSION OCTOBRE 2016
3 MAI 2023 BACKELITE 2
SOMMAIRE
IntroductionPrésentationInstallationUtilisationFonctionnementCréer ses propres PodsBonnes pratiquesQ/R
INTRODUCTION
3 MAI 2023 BACKELITE 4
INTRODUCTION
Cocoa Pod = Gousse de Cocoa
3 MAI 2023 BACKELITE 5
INTRODUCTION
CocoaPods est un gestionnaire de dépendances pour les projets Cocoa.
PRÉSENTATION
3 MAI 2023 BACKELITE 7
Xcode Workspace
FONCTIONNEMENT
AFNetworking
SwiftyJSON
MagicalRecord
CocoaPods RepoXcode Project
Podfile
- AFNetworking- MagicalRecord- SwiftyJSON
AFNetworking podspec
MagicalRecord podspec
SwiftyJSON podspec
Pods Project
AFNetworking
SwiftyJSON
MagicalRecord
INSTALLATION
3 MAI 2023 BACKELITE 9
INSTALLATION
• Une seule commande :
sudo gem install cocoapods
UTILISATION
3 MAI 2023 BACKELITE 11
UTILISATION
Le fichier Podfile• Placé à la racine du projet (au même niveau que xcodeproj)• Liste toutes les dépendances du projet
Comment ?
pod init
3 MAI 2023 BACKELITE 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
3 MAI 2023 BACKELITE 13
UTILISATION
Comment trouver des Pods (ou leurs noms) ?
• https://cocoapods.org/• Directement sur les repos GitHub• En ligne de commande :
pod search [QUERY]
3 MAI 2023 BACKELITE 14
Et après ça ?
3 MAI 2023 BACKELITE 15
UTILISATION
pod install
3 MAI 2023 BACKELITE 16
UTILISATION
3 MAI 2023 BACKELITE 17
UTILISATION
3 MAI 2023 BACKELITE 18
UTILISATION
Comment utiliser nos Pods dans notre projet ?
Un simple #import à faire !
3 MAI 2023 BACKELITE 19
UTILISATION
• Pour mettre à jour une dépendancepod update [POD_NAME]
• Pour supprimer une dépendancepod install (après avoir supprimé votre dépendance du Podfile)
3 MAI 2023 BACKELITE 20
Pourquoi CocoaPods est-il si pratique ?
3 MAI 2023 BACKELITE 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).
CRÉER SES PROPRES PODS
3 MAI 2023 BACKELITE 23
CRÉER SES PROPRES PODSDIVERSES RAISONS…
• Isoler du code• Ré-utiliser son propre code dans plusieurs projets• « Modulariser » une grosse application• Contribuer à la communauté
3 MAI 2023 BACKELITE 24
CRÉER SES PROPRES PODS
Comment ?
pod lib create [MY_POD_NAME]
3 MAI 2023 BACKELITE 25
CRÉER SES PROPRES PODSLA 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
3 MAI 2023 BACKELITE 26
CRÉER SES PROPRES PODSLE 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' => '[email protected]' } 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
3 MAI 2023 BACKELITE 27
Comment utiliser nos Pods fraîchement crées ?
3 MAI 2023 BACKELITE 28
CRÉER SES PROPRES PODSUTILISER UN POD LOCALEMENT
Dans le Podfile de votre projet, préciser le path de votre Pod.
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
3 MAI 2023 BACKELITE 29
CRÉER SES PROPRES PODSPUBLICATION SUR LE REPO OFFICIEL COCOAPODS
1. Vérifier votre podspecpod spec lint
2. Publier votre podspec sur le repo CocoaPods/Specspod trunk push PODNAME.podspec
Le podspec est alors disponible sur https://github.com/CocoaPods/Specs
BONNES PRATIQUES
3 MAI 2023 BACKELITE 31
BONNES PRATIQUESGÉ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 »
3 MAI 2023 BACKELITE 32
BONNES PRATIQUESASTUCES 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
3 MAI 2023 BACKELITE 33
BONNES PRATIQUESASTUCES 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.)
3 MAI 2023 BACKELITE 34
BONNES PRATIQUESASTUCES 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
3 MAI 2023 BACKELITE 35
BONNES PRATIQUESPOD 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
3 MAI 2023 BACKELITE 36
BONNES PRATIQUESPOD 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
3 MAI 2023 BACKELITE 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.
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
3 MAI 2023 BACKELITE 39
LIENS UTILES
• https://guides.cocoapods.org/
3 MAI 2023 BACKELITE 40
3 MAI 2023 BACKELITE 41
www.backelite.com
CONTACTEZ-NOUSYANG DavidiOS Developer / Tech Lead