fruitbasket provides two different (but related) services for helping you run your Rust binaries as native AppKit/Cocoa applications on Mac OS X:
-
App lifecycle and environment API - fruitbasket provides an API to initialize the AppKit application environment (NSApplication), to pump the main application loop and dispatch Apple events in a non-blocking way, to terminate the application, to access resources in the app bundle, and various other tasks frequently needed by Mac applications.
-
Self-bundling app 'trampoline' - fruitbasket provides a 'trampoline' to automatically bundle a standalone binary as a Mac application in a
.app
bundle at runtime. This allows access to features that require running from a bundle ( such as XPC services), self-installing into the Applications folder, registering your app with the system as a document type or URL handler, and various other features that are only available to bundled apps with unique identifiers. Self-bundling and relaunching itself (the "trampoline" behavior) allows your app to get the features of app bundles, but still be launched in the standard Rust ways (such ascargo run
).
The primary goal of fruitbasket is to make it reasonably easy to develop native Mac GUI applications with the standard Apple AppKit/Cocoa/Foundation frameworks in pure Rust by pushing all of the Apple and Objective-C runtime logic into dedicated libraries, isolating the logic of a Rust binary application from the unsafe platform code. As the ecosystem of Mac libraries for Rust grows, you should be able to mix-and-match the libraries your application needs, pump the event loop with fruitbasket, and never worry about Objective-C in your application.
See the examples/
dir for demo usage.