以無線方式安裝企業內部應用
以無線方式安裝企業內部應用
iOS 支持以無線方式安裝自定的企業內部應用,而無需使用 iTunes 或 App Store。應用的格式必須為 .ipa,並且使用企業內部預置描述文件進行構建。無線安裝要求:
-
XML 清單文件(本節已有描述)
-
可讓設備訪問 Apple iTunes 服務器的網絡配置
-
對於 iOS 7.1 或更高版本,使用 HTTPS
為了安裝應用,用戶使用特殊的 URL 前綴從您的網站上下載清單文件。您可以通過短信或電子郵件分發用於下載清單文件的 URL,或將其嵌入創建的另一企業應用中。
您負責設計和托管用於分發應用的網站。請確定用戶已通過認證(可能是使用基本認證或基於目錄的認證),並確定網站可通過內聯網或互聯網進行訪問。您可以將應用和清單文件放入隱藏目錄或任何可使用 HTTPS 讀取的位置。
【註】創建自助服務門戶時,請考慮在用戶的主屏幕中添加一個 Web Clip,以便他們可以輕松返回門戶以獲取更多信息,如新的配置描述文件、推薦的 App Store 應用以及允許他們在 MDM 解決方案中進行註冊。
準備以無線方式分發的企業內部應用
為準備以無線方式分發的企業內部應用,請構建歸檔版本(.ipa 文件)和用於啟用無線分發和應用安裝的清單文件。
使用 Xcode 來創建應用歸檔。使用分發證書給應用簽名,並在歸檔中包括企業內部預置描述文件。有關構建和歸檔應用的更多信息,請訪問 iOS 開發者網站或 Xcode 幫助。
關於無線清單文件
清單文件是一個 XML plist 文件,可供 Apple 設備用來從您的 Web 服務器上查找、下載和安裝應用。清單文件由 Xcode 創建,使用的是您在共享用於企業分發的歸檔應用時所提供的信息。
以下欄是必填項:
-
URL:應用 (.ipa) 文件的完全限定 HTTPS URL
-
display-image:57 x 57 像素的 PNG 圖像,在下載和安裝過程中顯示。指定圖像的完全限定 URL
-
full-size-image:512 x 512 像素的 PNG 圖像,表示 iTunes 中相應的應用
-
bundle-identifier:應用的包標識符,與 Xcode 項目中指定的完全一樣
-
bundle-version:應用的包版本,在 Xcode 項目中指定
-
title:下載和安裝過程中顯示的應用的名稱
僅對於 iOS 8 中的“報刊雜誌”應用,以下欄必填:
-
newsstand-image:一張全尺寸 PNG 圖像,用於顯示在“報刊雜誌”書架上
-
UINewsstandBindingEdge 和 UINewsstandBindingType:鍵必須和“報刊雜誌”應用的 info.plist 中的鍵匹配
-
UINewsstandApp:表示該應用是“報刊雜誌”應用
樣本清單文件還包含可選鍵。例如,如果應用文件太大,並且想要在執行錯誤檢驗(TCP 通信通常會執行該檢驗)的基礎上確保下載的完整性,可以使用 MD5 鍵。
通過指定項目數組的附加成員,您可以使用一個清單文件安裝多個應用。
構建網站
將這些項目上傳到網站上可供已認證的用戶訪問的區域:
-
應用 (.ipa) 文件
-
清單 (.plist) 文件
您的網站可以是鏈接到清單文件的單個頁面。用戶輕點 Web 鏈接後會下載清單文件,並觸發下載和安裝。
以下是示例鏈接:
<a href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">Install App</a>
請勿添加歸檔應用 (.ipa) 的網站鏈接。載入清單文件時,設備會下載該 .ipa 文件。雖然 URL 的協議部分是“itms-services”,但 iTunes Store 並不參與此過程。
此外,請確定 .ipa 文件可通過 HTTPS 進行訪問,並且您的站點已使用 iOS 信任的證書進行了簽名。如果自簽名證書沒有受信任的錨點並且無法由 iOS 設備驗證,安裝會失敗。
設定服務器 MIME 類型
您可能需要配置 Web 服務器,讓清單文件和應用文件可正確傳輸。
對於 Server 應用,請將 MIME 類型添加到網頁服務的 MIME 類型設置:
-
application/octet-stream ipa
-
text/xml plist
對於微軟的互聯網信息服務器 (IIS),請使用 IIS Manager 在服務器的“屬性”頁面中添加 MIME 類型:
-
.ipa application/octet-stream
-
.plist text/xml
無線 iOS 應用分發故障診斷
如果無線應用分發失敗,並顯示“無法下載”信息:
-
請確定應用已正確進行簽名。測試方法是使用 Apple Configurator 2 將它安裝到設備上,然後查看是否發生錯誤。
-
請確定清單文件的鏈接是否正確,清單文件是否可供網絡用戶訪問。
-
請確定 .ipa 文件(在清單文件中)的 URL 是否正確,並且該 .ipa 文件是否可供網絡用戶通過 HTTPS 訪問。
網絡配置要求
如果設備連接到封閉式內部網絡,那麽您必須允許它訪問以下站點:
-
https://ax.init.itunes.apple.com:使用蜂窩移動網絡下載應用時,設備會限制其當前文件大小。如果無法訪問此站點,安裝可能會失敗。
-
https://ppq.apple.com:設備會聯系此網站,檢查用來給預置描述文件簽名的分發證書狀態。
提供更新的應用
您自己分發的應用不會自動更新。有新版本時,應通知用戶進行更新並指導他們安裝應用。請考慮讓應用檢查更新,並在打開應用時通知用戶。請確保通知中提供了 itms-services 鏈接。您還可以使用應用內部的 openURL 來安裝更新。
如果想要用戶保留他們設備上儲存的應用數據,請確保新版本與要替換的版本使用的捆綁標識符相同,並告知用戶在安裝新版本之前不要刪除舊版本。
預置描述文件過期之前,請訪問 iOS 開發者網站為應用創建新描述文件。對於首次安裝應用的用戶,請使用新預置描述文件創建新應用歸檔 (.ipa)。
如果用戶已有該應用,您不妨設定發布下一個版本的時間,並在該版本中包括新預置描述文件,這樣用戶在使用應用工作時不會被打斷。如果不想這樣做,您可以僅分發新的 .mobileprovision 文件,這樣用戶便不必再次安裝該應用。新的預置描述文件會覆蓋應用歸檔中已有的描述文件。
分發預置描述文件自簽發之日起 12 個月後過期。過期後,系統會刪除描述文件,應用將不會啟動。
您可以使用 MDM 安裝和管理預置描述文件,然後用戶通過應用更新或使用 MDM 進行下載並安裝。
如果您的分發證書過期,應用將不會啟動,而您需要使用新的分發證書來重新構建應用。分發證書自簽發之日起三年內有效,或者在您的 Apple Developer Enterprise Program(Apple 開發者企業級計劃)成員資格過期之前一直有效,二者以先到者為準。若要防止證書過期,請確保在成員資格過期之前先進行續訂。
您可以擁有同時處於活躍狀態的兩個證書,並且它們彼此獨立。第二個證書提供了一個重疊期,讓您能夠在第一個證書過期前更新應用。從 iOS Dev Center 請求第二個分發證書時,請確保不要撤銷第一個證書。
證書驗證
用戶首次打開應用時,系統會通過聯系 Apple 的 OCSP 服務器來驗證分發證書。如果證書已撤銷,應用將不會啟動。為了驗證狀態,設備必須能夠訪問 ocsp.apple.com。
OCSP 響應會在設備上緩存一段時間(由 OCSP 服務器指定),當前為 3 到 7 天之間。在重新啟動設備和緩存的響應過期之前,將不會再次檢查證書的有效性。如果當時收到撤銷命令,系統將阻止應用運行。
【警告】撤銷分發證書會導致使用該證書簽名的所有應用失效。只有萬不得已時才應撤銷證書,比如確定專用密鑰已丟失或確信證書已遭破解。
示例 iOS 應用清單文件
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- array of downloads. -->
<key>items</key>
<array>
<dict>
<!-- an array of assets to download -->
<key>assets</key>
<array>
<!-- software-package: the ipa to install. -->
<dict>
<!-- required. the asset kind. -->
<key>kind</key>
<string>software-package</string>
<!-- optional. md5 every n bytes. will restart a chunk if md5 fails. -->
<key>md5-size</key>
<integer>10485760</integer>
<!-- optional. array of md5 hashes for each "md5-size" sized chunk. -->
<key>md5s</key>
<array>
<string>41fa64bb7a7cae5a46bfb45821ac8bba</string>
<string>51fa64bb7a7cae5a46bfb45821ac8bba</string>
</array>
<!-- required. the URL of the file to download. -->
<key>url</key>
<string>https://www.example.com/apps/foo.ipa</string>
</dict>
<!-- display-image: the icon to display during download.-->
<dict>
<key>kind</key>
<string>display-image</string>
<!-- optional. indicates if icon needs shine effect applied. -->
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://www.example.com/image.57x57.png</string>
</dict>
<!-- full-size-image: the large 512x512 icon used by iTunes. -->
<dict>
<key>kind</key>
<string>full-size-image</string>
<!-- optional. one md5 hash for the entire file. -->
<key>md5</key>
<string>61fa64bb7a7cae5a46bfb45821ac8bba</string>
<key>needs-shine</key>
<true/>
<key>url</key><string>https://www.example.com/image.512x512.jpg</string>
</dict>
</array>
<key>metadata</key>
<dict>
<!-- required -->
<key>bundle-identifier</key>
<string>com.example.fooapp</string>
<!-- optional (software only) -->
<key>bundle-version</key>
<string>1.0</string>
<!-- required. the download kind. -->
<key>kind</key>
<string>software</string>
<!-- optional. displayed during download; typically company name -->
<key>subtitle</key>
<string>Apple</string>
<!-- required. the title to display during the download. -->
<key>title</key>
<string>Example Corporate App</string>
</dict>
</dict>
</array>
</dict>
</plist>
Apple 官方鏈接:
http://help.apple.com/deployment/ios/#/apda0e3426d7
以無線方式安裝企業內部應用