Using Rust in Cocoa apps
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.
Examples
-
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 thecocoa
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 theapp/
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 withoutunsafe
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.