iOS開(kāi)發(fā)企業(yè)版ipa分發(fā)(In-House模式)記錄

前言

本人公司開(kāi)發(fā)的.ipa發(fā)布于 AppStore 和自己的服務(wù)器上。但是自己卻一直沒(méi)時(shí)間利用公司的資源進(jìn)行研究。現(xiàn)在趕緊趁熱打鐵,記錄一下,以便以后查閱。

在此之前,在網(wǎng)上查閱了相關(guān)資料并整理了一下加以完善更正。

背景

網(wǎng)上說(shuō)Xcode 6之后版本導(dǎo)出企業(yè).ipa包需要手動(dòng)添加.plist文件,本人今天親自測(cè)試了一遍,發(fā)現(xiàn)Xcode 7之后又可以配置生成的。在這里我按照我的流程走一遍。

IPA打包

  1. 在工程中選擇Product-Archive進(jìn)入打包界面
  2. 選擇Export進(jìn)入打包方式選擇界面
  3. 選擇Save for Enterprise Deployment選項(xiàng),Next
    打包方式
  4. 選擇對(duì)應(yīng)的企業(yè)賬號(hào),然后繼續(xù)即可


    選擇開(kāi)發(fā)者賬號(hào)
  5. 接下來(lái)是對(duì)安裝設(shè)備的要求選擇,默認(rèn)選擇所有設(shè)備。第二個(gè)選項(xiàng)是指定特定類型設(shè)備方可安裝。我們使用默認(rèn)第一項(xiàng),Next
    安裝設(shè)備要求
  6. 之后的界面是對(duì)應(yīng)用的二次確認(rèn),確保APP配置準(zhǔn)確無(wú)誤。在窗口的左下方有一個(gè)Include manifest for over-the-air installation。該選項(xiàng)表示是否在生成.ipa文件的同時(shí)生成.plist文件,我們勾選上,Next
    確認(rèn)配置

    over-the-air: OTA 是蘋果在iOS4中新增的一項(xiàng)功能,目的是讓企業(yè)用戶能夠在脫離Apple App Store的情況下通過(guò)網(wǎng)頁(yè)無(wú)線發(fā)布 iOS 應(yīng)用;簡(jiǎn)單來(lái)講就是在Safari中點(diǎn)擊一個(gè)鏈接就可以在iPhone或iPad上下載并安裝應(yīng)用(目前很多越獄軟件都是使用的這種發(fā)布方式)。

  7. 接下來(lái)配置.plist文件,填寫完之后,Export導(dǎo)出.ipa包和相應(yīng)的.plist文件(建議將生成的.plist文件命名同APP名一致,方面后期管理)
    配置plist文件

構(gòu)建網(wǎng)站

必備條件

  • 需要購(gòu)買一個(gè)蘋果的企業(yè)版證書,價(jià)格$299/年。指南

  • 網(wǎng)站需要支持HTTPS協(xié)議,用于訪問(wèn)下載.plist文件

    這里有兩種辦法:

    • 一種是購(gòu)買SSL證書或者免費(fèi)申請(qǐng)SSL證書
    • 另一種是將.plist文件托管在第三方上面,利用第三方支持的HTTPS進(jìn)行訪問(wèn)下載;

使用OSChina的代碼托管。訪問(wèn)OSChina,添加一個(gè)項(xiàng)目;然后用git或svn客戶端將.plist文件提交到版本庫(kù)中;最后在瀏覽器中訪問(wèn)項(xiàng)目中的.plist文件,查看原始數(shù)據(jù),即可獲得plist的https下載地址。

步驟

1.將.plist文件與.ipa文件上傳至服務(wù)器供用戶訪問(wèn)
2.創(chuàng)建一個(gè)包含如下代碼的網(wǎng)頁(yè),用戶輕點(diǎn) Web 鏈接后會(huì)下載.plist文件,并觸發(fā)下載和安裝。

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

3.配置服務(wù)器MIME類型
您可能需要配置 Web 服務(wù)器,讓.plist文件和.ipa文件可正確傳輸。

對(duì)于OS X Server,請(qǐng)將MIME類型添加到 Web 服務(wù)的MIME類型設(shè)置:

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

對(duì)于微軟的互聯(lián)網(wǎng)信息服務(wù)器 (IIS),請(qǐng)使用IIS Manager在服務(wù)器的“屬性”頁(yè)面中添加MIME類型:

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

【警告】撤銷分發(fā)證書會(huì)導(dǎo)致使用該證書簽名的所有應(yīng)用失效。只有萬(wàn)不得已時(shí)才應(yīng)撤銷證書,比如確定專用密鑰已丟失或確信證書已遭破解。


拓展區(qū)

關(guān)于無(wú)線清單文件(.plist文件)

清單文件是一個(gè)XML plist 文件,可供 Apple 設(shè)備用來(lái)從您的 Web 服務(wù)器上查找、下載和安裝應(yīng)用。清單文件由 Xcode 創(chuàng)建,使用的是您在共享用于企業(yè)分發(fā)的歸檔應(yīng)用時(shí)所提供的信息。
以下欄是必填項(xiàng):

  • URL應(yīng)用 (.ipa) 文件的完全限定 HTTPS URL
  • display-image57 x 57 像素的 PNG 圖像,在下載和安裝過(guò)程中顯示。指定圖像的完全限定 URL
  • full-size-image512 x 512 像素的 PNG 圖像,表示 iTunes 中相應(yīng)的應(yīng)用
  • bundle-identifier應(yīng)用的包標(biāo)識(shí)符,與 Xcode 項(xiàng)目中指定的完全一樣
  • bundle-version應(yīng)用的包版本,在 Xcode 項(xiàng)目中指定
  • title下載和安裝過(guò)程中顯示的應(yīng)用的名稱

樣本清單文件(下面給出)還包含可選鍵。例如,如果應(yīng)用文件太大,并且想要在執(zhí)行錯(cuò)誤檢驗(yàn)(TCP 通信通常會(huì)執(zhí)行該檢驗(yàn))的基礎(chǔ)上確保下載的完整性,可以使用 MD5 鍵。
通過(guò)指定項(xiàng)目數(shù)組的附加成員,您可以使用一個(gè)清單文件安裝多個(gè)應(yīng)用。

示例 iOS 應(yīng)用清單文件

<!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>

蘋果官方相關(guān)文檔
以無(wú)線方式安裝企業(yè)內(nèi)部應(yīng)用

關(guān)于正確提取.plist文件下載地址姿勢(shì)

在評(píng)論區(qū)中,有朋友問(wèn)及到關(guān)于.plist文件的下載地址不正確問(wèn)題,這里提供幾種方式:

1、在自己的服務(wù)器部署.plist時(shí),直接提供服務(wù)器下載地址即可
2、將.plist文件部署在github上時(shí),可以在進(jìn)入.plist詳細(xì)界面,點(diǎn)擊RAW按鈕獲取正確的地址

raw

真實(shí)地址

3、另外七牛也是一個(gè)不錯(cuò)的選擇,我們可以將.plist文件上傳到七牛上面,需要配置ssl證書。

部署下載頁(yè)面方式

1、方式一:進(jìn)入下載頁(yè)面之后點(diǎn)擊安裝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>應(yīng)用名字</title>
    </head>
    <body>
        <h1style="font-size:80pt">如果點(diǎn)擊無(wú)法下載安裝,請(qǐng)復(fù)制超鏈接到瀏覽器中打開(kāi)<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、方式二:進(jìn)入下載頁(yè)面之后自動(dòng)下載安裝

<!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>應(yīng)用名字</title>
        <script>
            var url ="https://example.com/manifest.plist";
            window.location ="itms-services://?action=download-manifest&url="+ url;
        </script>
    </head>
    <body>
    </body>
</html>

3、方式三:通過(guò)iOS應(yīng)用內(nèi)安裝

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

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

  1. fir.im - 免費(fèi)應(yīng)用內(nèi)測(cè)托管平臺(tái)|iOS應(yīng)用Beta測(cè)試分發(fā)|Android應(yīng)用內(nèi)測(cè)分發(fā)
  2. 蒲公英 - 免費(fèi)的應(yīng)用托管平臺(tái)|App應(yīng)用眾測(cè)分發(fā)
  3. TestFlight Beta Testing - App Store - Apple Developer

安裝失敗原因

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


再一次感謝您花費(fèi)時(shí)間閱讀這篇文章!

微博: @Danny_呂昌輝
博客: SuperDanny

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容