2017-02-22 2 views
2

Ich habe eine statische Bibliothek von einem Drittanbieter-SDK - es ist das FIT SDK, das codiert und entschlüsselt "Flexible & Interoperable Data Transfer Protocol", für verschiedene Sportarten und Fitness verwendet Ausrüstung. Es ist ein Binärformat, das im SDK gut beschrieben ist und das auch eine Reihe von CPP-, C-Sharp- und Objective-C-Beispielen enthält - sowie eine statische Bibliothek, die aus einer CPP-Quelle besteht.Building Swift, Objective-C und eine statische C++ - Bibliothek Together

Von dem, was alle zu sagen scheinen, sollte ich in der Lage sein, meine Swift-App mit der statischen Bibliothek, einschließlich der erforderlichen Bridging-Header zu bauen.

Ich machte einen Screenflow (https://vimeo.com/205082135) was zeigt, was passiert, weshalb ich hier bin.

Ich kann Xcode 8 (Beta 3) erhalten, um ein neues, frisches Projekt zu erstellen, das die Bibliothek und sogar irgendeinen Objective-C-Code enthält. Sobald ich den Überbrückungs-Header, selbst mit einem rudimentären Include, XCode-Krater mit einem Linker-Fehler hinzufüge, beschwere ich mich, dass er keine Klasse aus der Standard-C++ - Bibliothek wie oder finden kann. Riecht wie ein Konfigurationsmanagementproblem mit Xcode, das ich einfach nicht aussortieren kann.

Mein Beispielprojekt mit der Bibliothek ist hier: https://github.com/bleeckerj/Xcode-FIT-TEST

jemand so etwas schon einmal gesehen hat?

+1

Ich bin mir nicht sicher, ob dies Ihr Problem vollständig lösen wird, aber Swift kann nicht direkt mit C++ zusammenarbeiten. Sie müssen die C++ - Bibliothek mit einer Objective-C-API umschließen und diese Objective-C-API nur für Swift verfügbar machen. –

+0

Daves Kommentar ist korrekt. Sie könnten die C (nicht C++) API direkt von Swift oder eine Obj-C API verwenden, wenn es eine gibt (obwohl basierend auf der Tatsache, dass Ihr Projekt .mm Dateien hat, ich vermute, dass es keine bereits existierende gibt Verpackung). Andernfalls müssen Sie es selbst verpacken. – jtbandes

+0

Siehe auch: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-ID17 – jtbandes

Antwort

0

Also, durch etwas Hilfe und viel Zeit und Versuche gelang es mir, das Problem zu lösen und meine eigene Frage zu beantworten.

Effektiv benötigt man einen Objective-C-Wrapper um die C++ - (oder Objective-C++ -) Klasse, die den Code enthält, den man bereitstellen und von Swift aufrufen möchte. Dann gibt es den Überbrückungs-Header, der nur diese Objective-C-Klasse verfügbar macht. Diese spezielle Überbrückungs-Header ist das klingt einfach, und jetzt ist es in der Tat ist einfach - aber es war ein Rätsel für mich. Es ist eine lange Geschichte, also erkläre ich es als Teil eines Beispiel-Repository https://github.com/bleeckerj/fit-sdk-with-swift, das vom FIT SDK abgeleitet ist und die Frage mit einem Beispiel beantwortet.

Ich hoffe, dass dies jedem helfen kann, der auf dieses Problem stößt.

Verwandte Themen