Xamarin.iOS 中的 IPA 支援

本文涵蓋如何使用臨機操作散發建立可用來部署應用程式的 IPA 檔案,以供測試或內部應用程式的內部作業散發使用。

發行應用程式除了可透過 iTunes App Store 銷售,還可以部署來進行下列用途:

  • 臨機操作測試:iOS 應用程式可部署至多達 100 個使用者 (透過特定 iOS 裝置 UUID 來識別),以供 Alpha 和 Beta 測試之用。 如需將測試 iOS 裝置新增至 Apple 開發人員帳戶的詳細資訊,請參閱佈建 iOS 裝置以進行開發文件,而如需如何以這種方式散發的詳細資訊,請參閱臨機操作指南。
  • 內部作業 / 企業部署:iOS 應用程式能夠在公司內部部署,這需要 Apple Developer Enterprise Program 的成員資格。 內部作業散發的更多資訊詳細說明於內部作業散發指南。

在任一情況下,都要以正確的散發佈建設定檔來建立和數位簽署 IPA 套件 (特殊的 zip 檔案類型)。 本文涵蓋建置 IPA 套件,以及在 Mac 或 Windows 電腦上使用 iTunes 於 iOS 裝置安裝套件所需的步驟。

iTunesMetadata.plist 檔案

在 iTunes Connect 中建立 iOS 應用程式 (不論要從 iTunes App Store 銷售或免費發行) 時,開發人員可指定像是應用程式的內容類型、子內容類型、著作權標示、支援的 iOS 裝置以及所需裝置功能等資訊。

透過臨機操作或內部作業散發傳遞的 iOS 應用程式,需要一些支援此資訊的方法,才能在 iTunes 與使用者的裝置上顯示。 根據預設,您每次建置專案都會建立小型 iTunesMetadata.plist 檔案並儲存在專案目錄中。

您也可以建立自訂 iTunesMetadata.plist 以提供散發的其他資訊。 若要深入了解此檔案內容和如何建立,請參閱 iTunesMetadata.plist 內容建立 iTunesMetadata.plist 檔案文件。

iTunes 插圖

透過非 App Store 的方式傳遞應用程式時,您也需要包括 512x512 與 1024x1024 的影像,用以在 iTunes 中呈現應用程式。

若要指定 iTunes 插圖,請執行下列動作:

  1. 在 [方案總管] 中,按兩下 [Info.plist] 檔案以開啟它進行編輯。
  2. 捲動到編輯器的 [iTunes 插圖] 區段。
  3. 針對任何缺少的影像,按一下編輯器中的縮圖,從 [開啟檔案] 對話方塊中選取所需 iTunes 插圖的影像檔案,然後按一下 [確定] 或 [開啟] 按鈕。
  4. 重複上述步驟,直到為應用程式指定所有必要的影像為止。

如需詳細資訊,請參閱 iTunes 插圖文件。

建立 IPA

建立 IPA 現在內建於新的發行工作流程。 若要執行此動作,請依照下列指示來封存、簽署應用程式以及儲存 IPA。

開始建立跨平台解決方案的 IPA 之前,請確定您已將 iOS 專案選取為啟始專案:

Selected the iOS project as the startup project

建置封存

若要建置 IPA,必須建立應用程式發行組建的「封存」。 此封存包含應用程式和相關的識別資訊。

  1. 在 Visual Studio for Mac 中選取 [發行] | [裝置] 組態: !

    Select the Release | Device configuration

  2. 從 [建置] 功能表選取 [Archive for Publishing] (封存以供發行)

    Select Archive for Publishing

  3. 建立封存後,[封存] 檢視會隨即顯示:

    The Archives view will be displayed

簽署並散發應用程式

每次建置應用程式進行封存,都會自動開啟 [封存] 檢視,顯示依解決方案分組的所有已封存專案。 根據預設,此檢視只會顯示目前開啟的解決方案。 若要查看有封存的所有解決方案,請按一下 [顯示所有封存] 按鈕。

建議您保留部署至客戶的封存 (臨機操作或內部作業部署),以便日後代表所產生的任何偵錯資訊。

請注意,對於非 App Store 組建,如果在封存中找到 iTunesMetadata.plist 檔案與 iTunes 插圖,就會自動納入 IPA 中。

若要簽署應用程式並準備散發:

  1. 選取 [簽署並散發] 按鈕,如下所示:

    Select Sign and Distribute...

  2. 這會開啟發佈精靈。 選取 [臨機操作] 或 [企業] \(內部作業\) 散發通道以建立套件:

    Select the Ad-Hoc or Enterprise In-House distribution

  3. 在 [佈建設定檔] 畫面上,選取您的簽署識別與對應的佈建設定檔,或重新簽署另一個身分識別:

    Select the signing identity and corresponding provisioning profile

  4. 請確認套件的詳細資料,然後按一下 [發行]

    Verify the package details

  5. 最後,將 IPA 儲存至您的電腦:

    Save the IPA to the computer

透過命令列建置 (在 Mac 上)

在某些特定案例中 (例如在 CI 環境中),您可能需要透過命令列來建置 IPA。 請遵循下列步驟來進行這項作業:

  1. 確定 已檢查 [項目選項 > ] [iOS IPA 選項 > 包含 iTunesArtwork 映射 ],並 檢查 [建置臨機操作/企業套件][IPA]

    Include iTunesArtwork images and Build ad-hoc/enterprise package IPA is checked

    您想要的話,可以改為以文字編輯器來編輯 .csproj 檔案,並針對要用來建置應用程式的組態,將兩個對應屬性手動加入至 PropertyGroup

    <BuildIpa>true</BuildIpa>
    <IpaIncludeArtwork>false</IpaIncludeArtwork>
    
  2. 如果您要納入選擇性的 iTunesMetadata.plist 檔案,請按一下 [...] 按鈕,從清單中選取該檔案,然後按一下 [確定] 按鈕:

    Select iTunesMetadata.plist from the list

  3. 在命令列上直接呼叫 msbuild 並傳遞這個屬性:

    /Library/Frameworks/Mono.framework/Commands/msbuild YourSolution.sln /p:Configuration=Ad-Hoc /p:Platform=iPhone /p:BuildIpa=true
    

自訂 IPA 位置

已新增的 MSBuild 屬性 IpaPackageDir 可讓您輕鬆自訂 .ipa 檔案輸出位置。 如果將 IpaPackageDir 設定為自訂位置,.ipa 檔案將會置於其中,而不是放在預設時間戳記子目錄。 建立須仰賴特定目錄路徑才能正常運作的自動組建 (例如用於持續整合 (CI) 組建) 時,這會很有用。

新屬性有數個可能的使用方式:

例如,若要將 .ipa 檔案輸出至舊的預設目錄 (如 Xamarin.iOS 9.6 和較舊版本),您可以使用下列其中一種方法來將 IpaPackageDir 屬性設定為 $(OutputPath)。 兩種方法都與所有 Unified API Xamarin.iOS 組建相容,包括 IDE 組建以及使用 msbuildxbuildmdtool 的命令列組建:

  • 第一種選擇是在 MSBuild 檔案的 <PropertyGroup> 元素內設定 IpaPackageDir 屬性。 例如,您可以將下列 <PropertyGroup> 新增至 iOS 應用程式專案 .csproj 檔案的底部 (在結尾的 </Project> 標記之前):

    <PropertyGroup>
        <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    
  • 較好的方法是將 <IpaPackageDir> 元素加入至現有 <PropertyGroup> 的底部,其對應用於建置 .ipa 檔案的組態。 這種做法較好,因為會在 iOS IPA 選項專案屬性頁面上以規劃的設定,準備具有未來相容性的專案。 如果您目前使用 Release|iPhone 組態來建置 .ipa 檔案,整個更新後的屬性群組看起來可能會類似下列內容:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
        <Optimize>true</Optimize>
        <OutputPath>bin\iPhone\Release</OutputPath>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <ConsolePause>false</ConsolePause>
        <CodesignKey>iPhone Developer</CodesignKey>
        <MtouchUseSGen>true</MtouchUseSGen>
        <MtouchUseRefCounting>true</MtouchUseRefCounting>
        <MtouchFloat32>true</MtouchFloat32>
        <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
        <MtouchLink>SdkOnly</MtouchLink>
        <MtouchArch>;ARMv7, ARM64</MtouchArch>
        <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
        <MtouchTlsProvider>Default</MtouchTlsProvider>
        <PlatformTarget>x86&</PlatformTarget>
        <BuildIpa>true</BuildIpa>
        <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    

msbuildxbuild 命令列組建這項替代技術是新增 /p: 引數來設定 IpaPackageDir 屬性。 在此情況下,請注意 msbuild 不會展開命令列上傳入的 $() 運算式,因此無法使用 $(OutputPath) 語法。 您必須改為提供完整路徑名稱。 Mono 的 xbuild 命令不會展開 $() 運算式,但仍偏好使用完整路徑名稱,原因是已改用 msbuild 的跨平台版本來取代 xbuild

使用這種方法的完整範例在 Windows 上看起來可能會類似下列內容:

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:ServerAddress="192.168.1.3" /p:ServerUser="macuser" /p:IpaPackageDir="%USERPROFILE%\Builds" /t:Build SingleViewIphone1.sln

或在 Mac 上可能如下:

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:IpaPackageDir="$HOME/Builds" /t:Build SingleViewIphone1.sln

使用 iTunes 安裝 IPA

產生的 IPA 套件可以傳遞給測試使用者在其 iOS 裝置上安裝,或可發行以供企業部署。 不論選擇哪種方法,使用者都要按兩下 IPA 檔案 (或拖曳至開啟的 iTunes 視窗),在其 Mac 或 Windows 電腦上的 iTunes 應用程式中安裝套件。

新的 iOS 應用程式會顯示在 [我的應用程式] 區段,您可以在應用程式上按一下滑鼠右鍵並取得相關資訊:

使用者現在可以將 iTunes 與其裝置同步來安裝新的 iOS 應用程式。

摘要

本文涵蓋準備非 App Store 組建的 Xamarin.iOS 應用程式所需的設定步驟。 文中說明如何建立 IPA 套件和如何在使用者的 iOS 裝置上安裝產生的 iOS 應用程式,以進行測試或內部作業散發。