Examples for working with the Objective-C runtime from Rust, with a companion blog post about the rationale behind the setup.
Each example is annotated and can be run using cargo run
or using the
specialized instructions below, if any.
-
Creating Objective-C objects from Rust: Creates an object and sends it a message
-
Displaying a Cocoa Window: Creates and presents a Cocoa app with a single window, leveraging the
cocoa
crate -
Packaging a macOS app: Compiles and runs a Rust binary as a part of a macOS app. The Rust binary is launched as the primary process and handles presenting the user interface. Run the application by opening the Xcode project in the
app/
directory of the example and using the Run button. -
Wrapping Cocoa APIs: Creates a custom interface in Rust to accessing Cocoa classes (somewhat) safely, or at least without
unsafe
blocks -
Declaring a new Objective-C class from Rust: Creates and registers an Objective-C class with the runtime from Rust, as well as sending messages to an instance from both Rust and Objective-C
-
Include a Rust library in a Cocoa app: Create a static library in Rust, and bundles/links it with a mac app. The mac app target in Xcode depends on an external target which is the Rust library, and the C header for the Rust library is used to invoke Rust functions from Swift. Run the application by opening the Xcode project and using the Run button.