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

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 圖像,用于顯示在“報刊雜志”書架上

UINewsstandBindingEdgeUINewsstandBindingType:鍵必須和“報刊雜志”應用的 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>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容