Objective Sharpie Release History
3.4 (October 11, 2017)
- Support for Xcode 9: iOS 11, macOS 10.13, tvOS 11, and watchOS 4
- Issues with SIMD and tgmath should now be fixed
- Telemetry has been removed completely
3.3 (August 3, 2016)
- Support for Xcode 8 Beta 4, iOS 10, macOS 10.12, tvOS 10 and watchOS 3.
- Updated to latest Clang master build (2016-08-02)
- Persist telemetry submission options from
sharpie pod bind
tosharpie bind
.
3.2 (June 14, 2016)
- Support for Xcode 8 Beta 1, iOS 10, macOS 10.12, tvOS 10 and watchOS 3.
3.1 (May 31, 2016)
- Support for CocoaPods 1.0
- Improved CocoaPods binding reliability by first building a native
.framework
and then binding that - Copy CocoaPods
.framework
and binding definition into aBinding
directory to make integration with Xamarin.iOS and Xamarin.Mac binding projects easier
3.0 (October 5, 2015)
- Support for new Objective-C language features including lightweight generics and nullability, as introduced in Xcode 7
- Support for the latest iOS and Mac SDKs.
- Xcode project building and parsing support! You can now pass a full Xcode project to Objective Sharpie and it will do its best to figure out the right thing to do (e.g.
sharpie bind Project.xcodeproj -sdk ios
). - CocoaPods support! You can now configure, build, and bind CocoaPods directly from Objective Sharpie (e.g.
sharpie pod init ios AFNetworking && sharpie pod bind
). - When binding frameworks, Clang modules will be enabled if the framework supports them, resulting in the most correct parsing of a framework, since the structure of the framework is defined by its
module.modulemap
. - For Xcode projects that build a framework product, parse that product instead of intermediate product targets as non-framework targets in an Xcode project may still have ambiguities which cannot be automatically resolved.
2.1.6 (March 17, 2015)
- Fixed binary operator expression binding: the left-hand side of the expression was incorrectly swapped with the right-hand (e.g.
1 << 0
was incorrectly bound as0 << 1
). Thanks to Adam Kemp for noticing this! - Fixed an issue with
NSInteger
andNSUInteger
being bound asint
anduint
instead ofnint
andnuint
on i386;-DNS_BUILD_32_LIKE_64
is now passed to Clang to make parsingobjc/NSObjCRuntime.h
work as expected on i386. - The default architecture for Mac OS X SDKs (e.g.
-sdk macosx10.10
) is now x86_64 instead of i386, so-arch
can be omitted unless overriding the default is desired.
2.1.0 (March 15, 2015)
sizeof
C expressions whose argument type does not map to a C# primitive type will be evaluated in Clang and bound as an integer literal to avoid generating invalid C#.- Fix Objective-C syntax for properties whose type is a block (Objective-C code appears in comments above bound declarations).
- Bind decayed types as their original type (
int[]
decays toint*
during semantic analysis in Clang, but bind it as the original as-writtenint[]
instead).
Thanks very much to Dave Dunkin for reporting many of the bugs fixed in this point release!
2.0.0: March 9, 2015
Objective Sharpie 2.0 is a major release that features an improved Clang-based driver and parser and a new NRefactory-based binding engine. These improved components provide for much better bindings, particularly around type binding. Many other improvements have been made that are internal to Objective Sharpie which will yield many user-visible features in future releases.
Objective Sharpie 2.0 is based on Clang 3.6.1.
Type binding improvements
Objective-C blocks are now supported. This includes anonymous/inline blocks and blocks named via
typedef
. Anonymous blocks will be bound asSystem.Action
orSystem.Func
delegates, while named blocks will be bound as strongly nameddelegate
types.There is an improved naming heuristic for anonymous enums that are immediately preceded by a
typedef
resolving to a builtin integral type such aslong
orint
.C pointers are now bound as C#
unsafe
pointers instead ofSystem.IntPtr
. This results in more clarity in the binding for when you may wish to turn pointer parameters intoout
orref
parameters. It is not possible to always infer whether a parameter should beout
orref
, so the pointer is retained in the binding to allow for easier auditing.An exception to the above pointer binding is when a 2-rank pointer to an Objective-C object is encountered as a parameter. In these cases, convention is predominant and the parameter will be bound as
out
(e.g.NSError **error
→out NSError error
).
Verify attribute
You will often find that bindings produced by Objective Sharpie will now be annotated with the [Verify]
attribute. These attributes indicate that you should verify that Objective Sharpie did the correct thing by comparing the binding with the original C/Objective-C declaration (which will be provided in a comment above the bound declaration).
Verification is recommended for all bound declarations, but is most likely required for declarations annotated with the [Verify]
attribute. This is because in many situations, there is not enough metadata in the original native source code to infer how to best produce a binding. You may need to reference documentation or code comments inside the header files to make the best binding decision.
See the Verify Attributes documentation for more details.
Other notable improvements
using
statements are now generated based on types bound. For instance, if anNSURL
was bound, ausing Foundation;
statement will be generated as well.struct
andunion
declarations will now be bound, using the[FieldOffset]
trick for unions.Enum values with constant expression initializers will now be properly bound; the full expression is translated to C#.
Variadic methods and blocks are now bound.
Frameworks are now supported via the
-framework
option. See the documentation on Binding Native Frameworks for more details.Objective-C source code will be auto-detected now, which should eliminate the need to pass
-ObjC
or-xobjective-c
to Clang manually.Clang module usage (
@import
) is now auto-detected, which should eliminate the need to pass-fmodules
to Clang manually for libraries which use the new module support in Clang.The Xamarin Unified API is now the default binding target; use the
-classic
option to target the 32-bit only Classic API.
Notable bug fixes
- Fix
instancetype
binding when used in an Objective-C category - Fully name Objective-C categories
- Prefix Objective-C protocols with
I
(e.g.INSCopying
instead ofNSCopying
)
1.1.35: December 21, 2014
Minor bug fixes.
1.1.1: December 15, 2014
1.1.1 was the first major release after 1.5 years of internal use and development at Xamarin following the initial preview of Objective Sharpie in April 2013. This release is the first to be generally considered stable and usable for a wide variety of native libraries, featuring a new Clang backend.