Apple ios Enterprise Distribution App implement


Posted by david-christian on 2024-11-07

實作背景

  • 不希望 App 可公開下載,只希望特定人士下載
  • 用戶裝置不希望公司或學校裝置管理,Apple Business Manager MDM 無法使用
  • 有跨國需求,在一些條件下,redeem code solution 無法使用

甚麼是 Enterprise Distribution?

用戶透過存取公開的網際網路連結,手動下載安裝憑證以及企業App

必要條件

需要開通 企業開發者帳號 (Apple Developer Enterprise Program)

在 Apple Developer 建立 Identifier, Certificate, Profile

Identifier 選擇 "App IDs",在後面的步驟中也稱 bundle id

後面步驟中,Capabilities, App Services 不需選擇任何選項

Certificate 選擇 "In-House and Ad Hoc"

這個步驟需上傳本機產生的憑證

透過 macos 的 Keychain 產生本機憑證

Profile 選擇 "In House"

Profile 後面步驟需選擇前面步驟產生的 Identifier 以及 Certificate

Distribute App

選擇 "Enterprise"

在 distribution enterprice app 後,會得到

  • xxx.ipa
  • ExportOptions.plist
  • DistributionSummary.plist

通常只需要 xxx.ipa

準備 manifest.plist

接下來自行創建一個 manifest.plist 檔案,manifest.plist 內容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
    <dict>
        <key>assets</key>
        <array>
            <dict>
                <key>kind</key>
                <string>software-package</string>
                <key>url</key>
                <!-- 必要,ipa檔案在網路上可供下載的位置 -->
                <string>https://xxx.com/xxx.ipa</string>
            </dict>
        </array>
        <key>metadata</key>
        <dict>
            <!-- 必要,在 xcode 操作 distribution enterprice 前所設定的 bundle id -->
            <key>bundle-identifier</key>
            <string>test_bundle_identifier</string>
            <!-- 選填 -->
            <key>bundle-version</key>
            <string>1.1.0</string>
            <key>kind</key>
            <string>software</string>
             <!-- 必要,下載時顯示 -->
            <key>title</key>
            <string>example app</string>
        </dict>
    </dict>
</array>
</dict>
</plist>

manifest.plist 裡面有三個資訊需自行填入 <string><string> 裡面, <key> 標籤是 url, bundle-identifier, title

  • url
    xxx.ipa 需放置在網際網路上可供存取的位置,其 url 寫在這裡
  • bundle-identifier
    在操作 distribution enterprice 前,所設置的 bundle id
  • title
    下載時顯示 App 的名字

manifest.plist & certificate 需可供用戶存取

將 manifest.plist 放置在網際網路上可供存取的位置https://xxx.com/manifest.plist

給用戶的 url 需要加上 itms-services://?action=download-manifest
itms-services:// 是一種 URL 協議,用於 iOS 設備上直接安裝應用程式。它通常用於企業或開發者向測試人員或內部用戶分發應用,而不通過 App Store。這樣的鏈接允許使用者點擊後直接在 iPhone 或 iPad 上下載並安裝應用。
itms-services:// 表示使用 Apple 特定的安裝協議。
?action=download-manifest 表示該鏈接將下載一個「manifest」文件,這是一個用於描述應用資訊的 XML 文件。
url="" 應包含指向 manifest 文件的 URL

最後給用戶的 url 會是這樣
itms-services://?action=download-manifest&url=https://xxx.com/manifest.plist

將先前生成的憑證描述檔(certificate)放置在網際網路上可供存取的位置https://xxx.com/certificate.cer
用戶需下載安裝憑證描述檔以及透過 Apple 特定的安裝協議下載manifest.plist才可完成手動安裝企業App

手動安裝企業App

用戶需先下載安裝描述檔,請注意這一步需使用 Safari瀏覽器操作
用 Safari瀏覽器存取https://xxx.com/certificate.cer後,會跳出

安裝描述檔後,我們再用瀏覽器存取itms-services://?action=download-manifest&url=https://xxx.com/manifest.plist
畫面上應該會跳出

點擊後,該 App 就會自動下載安裝

接下來如果我們開啟該 App,會跳出 App 未受信任

需到「設定」>「一般」>「VPN 與裝置管理」,在「企業 App」區段中,點一下 App 開發者的名稱

下一個畫面會列出該開發者的 App,以及這些 App 是否已經過驗證。點一下以信任 App 開發者,然後點一下「信任」來確認你的決定。

更多有關信任的資訊可參考
https://support.apple.com/zh-tw/118254

信任後即可順利開啟企業App
我們就完成全部的實作。










Related Posts

[GIT101] Git 超新手入門

[GIT101] Git 超新手入門

[閱讀組] 如何提交微開發者寫作松單篇作品?

[閱讀組] 如何提交微開發者寫作松單篇作品?

建立屬於你的 Google Map 地圖標記(二) - 渲染自定參數的地圖元件

建立屬於你的 Google Map 地圖標記(二) - 渲染自定參數的地圖元件


Comments