共用方式為


iOS 9 相容性

即使您不打算立即將 iOS 9 功能新增至應用程式,您也應該使用最新版本的 Xamarin 重建應用程式。

重要

此頁面上的信息適用於 App Store 中已以 iOS 8 或更早版本為目標的應用程式,且尚未提交 iOS 9 相容性更新的客戶。 如果您已經針對您的應用程式開發使用最新版本 - Xcode 7 和 Xamarin.iOS 9 - 請瀏覽 iOS 9 簡介。

出現第一個 iOS 9 Beta 版時,我們發現舊版 Xamarin 有兩個問題,這些 Xamarin 顯示為舊版應用程式無法在 iOS 9 上啟動:

  • iOS 8 或更早版本的應用程式建置無法在 32 位裝置上啟動(包括使用 整合 API 建置的應用程式)。
  • 未指定具有完整路徑的 P/Invoke 失敗。

將 Xamarin 安裝更新為最新的穩定通道版本,然後重建和重新部署您的應用程式,修正這兩個問題。

即使您不打算立即使用 iOS 9 功能更新應用程式,建議您使用最新版本的 Xamarin 重新建置,並重新提交至 App Store

這可確保您的應用程式會在客戶升級之後於 iOS 9 上執行。 您可以繼續支援 iOS 8 - 使用最新版本重建不會影響應用程式目標版本。

如果您在 iOS 9 上測試現有的應用程式時有進一步的問題,請閱讀 下面的<改善相容性 >一節。

使用 Visual Studio 更新

建議您明確檢查 Visual Studio 是否已更新為最新的穩定版本。

元件、Nugets 和其他連結庫呢?

您不需要等候任何元件或 Nugets 的新版本,即可解決上述兩個問題。 只要使用最新的穩定版本 Xamarin.iOS 重新建置您的應用程式,即可修正這些問題。

同樣地,元件廠商和 NuGet 作者 不需要 提交新的組建,只是為了修正上述兩個問題。 不過,如果任何元件或 NuGet 使用UICollectionView或載入來自 Xib 檔案的檢視,可能需要更新才能解決下面所述的 iOS 9 相容性問題。

改善程式代碼中的相容性

在 iOS 9 中,有一些程式碼模式可用來在舊版 iOS 中斷中運作的程式代碼模式。 以下是在 iOS 9 上測試時可能發生的一些可能問題(及其解決方案):

建構函式中的UICollectionViewCell.ContentView為 Null

原因: 在 iOS 9 中, initWithFrame: 建構函式現在是必要的,因為 iOS 9 的行為變更為 UICollectionView 文件狀態。 如果您註冊了指定標識符的類別,而且必須建立新的儲存格,則現在會藉由呼叫其 方法初始化該 initWithFrame: 儲存格。

修正: 新增如下所示的建 initWithFrame: 構函式:

[Export ("initWithFrame:")]
public YourCellClassName (CGRect frame) : base (frame)
{
    Initialize (); // refactor initialize code into a method
}

相關範例: MotionGraphTextKitDemo

從 Xib/Nib 載入檢視時,UIView 無法以程式代碼器初始化

原因:initWithCoder: 構函式是從介面產生器 Xib 檔案載入檢視時所呼叫的建構函式。 如果此建構函式未匯出 Unmanaged 程式代碼,則無法呼叫其 Managed 版本。 先前(例如在 iOS 8 中)已叫用建 IntPtr 構函式來初始化檢視。

修正: 建立和導出 initWithCoder: 建構函式,如下所示:

[Export ("initWithCoder:")]
public YourClassName (NSCoder coder) : base (coder)
{
    Initialize (); // refactor initialize code into a method
}

相關範例: 聊天

Dyld 訊息:沒有名稱為的快取映射...

您可能會在記錄檔中遇到下列資訊當機:

Dyld Error Message:
Dyld Message: no cache image with name (/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore)

原因: 這是Apple原生連結器中的Bug,當它們公開私人架構時,就會發生(在iOS 7中公開JavaScriptCore之前,這是私人架構),而應用程式部署目標適用於私人架構時的iOS版本。 在此情況下,Apple 的連結器會與架構的私人版本連結,而不是公用版本。

修正: 這會針對iOS 9解決此問題,但有一個簡單的因應措施,您可以同時自行套用:只要以您專案中較新的iOS 版本為目標(在此案例中可以嘗試 iOS 7)。 其他架構可能會顯示類似的問題,例如 WebKit 架構是在 iOS 8 中公開的(因此以 iOS 7 為目標會導致此錯誤;您應該將 iOS 8 設為在應用程式中使用 WebKit)。