Expand description
§Bindings to Apple’s frameworks
icrate
is an autogenerated interface to Apple’s Objective-C frameworks
like AppKit, Foundation, Metal, WebKit, and so on.
The bindings currently contain very little documentation, you should view Apple’s developer documentation for detailed information about each API. (There are plans for importing that documentation here).
§Use of Deref
icrate
uses the Deref
trait in a bit special way: All objects deref
to their superclasses. For example, NSMutableArray
derefs to NSArray
,
which in turn derefs to NSObject
.
Note that this is explicitly recommended against in the documentation and the Rust Design patterns book (see those links for details).
Due to Objective-C objects only ever being accessible behind pointers in the first place, the problems stated there are less severe, and having the implementation just means that everything is much nicer when you actually want to use the objects!
All objects also implement AsRef
and AsMut
to their superclass,
and can be used in Id::into_super
, so if you favour explicit
conversion, that is a possibility too.
§Rust vs. Objective-C types
A quick overview of some types you will encounter often in Objective-C, and their approximate Rust equivalent.
Objective-C | (approximately) equivalent Rust |
---|---|
NSData* | Arc<[u8]> |
NSMutableData* | Vec<u8> |
NSString* | Arc<str> |
NSMutableString* | String |
NSValue* | Arc<dyn Any> |
NSNumber* | Arc<enum { I8(i8), U8(u8), I16(i16), U16(u16), I32(i32), U32(u32), I64(i64), U64(u64), F32(f32), F64(f64), CLong(ffi::c_long), CULong(ffi::c_ulong) }> |
NSError* | Arc<dyn Error + Send + Sync> |
NSException* | Arc<dyn Error + Send + Sync> |
NSRange | ops::Range<usize> |
NSComparisonResult | cmp::Ordering |
NSArray<T>* | Arc<[T]> |
NSMutableArray<T>* | Vec<T> |
NSDictionary<K, V>* | Arc<HashMap<K, V>> |
NSMutableDictionary<K, V>* | HashMap<K, V> |
NSEnumerator<T>* | Box<dyn Iterator<T>> |
NSCopying* | Box<dyn Clone> |
§Example
$ cargo add icrate --features=Foundation,Foundation_all
use icrate::Foundation::{ns_string, NSCopying, NSArray};
let string = ns_string!("world");
println!("hello {string}");
let array = NSArray::from_id_slice(&[string.copy()]);
println!("{array:?}");
Re-exports§
Modules§
- Bindings to the
Accessibility
framework - Bindings to the
AdServices
framework - Bindings to the
AdSupport
framework - Bindings to the
AppKit
framework - Bindings to the
AuthenticationServices
framework - Bindings to the
AutomaticAssessmentConfiguration
framework - Bindings to the
Automator
framework - Bindings to the
BackgroundAssets
framework - Bindings to the
BusinessChat
framework - Bindings to the
CallKit
framework - Bindings to the
ClassKit
framework - Bindings to the
CloudKit
framework - Bindings to the
Contacts
framework - Bindings to the
CoreData
framework - Bindings to the
CoreLocation
framework - Bindings to the
CoreWLAN
framework - Bindings to the
DataDetection
framework - Bindings to the
DeviceCheck
framework - Bindings to the
EventKit
framework - Bindings to the
ExceptionHandling
framework - Bindings to the
ExtensionKit
framework - Bindings to the
ExternalAccessory
framework - Bindings to the
FileProvider
framework - Bindings to the
FileProviderUI
framework - Bindings to the
Foundation
framework - Bindings to the
GameController
framework - Bindings to the
GameKit
framework - Bindings to the
HealthKit
framework - Bindings to the
IdentityLookup
framework - Bindings to the
InputMethodKit
framework - Bindings to the
LinkPresentation
framework - Bindings to the
LocalAuthentication
framework - Bindings to the
LocalAuthenticationEmbeddedUI
framework - Bindings to the
MailKit
framework - Bindings to the
MapKit
framework - Bindings to the
MediaPlayer
framework - Bindings to the
Metal
framework - Bindings to the
MetalFX
framework - Bindings to the
MetalKit
framework - Bindings to the
MetricKit
framework - Bindings to the
OSAKit
framework - Bindings to the
SoundAnalysis
framework - Bindings to the
Speech
framework - Bindings to the
StoreKit
framework - Bindings to the
UniformTypeIdentifiers
framework - Bindings to the
UserNotifications
framework - Bindings to the
WebKit
framework
Macros§
- Deprecated alias of
Foundation::ns_string
.