將 Xamarin.iOS 應用程式發佈到 App Store

若要將應用程式發佈到 App Store,應用程式開發人員必須先將其 (以及螢幕擷取畫面、描述、圖示和其他資訊) 提交給 Apple 進行審查。 應用程式一經核准,Apple 就會將它放在 App Store,使用者可以在其中購買並直接從其 iOS 裝置中進行安裝。

本指南描述要遵循的步驟,以便為 App Store 準備應用程式,並將它傳送給 Apple 進行審查。 特別是,它會描述:

  • 遵循 App Store 審查指導方針
  • 設定應用程式識別碼和權利
  • 提供 App Store 圖示和應用程式圖示
  • 設定 App Store 佈建設定檔
  • 更新 [發行] 組建組態
  • 在 iTunes Connect 中設定應用程式
  • 建置您的應用程式,並將它提交給 Apple

重要

Apple 已宣佈從 2019 年 3 月開始,提交至 App Store 的所有應用程式與更新,都必須使用 iOS 12.1 SDK 或更新版本 (包含在 Xcode 10.1 或更新版本中) 進行建置。 應用程式也應支援 iPhone XS 及 12.9" iPad Pro 的螢幕大小。

App Store 指導方針

在 App Store 中提交要發佈的應用程式之前,請確定它符合 Apple 之 App Store Review Guidelines (App Store 審查指導方針) 所定義的標準。 當您將應用程式提交給 App Store 時,Apple 會進行審查,以確定它符合這些需求。 如果不符合,Apple 將拒絕它,您必須解決上述問題,然後重新提交。 因此,在開發程序中盡早熟悉指導方針是個不錯的主意。

提交應用程式時有幾個特別需要注意的事項:

  1. 確定應用程式的描述符合其功能。
  2. 測試應用程式不會在正常使用情況下損毀。 這包含其所支援之每部 iOS 裝置的使用方式。

另請查看 Apple 提供的 App Store 相關資源

設定應用程式識別碼和權利

每個 iOS 應用程式具有唯一的應用程式識別碼,其擁有一組稱為「權利」的相關聯應用程式服務。 權利允許應用程式執行各種動作,例如接收推播通知、存取 HealthKit 之類的 iOS 功能等等。

若要建立應用程式識別碼,並選取任何所需的權利,請瀏覽 Apple Developer 入口網站,並遵循下列步驟:

  1. 登入 Apple Developer Portal。 如果您還沒有 Apple ID, 請先建立 Apple ID
  2. 移至 [ 憑證]、[標識符和配置檔] 區段,然後移至 [標識符] 區 段。
  3. +按兩下頁面頂端 [標識符] 標題旁的按鈕。
  4. 選取 [應用程式識別符], 然後按兩下 [ 繼續]。
  5. 選取 [ 應用程式 ],然後按兩下 [ 繼續]。
  6. 輸入 新應用程式的 [描述 ] 和 [套件組合標識符 ],然後選取 Xamarin.iOS 應用程式所需的任何 功能 。 應用程式服務進一步詳述於使用 Xamarin.iOS 中的功能指南。 當您完成選取專案時,請按兩下 [ 繼續]。
  7. 按兩下 [ 註冊] 按鈕來完成建立新應用程式識別碼的程式。

定義應用程式識別碼時,除了選取並設定必要的應用程式服務之外,您也必須藉由編輯 Info.plistEntitlements.plist 檔案,在 Xamarin.iOS 專案中設定應用程式識別碼和權利。 如需詳細資訊,請查看使用 Xamarin.iOS 中的權利指南,該指南描述如何建立 Entitlements.plist 檔案,以及其所包含之各種權利設定的意義。

包含 App Store 圖示

當您將應用程式提交給 Apple 時,請確定其所含的資產目錄包含了 App Store 圖示。 若要了解如何執行這項操作,請查看 Xamarin.iOS 中的 App Store 圖示指南。

設定應用程式圖示與啟動畫面

若要讓 Apple 在 App Store 提供 iOS 應用程式,對於可執行該應用程式的所有 iOS 裝置,iOS 應用程式必須具有適當的圖示與啟動畫面。 如需如何設定應用程式圖示與啟動畫面的詳細資訊,請參閱下列指南:

建立並安裝 App Store 佈建設定檔

iOS 會使用佈建設定檔來控制特定應用程式組建的部署方式。 這些檔案包含用於簽署應用程式之憑證、應用程式識別碼,以及應用程式可安裝位置的相關資訊。 若為開發與臨機操作散發,佈建設定檔也會包含您可部署應用程式的允許裝置清單。 然而,因為公開散發的唯一管道是 App Store,所以 App Store 散發只會包含憑證與應用程式識別碼資訊。

若要建立並安裝 App Store 佈建設定檔,請遵循下列步驟:

  1. 登入 Apple Developer Portal
  2. 移至 [憑證]、[標識符和配置檔] 區段,然後移至 [配置檔] 區段。
  3. +按兩下按鈕,選取 [iOS 應用程式開發和App Store],然後按兩下 [繼續]。
  4. 從清單中選取應用程式的 [應用程式識別碼],然後按一下 [繼續]
  5. 選取簽署憑證,然後按一下 [繼續]
  6. 選取要包含在此配置檔中的裝置,然後按兩下 [ 繼續]。
  7. 輸入布 建配置檔名稱 ,然後按兩下 [產生 ] 以產生設定檔。
  8. 使用 Xamarin 的 Apple 帳戶管理工具,將新建立的佈建設定檔下載至您的 Mac。 如果您是在 Mac 上,也可以直接從 Apple Developer 入口網站下載佈建設定檔,並按兩下該檔案來進行安裝。

如需詳細指示,請參閱建立散發設定檔在 Xamarin.iOS 專案中選取散發設定檔

更新發行組建組態

新的 Xamarin.iOS 專案會自動設定 [偵錯] 和 [發行] 組建組態。 若要適當設定 [發行] 組建,請遵循下列步驟:

  1. 從 Solution Pad 開啟位於 iOS 專案內的 Info.plist 檔案。

  2. 請確定您位於 [應用程式] 檢視中。 您可以按下底部導覽欄中的選項來設定此選項。

  3. 選取 [ 手動布建 ] 作為 [簽署] 選項。 儲存並關閉檔案。

  4. 以滑鼠右鍵按一下 [Solution Pad] 中的 [專案名稱],選取 [選項],然後巡覽至 [iOS 組建] 索引標籤。

  5. 將 [組態] 設定為 [發行],並將 [平台] 設定為 [iPhone]

  6. 若要使用特定的 iOS SDK 建置,請從 [SDK 版本] 清單中進行選取。 否則,請將此值保留為 [預設]

  7. 連結可藉由移除未使用的程式碼,減少應用程式的整體大小。

    • 在大部分情況下,[連結器行為] 應該設定為預設值 [僅連結 Framework SDK]
    • 使用 [不要連結] 選項可能會導致Apple拒絕應用程式,因為 Xamarin.iOS 中有非公用 iOS API,且連結至 [鏈接架構 SDK] 選項
    • 連結 All 應該小心使用,因為它會從專案中的所有元件去除程式代碼,包括第三方連結庫。 它可以去除第三方連結庫只能透過連結器無法偵測的反映使用的程式代碼,因為它會進行靜態程式代碼分析,以判斷正在使用哪個連結庫程序代碼。 請小心使用 [全部 連結],因為您可能必須手動保留某些類別和/或方法,以避免因為缺少程式代碼而發生運行時失敗。
    • 如需詳細資訊,請參閱連結 Xamarin.iOS 應用程式指南。
  8. 針對 iOS 11,請選取支援 ARM64 的其中一個裝置架構。 如需為 64 位元 iOS 裝置進行建置的詳細資訊,請參閱 32/64 位元平台考量文件中的啟用 Xamarin.iOS 應用程式的 64 位元組建一節。

  9. 您可能想要使用 LLVM 編譯器來建置較小且更快速的程式碼。 不過,此選項會增加編譯時間。

  10. 核取 [最佳化 PNG 影像],進一步減少您的應用程式大小。

  11. 因為偵錯會使組建產生不必要的大小,所以建議「不要」啟用。

  12. 根據您的應用程式需求,也可以考慮調整要使用的記憶體回收類型與國際化設定。

    如上所述設定選項之後,您的組建設定看起來應該如下所示:

    iOS Build settings

    另請參閱 iOS 組建機制 指南,進一步說明組建設定。

  13. 流覽至 [iOS 套件組合簽署] 索引標籤。如果此處的選項無法編輯,請確定 Info.plist 檔案中已選取 [手動布建]。

  14. 確定 [組態] 設定為 [發行],且 [平台] 設定為 [iPhone]

  15. 將 [簽署身分識別] 設定為 [散發 (自動)]

  16. 針對 [佈建設定檔],選取上方建立的 App Store 佈建設定檔。

    您的專案套件組合簽署選項現在看起來像這樣:

    iOS Bundle Signing

  17. 按一下 [確定] 儲存您對專案屬性進行的變更。

在 iTunes Connect 中設定您的應用程式

iTunes Connect 是一套 Web 架構工具,可讓您在 App Store 上管理 iOS 應用程式。 您必須先在 iTunes Connect 中正確設定 Xamarin.iOS 應用程式,才能將其提交給 Apple 進行審查,並在 App Store 上發行。

若要了解如何執行這項操作,請閱讀在 iTunes Connect 中設定應用程式指南。

建置並提交您的應用程式

在正確設定您的組建設定且 iTunes Connect 正在等待您的提交之後,您現在可以建置您的應用程式,並將它提交給 Apple。

  1. 在 Visual Studio for Mac 中,選取 [發行] 組建組態及要為其建置的裝置 (不是模擬器)。

    Build configuration and platform selection

  2. 從 [建置] 功能表中選取 [封存以供發佈]

  3. 建立封存之後,就會顯示封存檢視。 按一下 [簽署並散發...],以開啟 [發佈精靈]。

    Screenshot of the Sign and Distribute button location in the Archives view.

    注意

    根據預設,[封存] 檢視只會顯示已開啟方案的封存。 若要查看所有具有封存的方案,請按一下 [顯示所有封存] 核取方塊。 最好是保留舊的封存,以便在必要時,可以使用它們包含的偵錯資訊將當機報告符號化。

  4. 選取 [App Store] 散發通道。 按一下 [下一步] 。

  5. 選取 [ 上傳 ] 作為目的地。 按一下 [下一步] 。

  6. 在 [佈建設定檔] 視窗中,選取您的簽署身分識別、應用程式和佈建設定檔。 按一下 [下一步] 。

    Screenshot of the Provisioning profile wizard page showing a valid signing identity, app, and provisioning profile selection.

  7. 在 [App Store 連線 資訊] 視窗中,從功能表中選取 Apple ID 使用者名稱,然後輸入應用程式特定的密碼。 按一下 [下一步] 。

    Screenshot of the App Store Connect information wizard page showing an Apple ID user name selected.

  8. 確認套件的詳細數據,然後按兩下 [ 發佈]。 選取儲存 .ipa 檔案的位置之後,精靈會將您的應用程式上傳至 App Store 連線。

    注意

    Apple 會拒絕 .ipa 檔案中包含 iTunesMetadata.plist 的應用程式,因而導致發生如下錯誤:

    ERROR: ERROR ITMS-90047: "Disallowed paths ( "iTunesMetadata.plist" ) found at: Payload/iPhoneApp1.app"

    如需這項錯誤的因應措施,請查看 Xamarin 論壇中的這篇文章

iTunes Connect 狀態

若要查看您的應用程式提交狀態,請登入 iTunes Connect,並選取您的應用程式。 初始狀態應該是等候審查,但在處理時可能會暫時顯示已收到上傳

Waiting For Review

秘訣與訣竅

自訂 .ipa 位置

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

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

  • 第一種選擇是在 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>
       <BuildIpa>true</BuildIpa>
       <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    

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

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 Connect。

摘要

本文描述如何設定組建,並提交 iOS 應用程式以在 App Store 上發行。