iOS開發企業版ipa分發(In House模式)記錄

SuperDanny發表於2017-12-13

前言

本人公司開發的.ipa釋出於 AppStore 和自己的伺服器上。但是自己卻一直沒時間利用公司的資源進行研究。現在趕緊趁熱打鐵,記錄一下,以便以後查閱。

在此之前,在網上查閱了相關資料並整理了一下加以完善更正。

背景

網上說Xcode 6之後版本匯出企業.ipa包需要手動新增.plist檔案,本人今天親自測試了一遍,發現Xcode 7之後又可以配置生成的。在這裡我按照我的流程走一遍。

IPA打包

  1. 在工程中選擇Product-Archive進入打包介面
  2. 選擇Export進入打包方式選擇介面
  3. 選擇Save for Enterprise Deployment選項,Next
    打包方式
  4. 選擇對應的企業賬號,然後繼續即可
    選擇開發者賬號
  5. 接下來是對安裝裝置的要求選擇,預設選擇所有裝置。第二個選項是指定特定型別裝置方可安裝。我們使用預設第一項,Next
    安裝裝置要求
  6. 之後的介面是對應用的二次確認,確保APP配置準確無誤。在視窗的左下方有一個Include manifest for over-the-air installation。該選項表示是否在生成.ipa檔案的同時生成.plist檔案,我們勾選上,Next
    確認配置

    over-the-air: OTA 是蘋果在iOS4中新增的一項功能,目的是讓企業使用者能夠在脫離Apple App Store的情況下通過網頁無線釋出 iOS 應用;簡單來講就是在Safari中點選一個連結就可以在iPhone或iPad上下載並安裝應用(目前很多越獄軟體都是使用的這種釋出方式)。

  7. 接下來配置.plist檔案,填寫完之後,Export匯出.ipa包和相應的.plist檔案(建議將生成的.plist檔案命名同APP名一致,方面後期管理)
    配置plist檔案

構建網站

必備條件

  • 需要購買一個蘋果的企業版證照,價格$299/年。指南

  • 網站需要支援HTTPS協議,用於訪問下載.plist檔案

    這裡有兩種辦法:

    • 一種是購買SSL證照或者免費申請SSL證照
    • 另一種是將.plist檔案託管在第三方上面,利用第三方支援的HTTPS進行訪問下載;

使用OSChina的程式碼託管。訪問OSChina,新增一個專案;然後用git或svn客戶端將.plist檔案提交到版本庫中;最後在瀏覽器中訪問專案中的.plist檔案,檢視原始資料,即可獲得plist的https下載地址。

步驟

1.將.plist檔案與.ipa檔案上傳至伺服器供使用者訪問 2.建立一個包含如下程式碼的網頁,使用者輕點 Web 連結後會下載.plist檔案,並觸發下載和安裝。

<a href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">Install App</a>
複製程式碼

3.配置伺服器MIME型別 您可能需要配置 Web 伺服器,讓.plist檔案和.ipa檔案可正確傳輸。

對於OS X Server,請將MIME型別新增到 Web 服務的MIME型別設定:

  • application/octet-stream ipa
  • text/xml plist

對於微軟的網際網路資訊伺服器 (IIS),請使用IIS Manager在伺服器的“屬性”頁面中新增MIME型別:

  • .ipa application/octet-stream
  • .plist text/xml

【警告】撤銷分發證照會導致使用該證照籤名的所有應用失效。只有萬不得已時才應撤銷證照,比如確定專用金鑰已丟失或確信證照已遭破解。


擴充區

關於無線清單檔案(.plist檔案)

清單檔案是一個XML plist 檔案,可供 Apple 裝置用來從您的 Web 伺服器上查詢、下載和安裝應用。清單檔案由 Xcode 建立,使用的是您在共享用於企業分發的歸檔應用時所提供的資訊。 以下欄是必填項:

  • URL應用 (.ipa) 檔案的完全限定 HTTPS URL
  • display-image57 x 57 畫素的 PNG 影象,在下載和安裝過程中顯示。指定影象的完全限定 URL
  • full-size-image512 x 512 畫素的 PNG 影象,表示 iTunes 中相應的應用
  • bundle-identifier應用的包識別符號,與 Xcode 專案中指定的完全一樣
  • bundle-version應用的包版本,在 Xcode 專案中指定
  • title下載和安裝過程中顯示的應用的名稱

樣本清單檔案(下面給出)還包含可選鍵。例如,如果應用檔案太大,並且想要在執行錯誤檢驗(TCP 通訊通常會執行該檢驗)的基礎上確保下載的完整性,可以使用 MD5 鍵。 通過指定專案陣列的附加成員,您可以使用一個清單檔案安裝多個應用。

示例 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>

複製程式碼

蘋果官方相關文件 以無線方式安裝企業內部應用

關於正確提取.plist檔案下載地址姿勢

在評論區中,有朋友問及到關於.plist檔案的下載地址不正確問題,這裡提供幾種方式:

1、在自己的伺服器部署.plist時,直接提供伺服器下載地址即可 2、將.plist檔案部署在github上時,可以在進入.plist詳細介面,點選RAW按鈕獲取正確的地址

raw
真實地址
3、另外七牛也是一個不錯的選擇,我們可以將.plist檔案上傳到七牛上面,需要配置ssl證照。

部署下載頁面方式

1、方式一:進入下載頁面之後點選安裝APP按鈕之後才能下載安裝

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
    <head>
        <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
        <title>應用名字</title>
    </head>
    <body>
        <h1style="font-size:80pt">如果點選無法下載安裝,請複製超連結到瀏覽器中開啟<h1/>
        <h1style="font-size:100pt">
        <a title="iPhone" href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">安裝APP</a><h1/>
    </body>
</html>
複製程式碼

2、方式二:進入下載頁面之後自動下載安裝

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
    <head>
        <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
        <title>應用名字</title>
        <script>
            var url ="https://example.com/manifest.plist";
            window.location ="itms-services://?action=download-manifest&url="+ url;
        </script>
    </head>
    <body>
    </body>
</html>
複製程式碼

3、方式三:通過iOS應用內安裝

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-services://?action=download-manifest&url=https://example.com/manifest.plist"]];
複製程式碼

4、方式四:終極大招,直接使用第三方託管平臺(推薦兩個自己常用平臺)

  1. fir.im - 免費應用內測託管平臺|iOS應用Beta測試分發|Android應用內測分發
  2. 蒲公英 - 免費的應用託管平臺|App應用眾測分發
  3. TestFlight Beta Testing - App Store - Apple Developer

安裝失敗原因

利用企業證照打包部署的 ipa 安裝有可能存在安裝失敗的情況。一般的失敗的原因可以查閱iOS應用安裝失敗原因排查


再一次感謝您花費時間閱讀這篇文章!

微博: @Danny_呂昌輝
部落格: SuperDanny

相關文章