$ show madsmtm/objc2
objc2 is a Rust library that provides safe, idiomatic bindings to Apple's Objective-C runtime and a vast portion of its system frameworks (Foundation, AppKit, Metal, CoreFoundation, and hundreds more). The core crate wraps the Objective-C runtime with type-safe message sending, class definition, reference counting via Retained<T>, and protocol support. Around it, the workspace includes supporting crates for Objective-C blocks (block2), Grand Central Dispatch (dispatch2), a header translator that auto-generates Rust code from Apple's SDK headers, and a documentation parser (apple-doc). The architecture is a large Rust workspace (hundreds of crates) with a clear separation: a lightweight runtime layer (objc2-encode, objc2-exception-helper, objc2-proc-macros), the main objc2 crate with macros and runtime types, and generated framework crates that follow a uniform pattern (extern_class!, extern_methods!, etc.). The project places heavy emphasis on safety and correctness, employing compile-time encoding verification, fuzz testing, assembly-level baseline tests for optimized message sending, and UI tests to catch type errors at compile time. Despite its complexity, the code exhibits strong craftsmanship: the macro infrastructure is well-organized, memory management is carefully designed (two-phase initialization, drop flags, Writeback helpers), and performance-critical paths use inline assembly for retain/autorelease optimization. The project is actively maintained with a modern toolchain, CI against multiple runtimes (Apple, GNUstep, ObjFW), and thorough documentation. It stands as the most comprehensive Rust-to-Objective-C bridge available, suitable for building native macOS/iOS applications entirely in Rust.
The LLM identified 2 files worth highlighting for reuse:
Provides a safe and high-performance wrapper around dispatch_once for one-time initialization. Uses atomic operations and libdispatch primitives, with careful handling of error cases (e.g., panics during init). The pattern is self-contained and could be adapted for other platforms that have a POSIX-like once mechanism, demonstrating non-obvious FFI design for initialization.
Implements const_fn-based construction of Objective-C encoding strings using generic arrays and const assertions. The str_array() function generates a null-terminated C-string at compile time with proper length and layout, avoiding runtime allocation. This pattern is reusable for any compile-time string concatenation problem and showcases advanced use of Rust's const generics and const evaluation.