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 ?
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:
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.
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.
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'
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
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'
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 .
Réponses:
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 MBProgressHUD
et / ouimport Alamofire
en 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.
la source
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 .
pod install
.Example-Bridging-Header.h
et ajoutez-le au projet.Objective-C Bridging Header
pour votre objectif: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
la source
#import <Reachability/Reachability.h>
plutôt que#import "Reachability.h"
.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.
la source
use_frameworks!
est seulement pour iOS> = 8 non? Si tel est le cas, vous devriez l'écrire dans votre réponse.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
la source
Vous pouvez maintenant utiliser la version 0.36.0 de cocoapods en exécutant
sudo gem install cocoapods
qui 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'
la source
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 .
la source