Hallo zusammen. Dies ist hiroakit des iOS / tvOS-App-Entwicklers.
In diesem Artikel werde ich Ihnen zeigen, wie Sie eine in C oder C ++ geschriebene Bibliothek mit Swift verwenden.
Die Entwicklungsumgebung, die zum Zeitpunkt des Schreibens dieses Artikels verwendet wurde, ist wie folgt.
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.12.6
BuildVersion: 16G1114
$ xcrun -find xcode build
/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
$ xcodebuild -version
Xcode 9.2
Build version 9C40b
$ xcrun -find clang
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
$ clang --version
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Möglicherweise möchten Sie die C-Bibliothek (z. B. OpenJPEG) als Swift-Framework verwenden.
In diesem Artikel möchte ich zur Erläuterung mit der folgenden C-Bibliothek fortfahren.
- libExample.a
- include/Example.h
- include/ExampleEncoder.h
Angenommen, eine in Swift geschriebene App möchte diese Bibliothek in ein Framework importieren und verwenden.
import UIKit
import Example
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
ExampleEncoder.run(urlString: "https://www.example.com/", profile: "path/to/profile")
}
}
In diesem Fall müssen Sie beim Umschließen der C-Bibliothek mit Swift in ein Framework eine ".modulemap" -Datei wie unten gezeigt vorbereiten.
framework module Example {
umbrella header "Example.h"
export *
module * { export * }
header "ExampleEncoder.h"
}
Nachdem Sie dieses Example.framework auf der App-Seite hinzugefügt haben, müssen Sie den Pfad dieses Frameworks zu den folgenden Einstellungselementen des Xcode-Projekts festlegen.
.modulemap
-Datei?Die .modulemap
-Datei wird benötigt, um die von der C-Bibliothek verwendete Header-Datei über Clang Modules an Swift zu übermitteln.
Das Folgende zeigt das Format der Datei ".modulemap". Beschreiben Sie die Verwendung von Modulzuordnungssprache.
[explicitopt] [frameworkopt] module module-id attributesopt {
/* module-member */
}
Beachten Sie, dass die Modulzuordnungssprache nicht garantiert zwischen Hauptversionen von Clang funktioniert. Wenn sich die in Xcode enthaltene Hauptversion von Clang ändert, muss daher überprüft werden, ob das hier beschriebene Verhalten dem vom Entwickler beabsichtigten entspricht.
The module map language is not currently guaranteed to be stable between major revisions of Clang.
Ich habe die Verwendung der C-Bibliothek mit Swift durch Vorbereiten einer Modulzuordnung vorgestellt.
Die Modulkarte funktioniert möglicherweise nicht auf einmal. Seien Sie also vorbereitet und bereiten Sie sie als Set vor.
Ein Beispiel für eine Modulzuordnung ist im Referenzmaterial beschrieben.
Recommended Posts