1. 程式人生 > >以無線方式安裝企業內部應用

以無線方式安裝企業內部應用

prop 樣本 應用歸檔 nbsp 重新 web 描述 阻止 安裝

以無線方式安裝企業內部應用

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

以無線方式安裝企業內部應用