共用方式為


iOS、Mac 和系結專案中的原生參考

原生參考可讓您將原生架構內嵌至 Xamarin.iOS 或 Xamarin.Mac 專案或系結專案。

由於 iOS 8.0 可以建立內嵌架構,在應用程式延伸模組與 Xcode 中的主要應用程式之間共用程式代碼。 使用原生參考功能,就可以在 Xamarin.iOS 中使用這些內嵌架構(以 Xcode 建立)。

重要

無法從任何類型的 Xamarin.iOS 或 Xamarin.Mac 專案建立內嵌架構,原生參考僅允許使用現有的原生架構Objective-C。

詞彙

在 iOS 8(和更新版本中), 內嵌架構 可以同時內嵌靜態連結和動態連結的架構。 若要正確散發它們,您必須將它們設為「fat」架構,其中包含您想要支援應用程式之每個裝置架構的所有 配量

靜態與動態架構

靜態架構會在編譯階段連結,其中 Dynamic Framework 會在運行時間連結,而且可以修改,而不需重新連結。 如果您在 iOS 8 之前已使用任何第三方架構,則使用的是 已編譯至應用程式的靜態架構 。 如需詳細資訊,請參閱Apple的 動態連結庫程式設計 檔。

內嵌與系統架構

內嵌架構 包含在您的應用程式套件組合中,而且只能透過其沙箱存取特定應用程式。 系統架構 會儲存在作業系統層級,並可供裝置上的所有應用程式使用。 目前只有 Apple 能夠建立作業系統層級架構。

精簡與 Fat 架構

精簡架構 只包含特定系統架構的已編譯程序代碼,其中 Fat Framework 包含多個架構的程式代碼。 編譯至架構的每個架構特定程式代碼基底稱為 Slice。 因此,例如,如果我們有針對兩個 iOS 模擬器架構編譯的架構(i386 和 X86_64),則會包含兩個 Slices。

如果您嘗試將這個範例 Framework 與您的應用程式一起散發,它會在模擬器上正確執行,但在裝置上會失敗,因為 Framework 不包含 iOS 裝置的任何程式代碼特定配量。 為了確保架構在所有實例中都能運作,它也需要包含裝置特定的配量,例如arm64、armv7和armv7。

使用內嵌架構

您必須完成兩個步驟,才能在 Xamarin.iOS 或 Xamarin.Mac 應用程式中使用內嵌架構:建立 Fat Framework 並內嵌架構。

建立 Fat Framework

如上所述,若要能夠在應用程式中取用內嵌架構,它必須是 Fat Framework,其中包含應用程式將執行之裝置的所有系統架構 Slices。

當 Framework 和取用應用程式位於相同的 Xcode 專案中時,這不是問題,因為 Xcode 會使用相同的組建設定來建置 Framework 和應用程式。 由於 Xamarin 應用程式無法建立內嵌架構,因此無法使用這項技術。

若要解決此問題, lipo 命令行工具可用來將兩個或多個架構合併成一個 Fat Framework,其中包含所有必要的配量。 如需使用 lipo 命令的詳細資訊,請參閱連結 原生連結庫 檔。

內嵌架構

若要使用原生參考在 Xamarin.iOS 或 Xamarin.Mac 專案中內嵌架構,必須執行下列步驟:

  1. 建立新的或開啟現有的 Xamarin.iOS、Xamarin.Mac 或 Binding 專案。

  2. 在 方案總管,以滑鼠右鍵按兩下專案名稱,然後選取 [新增>原生參考]:

    In the Solution Explorer, right-click on the project name and select Add Native Reference

  3. 從 [ 開啟 ] 對話框中,選取您要內嵌的 Native Framework 名稱,然後按兩下 [ 開啟 ] 按鈕:

    Select the name of the Native Framework to embed and click the Open button

  4. 架構將會新增至專案的樹狀結構:

    The framework will be added to the projects tree

編譯專案時,Native Framework 會內嵌在應用程式的套件組合中。

應用程式延伸模組和內嵌架構

內部 Xamarin.iOS 可能會利用這項功能,將 Mono 運行時間連結為架構(當部署目標為 >= iOS 8.0 時),因此大幅減少具有擴充功能的應用程式大小(因為 Mono 運行時間只會針對整個應用程式套件組合包含一次,而不是針對容器應用程式一次,而針對每個擴充功能只包含一次)。

擴充功能會以Mono運行時間作為架構連結,因為所有擴充功能都需要iOS 8.0。

沒有以 iOS 為目標之擴充功能和應用程式的應用程式

摘要

本文已詳細探討將原生架構內嵌至 Xamarin.iOS 或 Xamarin.Mac 應用程式。