将 Xamarin.Mac Unified 应用程序更新为 64 位

自 2018 年 1 月起,Apple 要求新的 Mac App Store 提交内容需面向 64 位。 Mac App Store 上已有的应用必须在 2018 年 6 月前更新为面向 64 位。

文件>新建 Xamarin.Mac 项目模板默认创建 64 位应用程序,因此最近创建的任何应用都已兼容 64 位,无需进行任何更改。

面向 64 位

  1. 打开 Xamarin.Mac 应用的“项目选项”窗口:

    The contextual menu for the project

  2. 选择“Mac 生成”并将“支持的体系结构”设置为“x86_64”

    Setting the supported architectures to x86_64

  3. 如果应用有任何外部依赖项,如本机引用或绑定项目,请将它们更新为面向 64 位。

错误

首次构建或运行支持 64 位的应用程序时,可能会遇到来自 clang 的链接错误或运行时问题。 如果第三方依赖项(例如 Xamarin.Mac 或绑定项目中的本机引用或手动加载的系统范围框架)尚未更新至 64 位,则可能出现这些错误。

提示

将项目转换为 64 位是一项重大变更,可能会间接发现各种编程错误。 特别是,它可能会改变数据结构的大小和对齐,从而影响 p/invoke 签名和项目中链接的本机代码。 考虑查看所给出的任何生成警告,并在之后彻底测试应用程序,以发现潜在问题。

由于动态链接第三方依赖项未面向 64 位而导致的错误示例:

ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary, 
file was built for i386 which is not the architecture being linked (x86_64): 
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary 

在运行时,该错误发生后可能会发生 dlopen 返回 IntPtr.Zero 而不是预期的句柄。

由于静态链接第三方依赖项未面向 64 位而导致的错误示例:

Undefined symbols for architecture x86_64:
  "_LibraryFunction", referenced from:
     -u command line option
ld: symbol(s) not found for architecture x86_64 

若要成功生成并运行,请将这些依赖项更新为 64 位并重新编译应用。