CocoaPods par David Yang

  • View
    168

  • Download
    2

  • Category

    Mobile

Preview:

Citation preview

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' => '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

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

david.yang@backelite.com

www.backelite.com

CONTACTEZ-NOUSYANG DavidiOS Developer / Tech Lead

Recommended