web-dev-qa-db-fra.com

Comment utiliser une bibliothèque statique et un fichier de mappe de module avec Swift?

J'essaie d'inclure une bibliothèque statique tierce partie dans mon projet Swift. J'ai ces deux fichiers, parmi quelques autres.

GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a

J'ai ajouté le fichier .a à la section "Frameworks and Library" de la cible. J'ai ensuite créé un fichier module.map dans mon projet, comme ceci:

module GoogleConversionTracking {
    header "../../Libs/GoogleConversionTrackingSDK/ACTReporter.h"    
    export *
}

Et dans les fichiers Swift, je peux maintenant y faire référence:

import GoogleConversionTracking

Mais je reçois une erreur au moment du lien:

ld: bibliothèque introuvable pour -lGoogleConversionTracking
clang: error: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)
remarque: bibliothèque introuvable pour -lGoogleConversionTracking

Comment réparez-vous ceci? J'aimerais ne pas utiliser d'en-tête de pontage, mais plutôt utiliser ces fichiers de définition de module, si possible.

3
Rob N

La carte du module est mon synonyme de problème! Les en-têtes de pontage sont nuls, mais ils fonctionnent dans la plupart des cas. Quoi qu'il en soit, assurez-vous de:

  • Configurez Swift_INCLUDE_PATHS - une liste de chemins sur lesquels le compilateur Swift doit rechercher des modules Swift supplémentaires. Cela indique à Xcode où se trouvent vos cartes de module.
  • Configurez LIBRARY_SEARCH_PATHS - il s'agit d'une liste de chemins d'accès aux dossiers dans lesquels l'éditeur de liens doit rechercher les bibliothèques utilisées par le produit. Xcode doit toujours savoir où se trouvent les fichiers binaires de vos modules.

En outre, vous souhaiterez probablement utiliser l'en-tête de parapluie, et pas seulement l'en-tête, voir documentation . Je suggérerais également d'utiliser l'extension modulemap, sans savoir si module.map fait la différence, mais c'est ainsi que je me souviens de l'avoir vue et utilisée dans la plupart des projets.

Omar Abdelhafith a un blog blog méchant sur ce sujet et il est également utile de voir comment les autres le font quand ils traitent de ce genre de choses.

1
Ian Bytchek