Objective Sharpie 发布历史记录
3.4 (2017 年 10 月 11 日)
- 支持 Xcode 9:iOS 11、macOS 10.13、tvOS 11 和 watchOS 4
- 现在应修复 SIMD 和 tgmath 的问题
- 遥测数据已完全删除
3.3 (2016 年 8 月 3 日)
- 支持 Xcode 8 Beta 4、iOS 10、macOS 10.12、tvOS 10 和 watchOS 3。
- 已更新到最新的 Clang 主版本(2016-08-02)
- 将遥测提交选项 保存到
sharpie pod bind
sharpie bind
.
3.2 (2016 年 6 月 14 日)
- 支持 Xcode 8 Beta 1、iOS 10、macOS 10.12、tvOS 10 和 watchOS 3。
3.1 (2016 年 5 月 31 日)
- 支持 CocoaPods 1.0
- 通过先生成本机
.framework
并绑定来改进 CocoaPods 绑定可靠性 - 将 CocoaPods
.framework
和绑定定义复制到Binding
目录中,以便更轻松地与 Xamarin.iOS 和 Xamarin.Mac 绑定项目集成
3.0 (2015 年 10 月 5 日)
- 支持新的 Objective-C 语言功能,包括轻型泛型和可为 null 性,如 Xcode 7 中引入
- 支持最新的 iOS 和 Mac SDK。
- Xcode 项目生成和分析支持! 现在可以将完整的 Xcode 项目传递给 Objective Sharpie,它将尽最大努力找出正确的操作(例如
sharpie bind Project.xcodeproj -sdk ios
)。 - CocoaPods 支持! 现在可以直接从 Objective Sharpie 配置、生成和绑定 CocoaPods(例如
sharpie pod init ios AFNetworking && sharpie pod bind
)。 - 绑定框架时,如果框架支持 Clang 模块,则启用 Clang 模块,从而生成框架的最正确的分析,因为框架的结构由框架
module.modulemap
定义。 - 对于构建框架产品的 Xcode 项目,将该产品而不是中间产品目标分析为 Xcode 项目中的非框架目标,可能仍存在无法自动解析的歧义。
2.1.6 (2015 年 3 月 17 日)
- 修复了二进制运算符表达式绑定:表达式的左侧未正确交换到右侧(例如
1 << 0
未正确绑定)。0 << 1
感谢亚当·坎普注意到这一点! - 修复了
NSInteger
与 i386 一起int
绑定和nint
NSUInteger
nuint
uint
绑定的问题;-DNS_BUILD_32_LIKE_64
现在传递给 Clang,使分析objc/NSObjCRuntime.h
在 i386 上按预期工作。 - Mac OS X SDK(例如
-sdk macosx10.10
)的默认体系结构现在x86_64而不是 i386,因此-arch
可以省略,除非需要重写默认值。
2.1.0 (2015 年 3 月 15 日)
sizeof
其参数类型不映射到 C# 基元类型的 C 表达式将在 Clang 中计算并绑定为整数文本,以避免生成无效 C# 。- 修复 Objective-C 类型为块的属性的语法(Objective-C 代码出现在绑定声明上方的注释中)。
- 将衰减类型绑定为其原始类型(
int[]
在 Clang 中的语义分析期间衰减int*
,但将其绑定为原始原写类型int[]
)。
非常感谢戴夫·邓金报告此点版本中修复的许多 bug!
2.0.0:2015 年 3 月 9 日
Objective Sharpie 2.0 是一个主要版本,它具有改进的基于 Clang 的驱动程序和分析器和基于 NRefactory 的新绑定引擎。 这些改进的组件提供了更好的绑定,尤其是在类型绑定周围。 在 Objective Sharpie 内部进行了许多其他改进,这将在未来版本中产生许多用户可见的功能。
Objective Sharpie 2.0 基于 Clang 3.6.1。
类型绑定改进
Objective-C 现在支持块。 这包括匿名/内联块和通过命名的
typedef
块。 匿名块将绑定为System.Action
或System.Func
委托,而命名块将绑定为强命名delegate
类型。对匿名枚举的命名启发式进行了改进,其前面
typedef
是解析为内置整型类型,例如long
或int
。C 指针现在作为 C#
unsafe
指针进行绑定,而不是System.IntPtr
。 这可以更清楚地说明绑定何时可能希望将指针参数转换为out
或ref
参数。 无法始终推断参数是否应out
为,ref
因此指针会保留在绑定中,以便更轻松地进行审核。上述指针绑定的例外情况是当将对象 2 级指针 Objective-C 作为参数遇到时。 在这些情况下,约定占主导地位,参数将绑定为
out
(例如NSError **error
→out NSError error
)。
验证属性
你通常会发现 Objective Sharpie 生成的绑定现在将用 [Verify]
该属性进行批注。 这些属性指示应通过将绑定与原始 C/Objective-C 声明进行比较(将在绑定声明上方的注释中提供)来验证 Objective Sharpie 是否执行了正确的操作。
建议对所有绑定声明进行验证,但对于使用[Verify]
特性注释的声明,最可能需要验证。 这是因为在许多情况下,原始本机源代码中没有足够的元数据来推断如何最好地生成绑定。 可能需要在头文件中引用文档或代码注释才能做出最佳绑定决策。
有关更多详细信息, 请参阅“验证属性” 文档。
其他显著改进
using
语句现在基于绑定的类型生成。 例如,如果NSURL
绑定了语句,using Foundation;
也会生成语句。struct
现在将绑定声明union
,使用联合的[FieldOffset]
技巧。具有常量表达式初始值设定项的枚举值现在将被正确绑定;完整表达式转换为 C# 。
Variadic 方法和块现已绑定。
现在可通过该选项支持
-framework
框架。 有关绑定 Native Framework 的详细信息,请参阅有关绑定本机框架的文档。Objective-C 源代码现在将自动检测,这应该无需手动传递到
-ObjC
Clang 或-xobjective-c
Clang。Clang 模块使用情况(
@import
)现已自动检测,这应该无需手动传递给-fmodules
Clang,以便使用 Clang 中的新模块支持的库。Xamarin Unified API 现在是默认绑定目标;使用此选项
-classic
以仅 32 位经典 API 为目标。
重要的 bug 修复
- 修复
instancetype
在类别中使用的 Objective-C 绑定 - 完全名称 Objective-C 类别
- 前缀 Objective-C 协议(
I
例如INSCopying
,NSCopying
而不是)
1.1.35:2014 年 12 月 21 日
小 bug 修复。
1.1.1:2014 年 12 月 15 日
1.1.1 是在 Xamarin 内部使用和开发 1.5 年后的第一个主要版本,也是 2013 年 4 月 Objective Sharpie 初始预览版之后的第一个主要版本。 此版本首次被视为稳定且适用于各种本机库,其中包含新的 Clang 后端。