Compiling a Swift module
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.
Use swiftc
to combine the cdylib from your Rust crate with the generated
Swift bindings:
swiftc
-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
-parse-as-library
-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
to module.modulemap
, the default value expected by Clang and XCFrameworks for exposing
the C FFI library to Swift.