Comment intégrer les Cocoapods à un projet Swift?

84

Alors qu'Apple a présenté Swift , son nouveau langage de programmation, je me demande comment vous pouvez l'intégrer aux bibliothèques Objective-C existantes disponibles via CocoaPods ?

Michal K.
la source
Vous pouvez également lire mon récent article sur la configuration des CocoaPods avec votre projet Swift.
Hemang

Réponses:

78

Cocoapods 0.36 et supérieur introduit l' use_frameworks!instruction qui implique que l'en-tête de pontage n'est pas nécessaire pour importer des pods Objective-C dans Swift.

Veuillez trouver ci-dessous un exemple complet utilisant MBProgressHUD et Alamofire :

1. Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!

pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod

2. Suppression

Supprimez les #imports de votre en-tête de pontage ou même supprimez le fichier d'en-tête de pontage si vous n'en avez pas besoin. Si vous choisissez cette dernière possibilité, n'oubliez pas de supprimer le chemin (vers ce fichier d'en-tête de pont supprimé) dans la configuration de votre projet Xcode.

3. Ajout d'importations

Ajoutez import MBProgressHUDet / ou import Alamofireen haut de tous les fichiers Swift qui ont besoin de ces classes.

4. Corrigez les énumérations si nécessaire

Vous utilisez maintenant des frameworks de bonne foi, donc vos énumérations ont bougé en vol! Vous pourriez avoir une ligne de Swift qui convenait à l'en-tête de pont comme ceci:

progressHUD.mode = MBProgressHUDModeIndeterminate

Cela doit maintenant devenir ceci:

progressHUD.mode = MBProgressHUDMode.Indeterminate

Ce n'est pas un gros problème, mais la pile d'erreurs peut vous induire en erreur en pensant que vous avez un problème plus important que si vous utilisez beaucoup d'énumérations Objective-C.

( Source de cette réponse )

Pour information: je suppose (vous devrez tester par vous-même pour être sûr) que le use_frameworks! l'instruction dans votre Podfile est uniquement compatible avec les projets Xcode ciblant iOS> = 8.

Roi-sorcier
la source
73

Il semble que le processus soit similaire à celui décrit dans la section Mix and Match de Utilisation de Swift avec Cocoa et Objective-C .

  1. Créez votre Podfile et exécutez pod install.
  2. Créez un nouveau fichier d'en-tête Objective-C Example-Bridging-Header.het ajoutez-le au projet.
  3. Ajoutez une instruction d'importation à l'en -tête du pont .
  4. Défini Objective-C Bridging Headerpour votre objectif:

entrez la description de l'image ici

Vous pouvez maintenant utiliser votre bibliothèque, dans ce cas, MKUnits, dans votre fichier Swift:

let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)

Plus ici: Intégration de Cocoapods à un projet Swift

Michal K.
la source
3
Pour moi, l'instruction d'importation devait inclure le répertoire du projet, aka #import <Reachability/Reachability.h>plutôt que #import "Reachability.h".
Kyle Clegg
Juste une mise à jour. Swift PODs, c'est-à-dire: Swift Libs sera également bientôt supporté par CocoaPods. La prochaine version 0.36 apportera le support Swift complet dans CocoaPods. La plupart des fonctionnalités sont déjà complètes et vous pouvez tester les Swift Pods dès maintenant en utilisant les instructions de mon article de blog
Sachin Palewar
2
Cocoapods 0.36 et supérieur introduit le use_frameworks! instruction qui implique que l'en-tête de pontage n'est plus nécessaire pour importer des pods Objective-C dans Swift (veuillez voir ma réponse ci-dessous).
King-Wizard
5
En plus de ce qui précède, j'ai constaté que je devais ajouter "Pods / **" à mes "Chemins de recherche d'en-tête d'utilisateur" dans les paramètres de construction. J'ai également dû ajouter "#import <Foundation / Foundation.h>" au fichier de pont.
Swifty McSwifterton
1
Merci Swifty. J'ai essayé use_frameworks! mais cela n'a pas fonctionné pour moi. L'ajout de "Pods / **" au chemin de recherche de l'utilisateur a fonctionné.
user3246173
16

MISE À JOUR : La version stable de CocoaPods 0.36 a été publiée. Il prend officiellement en charge Swift.


CocoaPods prend désormais en charge Swift dans leur dernière version 0.36. C'est toujours en version bêta mais ça marche.

Vous devez d'abord installer la version bêta de CocoaPods (actuellement bêta 2) en l'exécutant dans votre terminal.

sudo gem install cocoapods --pre

C'est à peu près tout. Vous pouvez ajouter des bibliothèques Swift comme vous le feriez normalement.

Mais il y a un hic si vous voulez ajouter une bibliothèque écrite en Objective-C à un projet Swift via CocoaPods. Vous devez ajouter la ligne use_frameworks!à votre Podfile. Voici un exemple.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

J'ai également écrit un article de blog à ce sujet.

Isuru
la source
3
use_frameworks!est seulement pour iOS> = 8 non? Si tel est le cas, vous devriez l'écrire dans votre réponse.
confilez le
2

Si vous obtenez une erreur de fichier introuvable dans votre bridging-header.h, vous voudrez peut-être vous assurer que votre bibliothèque de pods est liée à votre schéma de construction.

La section de dépannage de CocoaPods décrit comment faire cela sous l'élément n ° 4 ici

Michelle
la source
1

Vous pouvez maintenant utiliser la version 0.36.0 de cocoapods en exécutant sudo gem install cocoapodsqui prend en charge l'intégration des frameworks swift. Lorsque vous utilisez un framework écrit par swift, vous devez l'utiliser explicitement dans Podfile:

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'
Allen
la source
0

Dans mon cas, j'ai constaté que je n'ajoutais pas de pods à la cible principale mais uniquement aux cibles Test et TestUI dans Podfile, comme expliqué ici .

Zeeawan
la source