是否可以使用较旧版本的 Xcode 或 Xamarin.iOS?

Xamarin 文档假定使用的是最新的 Xamarin.iOS 和 Xcode,这是推荐做法。 但是,某些客户更喜欢使用较旧的 Xamarin.iOS 和/或 Xcode,并想要有关后果的详细信息。

这些发行说明包含下列警告:

警告

使用较旧的 Xcode 版本

使用较旧的 Xcode 版本(高于上述要求)通常是可能的,但某些功能可能不可用。 此外,一些限制可能需要有解决方法,例如:

  • 静态 registrar 需要 Xcode 头文件来生成应用程序,从而在缺少 API 时会导致 MT0091MT4109 错误。 在大多数情况下,启用托管链接器将有所帮助(通过删除 API)。
  • 除非使用 Xcode 9.0+ 工具链,否则 Bitcode 版本(适用于 tvOS 和 watchOS)可能无法提交到 App Store。

其他信息

Microsoft 强烈建议在开发和提交应用程序时使用最新的 Xcode 和最新的 Xamarin.iOS 版本。 在提交应用程序时,Apple 需要使用最新的 Xcode。

请注意,使用最新的 Xcode 不会阻止应用程序面向较旧的 iOS 版本。 支持的 iOS 版本基于 Info.plist 条目和应用程序使用的 API。

可以使用不同的名称(如 Xcode101.appXcode102.app)并行安装多个版本的 Xcode。 如果使用多个版本,请确保在 Visual Studio for Mac 设置中设置活动 Xcode,并使用xcode-select命令行工具

但是,在极少数情况下可能需要使用较旧的组件。 本文档将介绍使用早于最新版本时可能面临的一般挑战。

不过,Apple 的每个版本都是独一无二的,你可能会遇到此处未记录的其他问题。

这些挑战有时是无法解决的,因此,请尽可能坚持支持的最新 Xcode 和最新的 Xamarin.iOS 配置。

将旧版 Xamarin.iOS 与旧版的 Xcode 配合使用

至少在一段时间内,无法更新 Xamarin.iOS 和 Xcode。 限制是,在某些时候,Apple 对于提交应用程序有 Xcode 最低版本要求。 此时,应将所有组件(macOS、Xcode 和 Xamarin.iOS)更新到最新版本(或 Apple 所需的全新最低 Xcode 版本和匹配的 Xamarin.iOS 版本)。

通常,可以更轻松地逐步更新和跟上小变化。 对于更新可能更难跟上的大型项目,使用已知工作集可能是一个很好的折衷。

将新版的 Xamarin.iOS 与较旧版 Xcode 配合使用

Xamarin.iOS 通常会尽可能支持较旧的 Xcode 版本。 一些潜在的挑战包括:

  • 较新版 Xamarin.iOS 可能支持所选 Xcode 中不存在的某些功能和 API。
  • 静态 registrar 需要 Xcode 头文件来生成应用程序,从而在缺少 API 时会导致 MT0091MT4109 错误。
    • 在大多数情况下,如果尚未使用,启用托管链接器将有所帮助(通过删除新 API 的托管绑定)。
  • 除非使用 Xcode 9.0+ 工具链,否则 Bitcode 版本(适用于 tvOS 和 watchOS)可能无法提交到 App Store。

将新版 Xcode 与较旧版 Xamarin.iOS 配合使用

此用例要困难得多,因为 Xamarin.iOS 无法预测新 Xcode 不断变化的要求。 macOS 的更新也可能带来问题,如果没有兼容性修补程序,Xamarin.iOS 的许多部分可能会受到影响。

有一些潜在的问题可能会出现,包括:

  • mlaunch 不兼容:
    • 模拟器支持可能无法正常工作(或者完全无法工作)
    • 设备支持可能无法正常工作(或者完全无法工作)
  • mtouch 的未知支持
    • 不支持新框架
    • 不支持新权利
    • 不支持新的或更新的工具
      • 这也会影响代码签名

新的 AppStore 提交规则

Apple 随时保留对 AppStore 提交规则进行更新的权利。 这些规则更改有时会提前公布。 其中一些更改需要工具更改来支持,这需要更新的 Xamarin.iOS 组件。

除了规则更改之外,Apple 通常会向提交的应用添加额外的验证,或收紧现有验证。 其中一些要求更改我们的工具(例如新的阻止列表符号)。 许多客户会在提交时首次遇到这些问题,因为没有公告(或规则列表)。

总结

在可能的情况下,请遵循 Apple 的指导,使用 App Store 发布的最新 Xcode 进行开发和提交,以确保安全。

相应地,请使用已发布的最新 Xamarin.iOS。 这将跟踪可能影响已提交的应用程序并符合最新规则更改的最新修补程序。

如果这不可行,请考虑使用匹配的较旧的 Xcode 和 Xamarin.iOS 版本。 此方法可以在一段时间内工作,但在某些时候,Apple 将坚持使用更新的工具,因此请相应地做好计划。