web-dev-qa-db-fra.com

Comment utiliser les Cocoapods dans un framework embarqué?

J'utilise un cadre intégré pour mes vues personnalisées dans un nouveau projet pour tirer parti des nouveaux éléments @IBDesignable dans Xcode 6 et j'aimerais animer ces vues avec Facebook's Pop. J'ai ajouté Pop au projet à l'aide de Cocoapods mais le framework intégré n'a pas accès à ces fichiers ('POP/pop.h' file not found).

J'ai essayé de copier les phases de construction liées aux Cocoapods de la cible de l'application vers la cible du cadre personnalisé, mais elles ne fonctionnent pas telles quelles. Ce que fait fonctionne, c'est de copier directement le dossier Pop dans le framework intégré, mais ensuite Xcode me dit que je dois changer tous les crochets angulaires <POP/pop.h> entre guillemets "POP/pop.h". Je suppose qu'il y a un meilleur moyen et je le cache.

36
richrad

En supposant que dans votre Podfile vous utilisez le link_with 'MyCustomFramework', où "MyCustomFramework" est le nom de votre infrastructure intégrée, et ont exécuté pod install. Sélectionnez votre fichier de projet (bleu en haut à droite) et allez dans "Build Settings". Ensuite, recherchez 'Autoriser les inclusions non modulaires dans les modules de framework' et définissez-le sur OUI , pour le fichier Project (bleu ) et la cible du cadre personnalisé (ex. MyCustomFramework - icône orange "cas de boîte à lunch").

Setting build settings for non-modular includes

Ensuite, vous pouvez inclure des trucs de cacao dans votre fichier principal MyCustomFramework.h. Including CocoaPods in CustomFramework

Ensuite, importez simplement '@import MyCustomFramework;' dans votre cible d'application, et vous aurez le reste des CocoaPods à votre disposition. (Ex. Vous montrant l'accès à "chacun" à partir d'ObjectiveSugar). Importing CustomFramework into AppDelegate

La question de savoir si vous devez le faire ou non est un problème distinct, mais cela permet à votre cadre personnalisé d'inclure les bibliothèques CocoaPods en lui-même, ce qui permet ensuite à la cible d'application d'inclure simplement votre cadre personnalisé et d'obtenir également tous les CocoaPods.

Désolé pour les multiples images, mais j'aime être visuel.

51
Anthony Persaud

Je suppose que vous modifiez le framework pour utiliser Pop. Dans ce cas, vous devrez également ajouter le chemin des en-têtes Pop aux chemins d'en-tête de recherche du Framework Build Settings.

Mais si vous modifiez le framework, vous pouvez également créer un podspec pour lui et laisser CocoaPods gérer tout (et envoyer une demande d'extraction au créateur?).


Quant à la question des primes.

Un framework ne doit jamais intégrer d'autres bibliothèques. Si, par exemple, vous souhaitez utiliser AFNetworking dans votre bibliothèque:

  • Indiquez que AFNetworking est requis dans vos propres instructions d'installation du framework.
  • Si vous distribuez des binaires, vous venez de les construire localement par rapport aux en-têtes AFNetworking. Les utilisateurs devront fournir leur propre AFNetworking lors de la liaison de leur application.
  • Si vous distribuez du code source avec votre framework (si les utilisateurs doivent le construire eux-mêmes), demandez dans vos étapes d'installation de définir le chemin des en-têtes AFNetworking dans vos frameworks Build Settings Header Search Paths et de le prédéfinir sur des chemins communs tels que POD_ROOT, etc.

Ensuite, cela fonctionne, mais vous avez des instructions d'installation complexes, les utilisateurs doivent ajouter manuellement des ressources, le cas échéant, il est difficile de contrôler la version AFNetworking ajoutée par les utilisateurs et la plupart ne mettront jamais à niveau votre framework car cela pourrait casser leur configuration. Toutes les bonnes raisons de supporter CocoaPods en créant un podspec (vous pouvez continuer à maintenir le projet de bibliothèque framework/statique si vous le voulez vraiment).

3
Rivera