Xamarin 发布支持 64 位的 iOS/Mac 统一 API

  • Matt McComb
  • 丛一

2015 年 1 月 29 日

话题:移动C#iOS语言 & 开发架构

Xamarin 上周公布了其 iOS SDK(Xamarin.iO) 8.6 版本,这是包含了该公司 iOS 和 Mac 统一 API(Unified API)的第一个非 Beta 版本。统一 API 替代了原有的 32 位 MonoTouch 和 MonoMac API,让跨平台的代码重用成为可能并且增加了 64 位支持。这一版本的发布比苹果要求的新应用提交必须兼容 64 位的最后期限(2 月 1 日)只早了两周。

Xamarin 的移动开发平台让使用 C# 开发可以跨平台的原生移动应用成为可能。该公司已经利用开源的 Mono 工具链创建了能够同时兼容 iOS 和安卓的运行时环境。在 iOS 平台上,预编译器(Ahead-of-Time Compiler)将 C# 代码编译成原生的 ARM 汇编代码。在安卓平台上,C# 代码则被编译成为一种中间代码,之后会在设备上完成即时(Just-in-Time)编译。这样,开发者就可以只编写一次应用,然后可以同时在 iOS,安卓和 Windows Phone 上执行。

新的统一 API 与经典的 MonoTouch API 并非差异很大,不过 Xamarin 做出了两个重大的改变以帮助跨平台的代码重用和 64 位兼容性。

  1. 被移除的命名空间 - iOS 和 Mac 特有的命名空间已经被移除并折叠成为一个命名空间。例如,Foundation 之前在 iOS 上位于 MonoTouch.Foundation 命名空间,在 Mac 上位于 MonoMac.Foundation 命名空间,现在在两个平台上都可以在 Foundation 命名空间中找到。
  2. 新的原生类型 - 在经典的 MonoTouch 和 MonoMac API 中,与架构无关的类型,如 NSInteger(在 32 位平台被解析成为 int 类型,在 64 位平台被解析成为 long 类型)总是被映射成为它们相对应的 32 位.NET 类型。为了修正这一限制,Xamarin 引入了三种原生类型——System.nint,System.nuint 和 System.nfloat,这三种类型会被隐式的映射到当前设备架构相应的支持类型。统一 API 支持用这些新的原生类型替代.NET 的原始类型。

为了使用统一 API 而想要更新应用的开发者可以手动完成这项工作,也可以利用 Xamarin 的迁移工具。作为其中一部分与 Xamarin Studio 5.7 一同分发的迁移工具可以自动更新所需要的项目设置和 API 引用。或者开发者也可以选择根据更新已有 iOS 应用指南中的步骤手动迁移应用。在上周早些时候的一个网络研讨会上,针对两种方法 Xamarin 都提供了额外的信息,在 Xamarin 的博客上可以找到这次研讨会的录音

InfoQ 在 2014 年 12 月曾经报道过,Xamarin 已经分发了若干个统一 API 的 Beta 版本给第三方库和组件的开发者,鼓励他们更新项目。不过,并不是所有的第三方组件都将会被更新。为了应对这一问题,开发者也许不得不将这些组件的代码作为其项目构建的一部分迁移并编译。

使用新的统一 API,开发者将首次实现 64 位兼容的 iOS 和 Mac 应用的编译。这对于正在进行新的 iOS 应用开发的开发者来说相当有意义,根据苹果在 10 月份的公告,在 2015 年 2 月 1 日,所有新的 iOS 应用必须要做到 64 位兼容。对于已经发布到应用商店的应用开发者来说,时间会更加宽松一些,只要在 2015 年 6 月 1 日之前完成更新兼容 64 位即可。

查看英文原文:Xamarin Releases Unified iOS/Mac API with 64-Bit Support

移动C#iOS语言 & 开发架构