将 Xamarin.Mac Unified 应用程序更新为 64 位
自 2018 年 1 月起,Apple 要求新的 Mac App Store 提交内容需面向 64 位。 Mac App Store 上已有的应用必须在 2018 年 6 月前更新为面向 64 位。
文件>新建 Xamarin.Mac 项目模板默认创建 64 位应用程序,因此最近创建的任何应用都已兼容 64 位,无需进行任何更改。
面向 64 位
打开 Xamarin.Mac 应用的“项目选项”窗口:
选择“Mac 生成”并将“支持的体系结构”设置为“x86_64”:
如果应用有任何外部依赖项,如本机引用或绑定项目,请将它们更新为面向 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 位并重新编译应用。