更新現有的 iOS 應用程式
請遵循下列步驟來更新現有的 Xamarin.iOS 應用程式,以使用整合 API。
更新現有的應用程式以使用 Unified API 需要變更項目檔本身,以及應用程式程式代碼中使用的命名空間和 API。
通往 64 位的道路
需要新的整合 API,才能從 Xamarin.iOS 行動應用程式支援 64 位裝置架構。 自 2015 年 2 月 1 日起,Apple 要求 iTunes App Store 提交所有新的應用程式都支援 64 位架構。
Xamarin 提供 Visual Studio for Mac 和 Visual Studio 的工具,可將從傳統 API 移轉至整合 API 的移轉程式自動化,或者您可以手動轉換項目檔。 雖然強烈建議使用自動工具,但本文將涵蓋這兩種方法。
開始之前...
將現有的程式代碼更新至整合 API 之前,強烈建議您排除所有 編譯警告。 當您移轉至 Unified 之後,傳統 API 中的許多 警告 就會變成錯誤。 在您開始之前修正它們會比較容易,因為來自傳統 API 的編譯程式訊息通常會提供更新的提示。
自動更新
修正警告之後,請在 Visual Studio for Mac 或 Visual Studio 中選取現有的 iOS 專案,然後從 [專案] 功能表選擇 [遷移至 Xamarin.iOS 整合 API]。 例如:
在自動化移轉執行之前,您必須同意此警告(很明顯,您應該先確定您有備份/原始檔控制,再開始此冒險):
此工具基本上會將下面所述的更新手動一節中所述的所有步驟自動化,並且是將現有 Xamarin.iOS 專案轉換為整合 API 的建議方法。
手動更新的步驟
同樣地,修正警告之後,請依照下列步驟手動更新 Xamarin.iOS 應用程式以使用新的整合 API:
1. 更新項目類型與建置目標
將 csproj 檔案中的項目類別從 6BC8ED88-2882-458C-8E55-DFD12B67127B
變更為 FEACFBD2-3405-455C-9665-78FE426C6842
。 在文本編輯器中編輯 csproj 檔案,並取代 元素中的<ProjectTypeGuids>
第一個專案,如下所示:
將 包含的 Xamarin.MonoTouch.CSharp.targets
Import 元素變更為 Xamarin.iOS.CSharp.targets
,如下所示:
2.更新項目參考
展開 iOS 應用程式專案的 [參考] 節點。 它一開始會顯示類似此螢幕快照的 *broken- monotouch 參考(因為我們剛變更專案類型):
以滑鼠右鍵按兩下 iOS 應用程式專案以 編輯參考,然後按下 monotouch 參考,然後使用紅色 「X」 按鈕加以刪除。
現在捲動至參考清單的結尾,然後勾選 Xamarin.iOS 元件。
按 [確定 ] 儲存項目參考變更。
3.從命名空間移除MonoTouch
請從語句中的using
命名空間中移除 MonoTouch 前置詞,或不論類別名稱已完全限定於何處(例如MonoTouch.UIKit
,只是 UIKit
)。
4.重新對應類型
已引進原生類型 ,以取代先前使用的一些類型,例如的 System.Drawing.RectangleF
CoreGraphics.CGRect
實例(例如)。 您可以在原生類型頁面上找到類型的完整清單。
5.修正方法覆寫
某些 UIKit
方法的簽章已變更為使用新的 原生類型 (例如 nint
)。 如果自定義子類別覆寫這些方法,簽章將不再相符,而且將會導致錯誤。 藉由變更子類別以符合使用原生類型的新簽章,以修正這些方法覆寫。
範例包括變更以傳public override int NumberOfSections (UITableView tableView)
回 ,並將 中的public override int RowsInSection (UITableView tableView, int section)
傳回nint
類型和參數類型變更為 nint
。
考量
將現有的 Xamarin.iOS 專案從傳統 API 轉換成新的整合 API 時,如果該應用程式依賴一或多個元件或 NuGet 套件,則應考慮下列考慮。
元件
您包含在應用程式中的任何元件也必須更新為整合 API,否則當您嘗試編譯時,就會發生衝突。 對於任何包含的元件,請將目前的版本取代為支援整合 API 的 Xamarin 元件存放區中的新版本,並執行全新組建。 作者尚未轉換的任何元件,都會在元件存放區中顯示僅限 32 位的警告。
NuGet 支援
雖然我們貢獻了 NuGet 的變更來與整合 API 支援搭配運作,但 NuGet 沒有新版本,因此我們正在評估如何讓 NuGet 辨識新的 API。
在那段時間之前,就像元件一樣,您必須將專案中包含的任何 NuGet 套件切換為支援整合 API 的版本,並在之後執行全新組建。
重要
如果您在相同的 Xamarin.iOS 專案中出現 錯誤「錯誤 3 無法同時包含 『monotouch.dll』 和 'Xamarin.iOS.dll' - 明確參考 'Xamarin.iOS.dll', 雖然 'monotouch.dll' 是由 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'' 在將您的應用程式轉換成 Unified API 之後參考,但通常是因為專案中有一個元件或 NuGet 套件尚未更新為 Unified API。 您必須移除現有的元件/NuGet、更新為支援整合 API 的版本,並執行全新組建。
啟用 Xamarin.iOS 應用程式的 64 位組建
對於已轉換成 Unified API 的 Xamarin.iOS 行動應用程式,開發人員仍然需要從應用程式的 [選項] 中為 64 位機器啟用應用程式建置。 如需啟用64位組建的詳細指示,請參閱32/64位平臺考慮檔的 Xamarin.iOS 應用程式的啟用64位組建。
完成
無論您選擇使用自動或手動方法,將 Xamarin.iOS 應用程式從傳統轉換為整合 API,都有數個需要進一步手動介入的實例。 請參閱我們的 提示,以將程式代碼更新至整合 API 檔,以瞭解已知問題及因應措施。