Before you can import the generated Swift bindings as a module (say, to use them
from your application, or to try them out using
swift on the command-line) you
first need to compile them into a Swift module.
To do so, you'll need both the generated
.swift file and the corresponding
.modulemap file, which tells Swift how to expose the underlying C FFI layer.
swiftc to combine the cdylib from your Rust crate with the generated
-module-name example # Name for resulting Swift module
-emit-library -o libexample.dylib # File to link with if using Swift REPL
-emit-module -emit-module-path ./ # Output directory for resulting module
-L ./target/debug/ # Directory containing compiled Rust crate
-lexample # Name of compiled Rust crate cdylib
-Xcc -fmodule-map-file=exampleFFI.modulemap # The modulemap file from above
example.swift # The generated bindings file
This will produce an
example.swiftmodule file that can be loaded by
other Swift code or used from the Swift command-line REPL.
If you are creating an XCFramework with this code, make sure to rename the modulemap file
module.modulemap, the default value expected by Clang and XCFrameworks for exposing
the C FFI library to Swift.