web-dev-qa-db-fra.com

Swift framework en fonction de la cabosse de cacao

En utilisant la dernière version des cabosses de cacao (0.36), je suis capable d'intégrer des cabosses de cacao écrites en Swift (par exemple Alamofire) dans mon Swift projet. Maintenant, j'ai introduit un cadre personnalisé de ma part dans le projet, qui veut aussi dépendre d'Alamofire.

Ce que j'ai fait pour y parvenir est de sélectionner ajouter le framework pods à mon framework en tant que dépendance:

Sélectionnez la cible pour mon propre cadre intégré Swift (module Swift) et dans l'onglet "Général" des "Cadres et bibliothèques liés", j'ai ajouté "Pods.framework" comme "Obligatoire".

Cependant, cela ne suffit pas pour compiler car les classes de mon propre framework Swift ne peuvent pas "importer Alamofire" car il n'est pas reconnu comme "framework disponible").

Ajouter le fichier Pods.debug.xcconfig et le fichier Pods.release.xcconfig aux configurations pour la cible de mon propre Swift framework, en d'autres termes changer les paramètres de construction pour faire toutes les modifications, cela les cabosses de cacao font aux paramètres de construction de ma cible d'application iOS, résout le problème.

Il se construit maintenant sans problème. Il s'exécute également sans problème dans le simulateur et mon propre framework Swift framework utilise avec succès les frameworks ajoutés par les cacaos.

TOUTEFOIS, si j'exécute la même chose sur un appareil, il se compile et s'installe sans problème, mais se bloque ensuite avec une erreur fatale au lancement:

dyld: Library not loaded: @rpath/Pods.framework/Pods
Referenced from: /private/var/mobile/Containers/Bundle/Application/32D2F1F8-679F-4A5F-8159-28F1C800D0C6/TestingFrameworks.app/Frameworks/mySwiftFramework.framework/mySwiftFramework
Reason: image not found

Apparemment, tous les paramètres du fichier xcconfig de cacao pods ne sont pas adaptés pour être ajoutés aux paramètres de construction de mon cadre personnalisé Swift.

Mais pourquoi ça marche dans le simulateur alors? Et plus important encore, quel est le paramètre de construction, que je dois corriger?

Pour moi, il semble que je doive changer ce paramètre de build:

PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods

à autre chose ...

27
alex da franca

J'ai identifié le problème. Il n'y avait tout simplement pas de pods.framework dans le dossier Frameworks/du framework intégré.

Cela est dû au fait que Pods-frameworks.sh ne copie pas réellement les choses dans le bon répertoire.

J'ai réussi à résoudre ce problème en:

  1. Suppression des cadres de pods d'intégration inutiles dans les phases de construction
  2. Ajout d'un fichier de copie avec une destination définie à Frameworks

enter image description here

C'est tout!

28
Pasta

Pour tous les débutants comme moi, cette partie de la question pourrait vous dérouter:

Ajouter le fichier Pods.debug.xcconfig et le fichier Pods.release.xcconfig aux configurations pour la cible de mon propre Swift framework, en d'autres termes changer les paramètres de construction pour faire toutes les modifications, cela les cabosses de cacao font aux paramètres de construction de ma cible d'application iOS, résout le problème.

Pour faire ça:

  1. Dans le projet Xcode de votre framework intégré personnalisé, cliquez sur File> New> File...> iOS> Other> Configuration Settings File.

  2. Faites deux fois ce qui précède. Vous pouvez nommer les fichiers Pods.release.xcconfig et Pods.debug.xcconfig, respectivement.

  3. Dans votre navigateur de projet, développez le Pods projet Xcode> Target Support Files> Pods. Vous verrez qu'il existe des noms similaires .xcconfig fichiers là-bas. Copiez simplement leur contenu dans le fichier du même nom à l'intérieur de votre framework personnalisé Swift.

  4. Cliquez sur votre Swift, sélectionnez la cible de projet (la bleue, pas la jaune) > Info> Configurations.

  5. Développez les configurations Debug et Release. Vous verrez probablement deux cibles sous votre projet Xcode - la cible principale du framework et la cible de test. Dans la colonne "Basé sur le fichier de configuration", définissez les fichiers de configuration sur la cible principale comme Pods.debug et le Pods.release fichiers que vous avez créés précédemment.

enter image description here

Et puis faites @ Pasta --- réponse .

METTRE À JOUR

Si vous utilisez votre Swift framework personnalisé intégré avec d'autres projets, cette configuration sera interrompue simplement parce que d'autres projets ont des .xcconfig paramètres (les pods .framework peut également être nommé différemment).

J'ai eu recours à l'ajout d'Alamofire comme sous-module git dans mon framework. REMARQUE: Aller au git submodule vous oblige à ajouter votre framework personnalisé à votre projet principal Embedded Frameworks, aussi bien que Alamofire.framework from inside votre framework personnalisé.

5
Matthew Quiros

Merci beaucoup d'avoir partagé @Pasta et @Matt Quiros et cela a résolu mon problème. Alors ok, je veux juste partager un peu plus sur mon cas et j'espère que ce sera utile.

Environnement de développement

Xcode version 9.1 (9B55)

Déployer la version iOS: 10.0

Problème:

Je travaille donc sur un projet nommé 'MyProject' où j'ai importé la bibliothèque 'Charts' en utilisant CocoaPod. En même temps, il existe également un framework privé "MyFramework" importé dans "MyProject". Ici, le problème est que je veux utiliser "Graphiques" dans "Myframework" et Xcode me dit toujours que la bibliothèque "Chart" n'est pas identifiée.

Solution:

J'ai fermé "MyProject" et ouvert "MyFrameWork" et "File" -> "New" -> "File ...". Créez deux fichiers de configuration et placez-les au même niveau de dossier que le fichier '* .xcodeproj'. Un fichier de configuration s'appelle "Pods-MyFramework.debug.xcconfig" et l'autre s'appelle "Pods-MyFramework.release.xcconfig". (Le nom du fichier peut être n'importe quoi mais je ne sais pas si l'emplacement des fichiers est important). Ce qui suit est la structure des fichiers sur le disque et dans mon Xcode.

enter image description here

enter image description here

Maintenant, fermez le projet 'MyFramework' et ouvrez le projet 'MyProject', dans mon Xcode la structure du fichier est montrée ci-dessous. Développez le dossier "Pods" sous le niveau "MyProject". Vous verrez quelques fichiers de configuration, copiez leur contenu dans les fichiers de configuration que vous venez de créer dans le projet 'MyFramework', debug.config -> debug.config, release.config -> release.config.

enter image description here

Puis dans un 'MyViewController' dans 'MyFramewwork', j'ai ajouté 'importation de graphiques' et je voulais juste essayer le simulateur et c'est ... réussi. Ouais!! Ensuite, j'ai ajouté du code dans le même VC pour créer un graphique à barres et exécuté avec succès sur un appareil réel et le graphique à barres affiché à l'écran. Ensuite, j'ai essayé la dernière étape que @Pasta a mentionné en ajoutant "Copier L'option des fichiers pour "Build Phases" de "MyProject", il a également fonctionné avec succès sur un appareil réel. J'ai supprimé à nouveau et cela fonctionne toujours.

1
infinity_coding7