前言
本人公司開發的.ipa
釋出於 AppStore 和自己的伺服器上。但是自己卻一直沒時間利用公司的資源進行研究。現在趕緊趁熱打鐵,記錄一下,以便以後查閱。
在此之前,在網上查閱了相關資料並整理了一下加以完善更正。
背景
網上說Xcode 6
之後版本匯出企業.ipa
包需要手動新增.plist
檔案,本人今天親自測試了一遍,發現Xcode 7
之後又可以配置生成的。在這裡我按照我的流程走一遍。
IPA打包
- 在工程中選擇
Product
-Archive
進入打包介面 - 選擇
Export
進入打包方式選擇介面 - 選擇
Save for Enterprise Deployment
選項,Next - 選擇對應的企業賬號,然後繼續即可
- 接下來是對安裝裝置的要求選擇,預設選擇所有裝置。第二個選項是指定特定型別裝置方可安裝。我們使用預設第一項,Next
- 之後的介面是對應用的二次確認,確保APP配置準確無誤。在視窗的左下方有一個
Include manifest for over-the-air installation
。該選項表示是否在生成.ipa
檔案的同時生成.plist
檔案,我們勾選上,Nextover-the-air
: OTA 是蘋果在iOS4
中新增的一項功能,目的是讓企業使用者能夠在脫離Apple App Store
的情況下通過網頁無線釋出 iOS 應用;簡單來講就是在Safari
中點選一個連結就可以在iPhone或iPad上下載並安裝應用(目前很多越獄軟體都是使用的這種釋出方式)。 - 接下來配置
.plist
檔案,填寫完之後,Export匯出.ipa
包和相應的.plist
檔案(建議將生成的.plist
檔案命名同APP名一致,方面後期管理)
構建網站
必備條件
-
需要購買一個蘋果的企業版證照,價格$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 URLdisplay-image
:57 x 57 畫素的 PNG 影象,在下載和安裝過程中顯示。指定影象的完全限定 URLfull-size-image
:512 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
按鈕獲取正確的地址
.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、方式四:終極大招,直接使用第三方託管平臺(推薦兩個自己常用平臺)
- fir.im - 免費應用內測託管平臺|iOS應用Beta測試分發|Android應用內測分發
- 蒲公英 - 免費的應用託管平臺|App應用眾測分發
- TestFlight Beta Testing - App Store - Apple Developer
安裝失敗原因
利用企業證照打包部署的 ipa 安裝有可能存在安裝失敗的情況。一般的失敗的原因可以查閱iOS應用安裝失敗原因排查
再一次感謝您花費時間閱讀這篇文章!
微博: @Danny_呂昌輝
部落格: SuperDanny