41
COCOAPODS : INTRODUCTION ET BONNES PRATIQUES COCOAHEADS – SESSION OCTOBRE 2016

CocoaPods par David Yang

Embed Size (px)

Citation preview

Page 1: CocoaPods par David Yang

COCOAPODS : INTRODUCTION ET BONNES PRATIQUESCOCOAHEADS – SESSION OCTOBRE 2016

Page 2: CocoaPods par David Yang

3 MAI 2023 BACKELITE 2

SOMMAIRE

IntroductionPrésentationInstallationUtilisationFonctionnementCréer ses propres PodsBonnes pratiquesQ/R

Page 3: CocoaPods par David Yang

INTRODUCTION

Page 4: CocoaPods par David Yang

3 MAI 2023 BACKELITE 4

INTRODUCTION

Cocoa Pod = Gousse de Cocoa

Page 5: CocoaPods par David Yang

3 MAI 2023 BACKELITE 5

INTRODUCTION

CocoaPods est un gestionnaire de dépendances pour les projets Cocoa.

Page 6: CocoaPods par David Yang

PRÉSENTATION

Page 7: CocoaPods par David Yang

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

Page 8: CocoaPods par David Yang

INSTALLATION

Page 9: CocoaPods par David Yang

3 MAI 2023 BACKELITE 9

INSTALLATION

• Une seule commande :

sudo gem install cocoapods

Page 10: CocoaPods par David Yang

UTILISATION

Page 11: CocoaPods par David Yang

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

Page 12: CocoaPods par David Yang

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

Page 13: CocoaPods par David Yang

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]

Page 14: CocoaPods par David Yang

3 MAI 2023 BACKELITE 14

Et après ça ?

Page 15: CocoaPods par David Yang

3 MAI 2023 BACKELITE 15

UTILISATION

pod install

Page 16: CocoaPods par David Yang

3 MAI 2023 BACKELITE 16

UTILISATION

Page 17: CocoaPods par David Yang

3 MAI 2023 BACKELITE 17

UTILISATION

Page 18: CocoaPods par David Yang

3 MAI 2023 BACKELITE 18

UTILISATION

Comment utiliser nos Pods dans notre projet ?

Un simple #import à faire !

Page 19: CocoaPods par David Yang

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)

Page 20: CocoaPods par David Yang

3 MAI 2023 BACKELITE 20

Pourquoi CocoaPods est-il si pratique ?

Page 21: CocoaPods par David Yang

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).

Page 22: CocoaPods par David Yang

CRÉER SES PROPRES PODS

Page 23: CocoaPods par David Yang

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é

Page 24: CocoaPods par David Yang

3 MAI 2023 BACKELITE 24

CRÉER SES PROPRES PODS

Comment ?

pod lib create [MY_POD_NAME]

Page 25: CocoaPods par David Yang

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

Page 26: CocoaPods par David Yang

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

Page 27: CocoaPods par David Yang

3 MAI 2023 BACKELITE 27

Comment utiliser nos Pods fraîchement crées ?

Page 28: CocoaPods par David Yang

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'

Page 29: CocoaPods par David Yang

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

Page 30: CocoaPods par David Yang

BONNES PRATIQUES

Page 31: CocoaPods par David Yang

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 »

Page 32: CocoaPods par David Yang

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

Page 33: CocoaPods par David Yang

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.)

Page 34: CocoaPods par David Yang

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

Page 35: CocoaPods par David Yang

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

Page 36: CocoaPods par David Yang

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

Page 37: CocoaPods par David Yang

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.

Page 38: CocoaPods par David Yang

Q/R

Page 39: CocoaPods par David Yang

3 MAI 2023 BACKELITE 39

LIENS UTILES

• https://guides.cocoapods.org/

Page 40: CocoaPods par David Yang

3 MAI 2023 BACKELITE 40

Page 41: CocoaPods par David Yang

3 MAI 2023 BACKELITE 41

[email protected]

www.backelite.com

CONTACTEZ-NOUSYANG DavidiOS Developer / Tech Lead