Xamarin.iOS 中的內嵌架構

本文件說明應用程式開發人員如何在其應用程式中內嵌用戶架構。

有了 iOS 8.0 Apple,就可以建立內嵌架構,在應用程式延伸模組與 Xcode 中的主要應用程式之間共用程式代碼。

Xamarin.iOS 9.0 新增了在 Xamarin.iOS 應用程式中取用這些內嵌架構(以 Xcode 建立)的支援。 無法從任何類型的 Xamarin.iOS 專案建立內嵌架構,而只能取用現有的原生架構Objective-C。

有兩種方式可取用 Xamarin.iOS 中的架構:

  • 將架構傳遞至 mtouch 工具,方法是將下列內容新增至專案的 iOS 組建 選項中的其他 mtouch 自變數:

    --framework:/Path/To/My.Framework
    

    這必須針對每個項目組態進行設定。

  • 從操作功能表新增原生參考

以滑鼠右鍵按兩下 [專案],然後流覽以新增原生參考

Select Add native references in Visual Studio for Mac

這適用於所有組態。

在未來版本的Visual Studio for Mac和 Xamarin Tools for Visual Studio 中,可以從 IDE 內取用架構(不需要手動編輯項目檔)。

您可以在 github 上 找到一些範例專案

限制

  • 整合專案中僅支援 內嵌 架構。
  • 只有部署目標至少為 iOS 8.0 的專案才支援內嵌架構。
  • 如果擴充功能需要內嵌架構,則容器應用程式也必須有架構的參考,否則架構將不會包含在應用程式套件組合中。

Mono 執行階段

內部 Xamarin.iOS 會利用這項功能,將 Mono 運行時間連結為架構,而不是以靜態方式將 Mono 運行時間連結至每個延伸模組和容器應用程式。

如果容器應用程式是整合應用程式,它就會自動完成此作業,其中包含擴充功能,而目標部署是iOS 8.0或更高版本。

沒有延伸模組的應用程式仍會以靜態方式與Mono運行時間連結,因為如果只有一個參考架構的應用程式,則使用架構會有大小懲罰。

應用程式開發人員可以覆寫此行為,方法是在專案的 iOS 組建選項中新增下列專案做為額外的 mtouch 自變數:

  • --mono:static:以靜態方式與Mono運行時間連結。
  • --mono:framework:以Mono運行時間做為架構的連結。

將 Mono 執行時間連結為架構的其中一個案例,即使是沒有延伸模組的應用程式,也會減少可執行檔大小,以克服 Apple 在可執行檔上強制執行的任何大小限制。 如需參考,Mono 運行時間會為每個架構新增大約 1.7 MB(從 Xamarin.iOS 8.12 起,不過他的版本,甚至應用程式之間也有所不同)。 Mono 架構會為每個架構新增大約 2.3 MB,這表示對於沒有任何延伸模組的單一架構應用程式而言,讓應用程式連結成為 Mono 運行時間,將會壓縮 ~1.7MB 的可執行檔,但新增 ~2.3MB 架構,因而完全產生 ~0.6MB 更大的應用程式。