bindgen does not (yet) have full Objective-C support, but it can generate bindings for many of the Apple frameworks without too much blocklisting.
In order to generate bindings, you will need -x objective-c as a clang arg. If you'd like to use block you will need -fblocks as a clang arg as well.
Depending on your setup, you may need --generate-block to generate the block function aliases and --block-extern-crate to insert a extern crate block at the beginning of the generated bindings. The same logic applies to the --objc-extern-crate parameter.
The Objective-C classes will be represented as a struct Foo(id) and a trait IFoo where Foo is the Objective-C class and id is an alias for *mut objc::runtime::Object (the pointer to the Objective-C instance). The trait IFoo is needed to allow for the generated inheritance.
Functions that use or return Objective-C pointers of instance Foo will return Foo. The reason this works is because Foo represented as transparent. This will be helpful for many Objective-C frameworks. However, there are some cases where functions return instancetype which is a type alias for id so an occasional foo.0 may be required. An example of this would in the UIKit framework should you want to add a UILabel to a UIStackView you will need to convert the UILabel to a UIView via UIView(label.0).
Each class (struct) has an alloc and a dealloc to match that of some of the alloc methods found in NSObject.
In order to initialize a class Foo, you will have to do something like let foo = Foo(Foo::alloc().initWithStuff()).
To blocklist an Objective-C method, you should add the bindgen generated method path (e.g. IFoo::method or IFoo::class_method) as a blocklist item.
I which stands for interface.P which stands for Protocol.struct Foo(id) where Foo is the class name and id is a pointer to the Objective-C Object.aarch64-apple-ios, you’ll need to have the clang arg --target=arm64-apple-ios as mentioned here.time.h as has a variable called timezone that conflicts with some of the things in NSCalendar.h.Self for you given class, it returns a mut * objc::runtime::Objc which is aliased as id. This is because Objective-C‘s inheritance doesn’t perfectly match that of Rust's.bindgen against, you may end up including all of Core Foundation and any other frameworks. This will result in a very long compile time.Options.