
什么是OTA?
OTA即Over-the-Air,是Apple在 iOS4 中新加的一項技術(shù),目的是讓開發(fā)者能夠脫離Appstore,實現(xiàn)從自己的服務(wù)器下載并安裝iOS應(yīng)用。簡單地說,就是用戶只需要在Safari中點開一條鏈接,就能直接在主界面中安裝App。
實現(xiàn)原理
OTA方式安裝,是通過Safari解析鏈接中的"itms-services://"來實現(xiàn)的。
例如:
<a title="iPhone" href="itms-services://?action=download-manifest&url=https://192.168.10.193/installIPA.plist"> Iphone Download</a>
Safari會去讀取installIPA.plist中的信息,如:iOS應(yīng)用的名稱、版本、安裝地址等。
實現(xiàn)方法
- 通過企業(yè)證書發(fā)布
- 通過個人證書發(fā)布(Ad_hoc)
- 直接安裝在越獄機器上
這里我們只討論大家最常見的,用個人證書發(fā)布內(nèi)測版。
實現(xiàn)步驟
1. 用Xcode打包release版本
2. 搭建本地Web服務(wù)器
3. 開啟HTTPS
4. 編寫好對應(yīng)的.plist文件
5. 上傳ipa、.plist、ca證書到Web服務(wù)器,配置好index.html
6. 在手機上用Safari打開鏈接,完成下載
是不是很簡單?OK, Let's Start it!
Xcode打包
首先我們選擇好打包的證書,因為是內(nèi)測包,所以我們選擇Ad_hoc證書。

選好證書后,輸出設(shè)備我們選擇iOS Device,然后在Product選項中,選擇Archive

Xcode會出現(xiàn)一個信息框,我們選擇Export,然后在彈出框中選擇第二項,點擊Next

這時會彈出證書選擇框,我們需要選擇Ad_hoc證書,點擊Choose

Xcode打包好后,會讓我們選擇保持路徑。這樣我們的iOS內(nèi)測包就已經(jīng)打包完成了。

搭建Web服務(wù)器
因為本文主要是介紹怎么實現(xiàn)OTA的安裝,所以服務(wù)器搭建部分只做基本的指導(dǎo)(不過會詳細說明怎么配置HTTPS),詳細搭建方法還請大家自行Google_。
好吧,iOS開發(fā)都是用的Mac OS X,而Mac OS X中正好自帶了Apache服務(wù),所以這里我們只需要簡單的在終端中敲擊一行命令,就能啟動Web服務(wù)了。
sudo apachectl start
這時我們在瀏覽器中輸入"http://127.0.0.1/",如果出現(xiàn)It Works!,那么恭喜你Web服務(wù)器啟動成功。
Web文件目錄是:"/Library/WebServer/Documents/", 系統(tǒng)級根目錄默認沒有開啟目錄列表, 開啟方法:編輯 "/etc/apache2/httpd.conf "文件。 搜索找到<Directory "/Library/WebServer/Documents">,按下列圖中紅框標(biāo)示處修改。DoucumentRoot可以改為任何路徑。

開啟HTTPS服務(wù)
因為iOS7.1以后,Apple不再支持HTTP方式的OTA,所以我們需要為Apache開啟HTTPS。
OpenSSL自制證書
開啟HTTPS的第一步,就是需要先生成ssl證書。
生成服務(wù)器的私鑰
mkdir /private/etc/apache2/ssl cd /private/etc/apache2/ssl sudo openssl genrsa -out server.key 1024生成簽署申請(Common Name必須為服務(wù)器的ip或域名)
sudo openssl req -new -key server.key -out server.csr生成CA私鑰
sudo openssl genrsa -out ca.key 1024用CA的私鑰產(chǎn)生CA的自簽署證書
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt創(chuàng)建demoCA
demoCA里面創(chuàng)建文件index.txt和serial,serial內(nèi)容為01,index.txt為空,以及文件夾newcerts
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
這樣我們就生成了server.crt,server.key,ca.crt文件。將 server.crt,server.key配置到服務(wù)器上,我們存放的位置是"/private/etc/apache2/ssl/server.crt","/private/etc/apache2/ssl/server.key", ca.crt放到文件根目錄中。
配置Apache的SSL服務(wù)
仍然是編輯/private/etc/apache2/httpd.conf這個文件,去掉下面三行前面的 '#'
LoadModule ssl_module libexec/apache2/mod_ssl.so
Include /private/etc/apache2/extra/httpd-ssl.conf
Include/private/etc/apache2/extra/httpd-vhosts.conf
編輯/private/etc/apache2/extra/httpd-ssl.conf這個文件,去掉下面兩行前面的 '#'
SSLCertificateFile "/private/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
編輯/private/etc/apache2/extra/httpd-vhosts.conf這個文件,在'NameVirtualHost:80'*后面添加:
NameVirtualHost *:443
在文件末尾添加:
<VirtualHost *:443>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /private/etc/apache2/ssl/server.crt
SSLCertificateKeyFile /private/etc/apache2/ssl/server.key
ServerName 192.168.10.193
DocumentRoot "/自己定義的路徑/"
</VirtualHost>
檢查配置,如果有問題按照提示開啟相應(yīng)服務(wù)即可。
sudo apachectl configtest
沒問題后,重啟服務(wù)
sudo apachectl restart
這樣就可以用https訪問我們的本地服務(wù)器了。
編寫plist文件
plist文件編寫很簡單,網(wǎng)上有很多模板,我這里為大家提供常用的信息,里面很多地方可以更改為自己所需要的。
plist文件內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://192.168.10.193/test.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>必須和打包的bundleidentifier一樣</string>
<key>bundle-version</key>
<string>版本號</string>
<key>kind</key>
<string>software</string>
<key>releaseNotes</key>
<string>v1(可以隨意填)</string>
<key>title</key>
<string>App名稱</string>
</dict>
</dict>
</array>
</dict>
</plist>
添加配置信息
我們把剛剛建好的plist文件(這里取名為installIPA.plist)、ipa包、ca證書放到Web服務(wù)器的文件目錄下,然后修改index.html中的內(nèi)容。
(index.html內(nèi)容):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>應(yīng)用名字</title>
</head>
<body>
<h1 style="font-size:40pt">iOS應(yīng)用OTA安裝<h1/>
<h1 style="font-size:40pt">
<a title="iPhone" href="itms-services://?action=download-manifest&url=https://192.168.10.193/installIPA.plist">Iphone Download</a>
<h1/>
<a title="iPhone" >ssl 證書安裝</a>
<h1/>
</body>
</html>
如果一切OK的話,我們在瀏覽器打開本地服務(wù)器地址,會出現(xiàn)如下內(nèi)容:

OTA安裝
是的,到了最激動人心的時候了,我們用iphone打開瀏覽器,輸入本地服務(wù)器的地址,首先選擇ssl證書安裝, 然后再點擊Iphone Download,哈哈,是不是已經(jīng)彈出對話框詢問需要安裝了??
沒錯,這時點擊安裝即可快速地實現(xiàn)OTA下安裝App了!