更新現有的 Mac 應用程式
更新現有的應用程式以使用 Unified API 需要變更項目檔本身,以及應用程式程式代碼中使用的命名空間和 API。
通往 64 位的道路
需要新的整合 API,才能從 Xamarin.Mac 應用程式支援 64 位裝置架構。 自 2015 年 2 月 1 日起,Apple 需要向 Mac App Store 提交所有新的應用程式支援 64 位架構。
Xamarin 提供 Visual Studio for Mac 和 Visual Studio 的工具,可將從傳統 API 移轉至整合 API 的移轉程式自動化,或者您可以手動轉換項目檔。 雖然強烈建議使用自動工具,但本文將涵蓋這兩種方法。
開始之前...
將現有的程式代碼更新至整合 API 之前,強烈建議您排除所有 編譯警告。 當您移轉至 Unified 之後,傳統 API 中的許多 警告 就會變成錯誤。 在您開始之前修正它們會比較容易,因為來自傳統 API 的編譯程式訊息通常會提供更新的提示。
自動更新
修正警告之後,請在 Visual Studio for Mac 或 Visual Studio 中選取現有的 Mac 專案,然後從 [專案] 功能表選擇 [遷移至 Xamarin.Mac 整合 API]。 例如:
在自動化移轉執行之前,您必須同意此警告(很明顯,您應該先確定您有備份/原始檔控制,再開始此冒險):
在 Xamarin.Mac 應用程式中使用整合 API 時,可以選取兩種支援的 Target Framework 類型:
- Xamarin.Mac Mobile Framework - 這是 Xamarin.iOS 和 Xamarin.Android 支援完整 桌面 架構子集的相同微調 .NET Framework。 這是建議的架構,因為它提供較小的平均二進位檔,因為優越的鏈接行為。
- Xamarin.Mac .NET 4.5 Framework - 此架構再次是桌面架構的子集。 不過,其會減少比行動架構還少得多的完整桌面架構,而且應該「只」使用大部分的 NuGet 套件或第三方連結庫。 這可讓開發人員在使用支援的架構時取用標準 桌面 元件,但此選項會產生較大的應用程式套件組合。 這是建議的架構,其中使用第三方 .NET 元件與 Xamarin.Mac Mobile Framework 不相容。 如需支援的元件清單,請參閱我們的 元件 檔。
如需目標 Framework 的詳細資訊,以及為您的 Xamarin.Mac 應用程式選取特定目標的影響,請參閱我們的 目標 Framework 檔。
此工具基本上會將下面所述的更新手動一節中所述的所有步驟自動化,並且是將現有 Xamarin.Mac 項目轉換為整合 API 的建議方法。
手動更新的步驟
同樣地,修正警告之後,請遵循下列步驟手動更新 Xamarin.Mac 應用程式以使用新的整合 API:
1. 更新項目類型與建置目標
將 csproj 檔案中的項目類別從 42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23
變更為 A3F8F2AB-B479-4A4A-A458-A89E7DC349F1
。 在文本編輯器中編輯 csproj 檔案,並取代 元素中的<ProjectTypeGuids>
第一個專案,如下所示:
將 包含的 Xamarin.Mac.targets
Import 元素變更為 Xamarin.Mac.CSharp.targets
,如下所示:
在項目後面 <AssemblyName>
新增下列幾行程式代碼:
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>
範例:
2.更新項目參考
展開 Mac 應用程式專案的 [參考] 節點。 它一開始會顯示類似此螢幕快照的 *broken- XamMac 參考 (因為我們剛變更專案類型):
按兩下 XamMac 專案旁邊的齒輪圖示,然後選取 [刪除] 以移除中斷的參考。
接下來,以滑鼠右鍵按兩下 方案總管中的 [參考] 資料夾,然後選取 [編輯參考]。 捲動至參考清單底部,並在 Xamarin.Mac 旁邊放置檢查。
按 [確定 ] 儲存項目參考變更。
3.從命名空間移除MonoMac
請從語句中的using
命名空間中移除 MonoMac 前置詞,或只要有 classname 完整(例如MonoMac.AppKit
變成 justAppKit
)。
4.重新對應類型
已引進原生類型 ,以取代先前使用的一些類型,例如的 System.Drawing.RectangleF
CoreGraphics.CGRect
實例(例如)。 您可以在原生類型頁面上找到類型的完整清單。
5.修正方法覆寫
某些 AppKit
方法的簽章已變更為使用新的 原生類型 (例如 nint
)。 如果自定義子類別覆寫這些方法,簽章將不再相符,而且將會導致錯誤。 藉由變更子類別以符合使用原生類型的新簽章,以修正這些方法覆寫。
考量
將現有的 Xamarin.Mac 專案從傳統 API 轉換成新的整合 API 時,如果該應用程式依賴一或多個元件或 NuGet 套件,則應考慮下列考慮。
元件
您包含在應用程式中的任何元件也必須更新為整合 API,否則當您嘗試編譯時,就會發生衝突。 對於任何包含的元件,請將目前的版本取代為支援整合 API 的 Xamarin 元件存放區中的新版本,並執行全新組建。 作者尚未轉換的任何元件,都會在元件存放區中顯示僅限 32 位的警告。
NuGet 支援
雖然我們貢獻了 NuGet 的變更來與整合 API 支援搭配運作,但 NuGet 沒有新版本,因此我們正在評估如何讓 NuGet 辨識新的 API。
在那段時間之前,就像元件一樣,您必須將專案中包含的任何 NuGet 套件切換為支援整合 API 的版本,並在之後執行全新組建。
重要
如果您在相同的 Xamarin.Mac 項目中出現「錯誤 3 無法同時包含 『monomac.dll』 和 『Xamarin.Mac.dll』 格式 的錯誤 - 明確參考 『Xamarin.Mac.dll』, 雖然 『monomac.dll』 在將您的應用程式轉換為 Unified API 之後,由 'xxx, Version=0.0.0.000, Culture=neutral, PublicKeyToken=null'“ 參考,但通常是因為專案中有一個元件或 NuGet 套件,但尚未更新為 Unified API。 您必須移除現有的元件/NuGet、更新為支援整合 API 的版本,並執行全新組建。
啟用 Xamarin.Mac 應用程式的 64 位組建
對於已轉換成 Unified API 的 Xamarin.Mac 行動應用程式,開發人員仍然需要從應用程式的 [選項] 中,為 64 位機器建置應用程式。 如需啟用64位組建的詳細指示,請參閱32/64位平臺考慮檔的 Xamarin.Mac 應用程式啟用64位組建。
完成
無論您選擇使用自動或手動方法,將 Xamarin.Mac 應用程式從傳統轉換為整合 API,都有數個需要進一步手動介入的實例。 如需已知問題,請參閱我們的 提示,以將程式代碼更新至整合 API 檔並解決。