[iOS] intégration d’une librairie avec CocoaPods
mercredi 13 août 2014Dans ce tutoriel, je vais vous présenter comment installer et utiliser CocoaPods:
Mais avant tout c’est quoi CocoaPods:
C’est un outil de gestion des dépendances pour Objective-C qui permet de
- – centraliser toutes les librairies disponibles
- – faciliter la recherche de mise à jour de ces librairies
- – faciliter l’inclusion des librairies dans votre projet
Installation de CocoaPods:
sudo gem update --system sudo gem install cocoapods pod setup
Attention, quand j’ai mis à jour mon Mac sur El Capitan, je suis tombé sur l’erreur suivante: ERROR: While executing gem … (Errno::EPERM) => « Operation not permitted ».
Pour la résoudre, voici les commandes à exécuter dans l’ordre:
mkdir -p $HOME/Software/ruby export GEM_HOME=$HOME/Software/ruby gem install cocoapods export PATH=$PATH:$HOME/Software/ruby/bin pod --version </p> Voici <p>Maintenant que cocoaPods est installé sur votre machine, nous allons voir comment installé la librairie AFNetworking avec cet outil dans notre projet.</p> <p>Tout d'abord, dirigeons nous dans notre projet:</p> [code] cd /path/to/Folder/Project
Une fois dans votre projet exécuté la commande suivante pour créé le fichier Podfile dans votre projet.
pod init // Ouvre le fichier dans Xcode open -a Xcode Podfile
Remplacer la ligne # platform :ios, « 6.0 » par platform :ios, « 7.0 »
Dans ce cas CocoaPods ne récupèrera que les pods qui sont compatible pour iOS7 et supérieur!
Maintenant on peut inclure les dépendances nécessaires à notre projet.
Pour cela il suffit de rajouter la ligne suivante après le « target ‘xxxx’ do »
pod 'AFNetworking', '2.3.1'
Il est possible de mettre des directives avec le tag post_install dans le fichier PodFile.
C’est un script Ruby qui est exécuter après l’installation des pods et à pour but de modifier
les settings Pods pour contourner certaines conditions comme par exemple dans le script ci dessous.
Qui force les architectures à armv7 et armv7s et retire l’architecture armv64.
Dans ce cas-ci c’est qu’il y a une librairie qui ne supporte toujours pas le 64 bits!
Mais bon c’est un setting qu’on doit plus voir maintenant car toutes les libraries doivent
toutes passées sous 64 bits.
post_install do |installer_representation| installer_representation.project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['ARCHS'] = 'armv7 armv7s' end end end
Donc avec cocoapods, il créé un projet pods qio contient ces propres build settings gérer
par cocoapods lui-même en fonction des librairies importées.
Donc à éviter de modifier
ou alors avec des directives dans le fichier PodFile.
Et donc mieux vaut laisser cocoapods gérer ces settings lui-même et les librairies
qu’on inclut dans notre projet ou les settings qu’on veut changer pour son projet on le fait dansle target de son projet et non celui de pods.
Les Build Settings injectés par CocoaPods le sont via des fichiers « .xcconfig ».
Ces settings définissent les valeurs par défaut, mais il est possible de les surcharger dans l’interface de Xcode en allant dans l’onglet Build Settings du projet ou du target.
Pour chaque Build Settings, s’il y a une valeur indiquée pour ce setting au niveau du target, c’est celui-là qui prime. Sinon c’est celui au niveau du projet s’il existe, sinon c’est celui au niveau du xcconfig, et seulement si aucun des 3 niveaux ne définit de valeur c’est la valeur par défaut.
Mais pour chaque niveau de Build Settings, il est possible d’overrider complètement, en utilisant « $(inherited) » pour hériter des Build Settings du niveau parent et y rajouter d’autres options. L’idéal est d’utiliser $(inherited) pour rajouter des réglages pour conserver les réglages CocoaPods qui lui donne les bons réglages des librairies. Il est évidemment pas conseillé de modifier directement les settings du projet Pods car ils sont défini pour les librairies importés.
Après avoir sauver le fichier, il faut demander à cocoaPods d’installer les dépendances de votre projet en Terminal.
Assurez-vous de bien toujours être dans le dossier de votre projet.
pod install
Résultat:
Analyzing dependencies Downloading dependencies Installing AFNetworking (2.3.1) Generating Pods project Integrating client project [!] From now on use `Borne.xcworkspace`.
Attention: maintenant il est important de toujours utiliser le fichier xcworkspace pour votre projet et non le fichier .xcodeproj
Le tour est joué la librairie est incluse dans votre workspace et vous trouverez un autre target Pods dans lequel on retrouve toute la librairie AFNetworking.
On a rien dû importer dans le projet, pas de framework et pas besoin de configurer des build phases
Attention: si vous utilisez cocoapods et que vous devez rajouter des « other links flags », il faudra les encoder dans le fichier « Pods-project_name.xcconfig »du projet cocoapods et non plus dans le Build settings de votre projet.
Commande pod utiles:
// Pour faire une recherche pod search 'AfNetworking' //Mettre à jour les librairies pod update