Utilisez Cocoapods avec une extension d’application

J’essaie de construire une extension d’application photo dans Xcode 6 Beta-6 qui utilise les bibliothèques de cocoapods. L’en-tête de pont que Xcode crée pour l’extension de photo ne peut rien voir des cocoapods.

Par exemple: #import entraîne l’erreur "GPUImage/GPUImage.h" file not found .

J’ai essayé tous les chemins possibles pour l’importation (avec des parenthèses et des guillemets) et je n’ai presque pas réussi. La seule exception est que pour les pods simples comme SVProgressHUD , le terrible hack horrible suivant fonctionne: #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h" .

Mais pour GPUImage, il entre dans l’en-tête GPUImage.h et décide qu’il ne peut soudainement pas voir GPUImageContext.h malgré l’absence de problème lorsqu’il est importé avec l’en-tête de pontage pour le code swift normal qui ne fait pas partie de l’extension d’application.

Quelle est la différence entre la compilation d’extensions d’application qui empêche l’en-tête de pont de se comporter de manière saine?

Note: J’ai lu toutes les permutations possibles de ce tutoriel et celles-ci ne sont pas immédiatement applicables, juste au cas où quelqu’un pense avoir trouvé la réponse.

En outre, le problème décrit dans cette question SO peut être lié, mais j’ai quand même posé cette question au cas où mon problème serait spécifique aux extensions d’application.

La bonne façon de faire est de mettre à jour votre podfile pour n’append qu’une ligne:

 link_with 'yourApp', 'yourAppExtension' 

et une mise à jour de pod devrait résoudre le problème.

EDIT (2015/03/10)

Voir nouvelle réponse acceptée. Je l’ai essayé dans un nouveau projet et cela a fonctionné, bien que mes pods de test utilisaient tous les deux des SharedApplication qui ne sont pas autorisés dans les extensions. Le fait qu’ils aient montré ces erreurs signifie qu’ils sont correctement liés. Façon d’aller @LeChatNoir!


Succès.

La solution est la suivante: une fois que vous avez l’extension de votre application et son en-tête de pont dans un projet à l’aide de cocoapods et que vous souhaitez utiliser l’une de ces bibliothèques, essayer d’inclure le #import comme #import échouera avec file not found

Tout d’abord, assurez-vous que vous dites à l’extension de l’application (cliquez sur votre fichier de projet, puis sur la cible de l’extension) pour libPods.a lien avec libPods.a , tout comme votre cible d’application.

Ensuite, dans votre projet actuel (cliquez sur votre fichier de projet, puis à nouveau dans le fichier de projet dans la section “Projet” de la barre latérale interne) sous l’onglet Info, définissez la configuration de l’extension pour Debug, Release et Inhouse à utiliser. la configuration “Pods” du menu déroulant. Pod Install ne le fera pas pour vous, vous devrez donc le faire vous-même.

Enfin, assurez-vous que les cibles du projet Pods et les cibles de votre projet possèdent toutes les architectures nécessaires à la variable Architectures valides ou que vous obtenez l’erreur de symboles indéfinis toujours amusante.

Cela devrait fonctionner et vous permettre d’importer les modules de votre choix comme d’habitude.


EDIT (2014/10/14): En passant, puisque vous pouvez également inclure des fichiers Objective-C dans votre propre code de projet dans l’extension Swift, vous devez vous assurer que tous les fichiers .m vous avez .m dans l’en-tête de pont sont également compilé par la cible d’extension. Vous pouvez le faire à partir du menu des sources de compilation pour la cible ou dans le fichier .m lui-même en utilisant la section ” .m cible” de la barre latérale droite dans Xcode.

Les réponses ci-dessus fonctionneront, mais je voulais seulement quelques pods dans mon extension, alors j’ai fait ce qui suit sur mon Podfile:

 target '[Main App Target Name]' do pod ... pod ... pod ... end target '[Extension Target Name]' do pod ... end 

Et puis une pod install fera!

entrer la description de l'image ici

link_with, vous ne l’utiliserez plus.

Fichier Podfile invalide: [!] La spécification de link_with dans le Podfile n’est plus prise en charge, veuillez utiliser plutôt les blocs cibles.

Ci-dessous, la réponse parfaite, également testée.

 source 'https://github.com/CocoaPods/Specs.git' platform :ios, '9.0' use_frameworks! inhibit_all_warnings! target 'DemoTodayWidget' do pod 'Reachability', '~> 3.2' end target 'My Widget' do pod 'Reachability', '~> 3.2' end