將 Xamarin.Mac 整合應用程式更新為 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位並重新編譯您的應用程式。