Objective Sharpie 发布历史记录

3.4 (2017 年 10 月 11 日)

下载 v3.4.0

  • 支持 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 bindsharpie 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绑定和nintNSUIntegernuintuint绑定的问题;-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.ActionSystem.Func 委托,而命名块将绑定为强命名 delegate 类型。

  • 对匿名枚举的命名启发式进行了改进,其前面 typedef 是解析为内置整型类型,例如 longint

  • C 指针现在作为 C# unsafe 指针进行绑定,而不是 System.IntPtr。 这可以更清楚地说明绑定何时可能希望将指针参数转换为 outref 参数。 无法始终推断参数是否应 out 为, ref因此指针会保留在绑定中,以便更轻松地进行审核。

  • 上述指针绑定的例外情况是当将对象 2 级指针 Objective-C 作为参数遇到时。 在这些情况下,约定占主导地位,参数将绑定为 out (例如 NSError **errorout 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 例如 INSCopyingNSCopying而不是)

1.1.35:2014 年 12 月 21 日

小 bug 修复。

1.1.1:2014 年 12 月 15 日

1.1.1 是在 Xamarin 内部使用和开发 1.5 年后的第一个主要版本,也是 2013 年 4 月 Objective Sharpie 初始预览版之后的第一个主要版本。 此版本首次被视为稳定且适用于各种本机库,其中包含新的 Clang 后端。