Apple 平台(iOS 和 Mac)

代码共享

对于没有用户界面元素的代码元素,在 iOS 和 Mac 之间共享代码的最佳方式仍然是使用可移植类库

对于需要进行一些用户界面工作但又想共享的代码,应使用共享项目,它支持将要共享的代码放在一个项目中,并在引用时同时针对 Mac 和 iOS 进行编译。

Unified API

适用于 iOS 和 Mac 项目的 Unified API 使用相同的框架命名空间,因此相同的代码文件可在两个平台上使用,实现无缝代码共享。 它还支持 32 位和 64 位生成。 自 2015 年初以来,Unified API 一直是模板默认设置,建议用于所有新项目 - 只有 Unified API 项目可以提交到应用商店

Classic API

注意

经典配置文件弃用:随着 Xamarin.iOS 中新平台的添加,我们开始逐步弃用经典配置文件 (monotouch.dll) 中的功能。 例如,删除了非 NRC (new-ref-count) 选项。 所有统一应用程序一直都启用 NRC(也就是说,从来没有非 NRC 选项),并且没有已知的问题。 未来的版本将移除使用 Boehm 作为垃圾回收器的选项。 这也是统一应用程序从未有过的选项。 计划在 2016 年秋季发布 Xamarin.iOS 10.0 时完全移除经典支持。

最初的(非统一)Xamarin.iOS 和 Xamarin.Mac API 增加了代码共享的难度,因为本机框架有 MonoTouch.MonoMac. 命名空间前缀。 我们提供了一些空的命名空间,支持开发人员通过添加 using 语句在同一文件中引用 MonoMac 和 MonoTouch 命名空间来共享代码,但这有点难看。 Classic API 应该只能继续用于内部分发的旧应用(建议升级到 Unified API)。

从 Classic API 更新到 Unified API

有将任何应用程序从 Classic API 更新到 Unified API 的详细说明。

绑定 Objective-C 库

通过 Xamarin,可以使用绑定将本机库引入应用。 本部分介绍:

  • 绑定如何工作,
  • 如何手动构建绑定项目,以便将 Objective-C 代码引入 Xamarin,以及
  • 如何使用 Objective Sharpie 工具帮助自动执行该过程

本机引用

Mac/iOS 本机类型

为了从 C# 和 F# 透明地支持 32 位和 64 位代码,我们引入了新的数据类型。 在此处了解详细信息。

生成 32 位和 64 位应用

支持 32 位和 64 位应用程序的注意事项。

使用跨平台应用中的本机类型

本文介绍了如何在跨平台应用程序中使用新的 iOS Unified API 本机类型(nintnuintnfloat),其中代码与非 iOS 设备(例如 Android 或 Windows Phone 操作系统)共享。 其中提供了有关何时使用本机类型的见解,并为新类型必须与跨平台代码一起使用的情况提供了几种可能的解决方案。

HttpClient 堆栈和 SSL/TLS 实现选择器

新的 HttpClient 堆栈选择器可控制要在 Xamarin.iOS、Xamarin.tvOS 和 Xamarin.Mac 应用中使用的 HttpClient 实现。 现在可以切换到使用 iOS、tvOS 或 OS X 本机传输(NSUrlSessionCFNetwork,具体取决于 OS)的实现。

SSL(安全套接字层)及其后继者 TLS(传输层安全性)通过 System.Net.Security.SslStream 提供对 HTTP 和其他网络连接的支持。 新的 SSL/TLS 实现构建选项可在 Mono 自带的 TLS 堆栈与 Mac 和 iOS 中的 Apple TLS 堆栈之间切换。