webentwicklung-frage-antwort-db.com.de

Wie verwende ich eine statische Bibliothek und eine Modulzuordnungsdatei mit Swift?

Ich versuche, eine statische Bibliothek eines Drittanbieters in mein Swift-Projekt aufzunehmen. Ich habe diese beiden Dateien unter anderem.

GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a

Ich habe die Datei .a zum Abschnitt "Verknüpfte Frameworks und Bibliotheken" des Ziels hinzugefügt. Ich habe dann eine module.map-Datei in meinem Projekt erstellt:

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

Und in Swift-Dateien kann ich jetzt darauf verweisen:

import GoogleConversionTracking

Aber ich bekomme beim Linken einen Fehler:

ld: Bibliothek für -lGoogleConversionTracking nicht gefunden
clang: error: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (Aufruf mit -v)
Anmerkung: Bibliothek für -lGoogleConversionTracking nicht gefunden

Wie können Sie das beheben? Ich möchte keinen Überbrückungsheader verwenden, sondern, wenn möglich, diese Moduldefinitionsdateien verwenden.

3
Rob N

Modulkarte ist mein Synonym für Ärger! Überbrückende Header saugen, aber sie funktionieren in den meisten Fällen. Wie auch immer, stellen Sie sicher, dass Sie:

  • Configure Swift_INCLUDE_PATHS - Eine Liste von Pfaden, die vom Swift-Compiler nach zusätzlichen Swift-Modulen durchsucht werden sollen. Dies teilt Xcode mit, wo sich Ihre Modulkarten befinden.
  • Configure LIBRARY_SEARCH_PATHS - Dies ist eine Liste von Pfaden zu Ordnern, die vom Linker nach Bibliotheken durchsucht werden sollen, die vom Produkt verwendet werden. Xcode muss immer noch wissen, wo sich die Binärdateien für Ihre Module befinden.

Außerdem möchten Sie wahrscheinlich die Kopfzeile des Umbrells verwenden, nicht nur die Kopfzeile, siehe documentation . Ich würde auch vorschlagen, die Erweiterung modulemap zu verwenden, nicht sicher, ob module.map einen Unterschied macht, aber so erinnere ich mich, dass ich es in den meisten Projekten gesehen und verwendet habe.

Omar Abdelhafith hat in dieser Angelegenheit einen bösen blog post und es hilft auch zu sehen wie andere das machen wenn man mit solchen Dingen umgeht.

1
Ian Bytchek