web-dev-qa-db-fra.com

Obtention de l'erreur 'no such module' lors de l'importation d'une dépendance Swift Package Manager

J'exécute Xcode 11 Beta 4. J'utilise CocoaPods et je voulais utiliser une de mes dépendances avec Swift Package Manager en tant que bibliothèque statique plutôt qu'en tant que framework. Sur un nouveau projet créée avec Xcode 11, la dépendance peut être importée avec succès, mais pas sur mon espace de travail CocoaPods existant.

Je pense que c'est probablement lié, mais je reçois également cet avertissement de lien dans Xcode:

directory not found for option '-L/Users/username/Library/Developer/Xcode/DerivedData/App-axanznliwntexmdfdskitsxlfypz/Build/Products/Release-iphoneos

Je suis allé voir si le répertoire existe après l'émission de l'avertissement, et c'est le cas. Je n'ai pu trouver aucune différence significative entre le projet nouvellement créé et mon ancien, autre que l'existence de CocoaPods.

J'apprécierais tous les conseils.

11
Adar Hefer

Il s'est avéré que Swift Package Manager dépend implicitement des noms de configuration du projet. Je les avais dans live/qa au lieu de Release/Debug, et les changer en arrière a résolu le problème. Très étrange, mais je j'espère que cela vous évite des ennuis, cher lecteur.

17
Adar Hefer

Sur la base de la réponse @AlexandreMorgado, il semble préférable d'exécuter ce script dans les phases de construction avant de compiler les sources. Ensuite, cela fonctionne lors de l'archivage.

enter image description here

if [ -d "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" ] && [ "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" != "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/" ] 
then
  cp -f -R "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/"
fi
23
sliwinski.lukas

Après une semaine entière à lutter contre ce problème, j'ai développé une solution de contournement à l'aide de schémas et de pré-actions.

J'ai une configuration appelée "Beta", donc Xcode ne peut pas compiler les dépendances SPM. J'ai réalisé que Xcode compile les dépendances SPM en tant que modules Swift et ajoute les fichiers dans le dossier Build/Products/Release-iphoneos dans DeriverData.

J'ai donc créé un schéma dans Xcode et ajouté ce script d'exécution sur les pré-actions de construction:

enter image description here

cp -f -R "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/"

Ce script s'exécute avant le processus de génération, copiant les fichiers et modules générés par Xcode sur le dossier par défaut Release-iphoneos dans le dossier de configuration, Beta-iphoneos , dans mon cas.

Après avoir copié le contenu de Release-iphoneos dans votre dossier $ configuration $ -iphoneos, Xcode devrait correctement compiler, construire et exécuter votre projet.

8
alemorgado