OTA
什么是OTA?
OTA即Over-the-Air,是Apple在 iOS4 中新加的一項(xiàng)技術(shù),目的是讓開(kāi)發(fā)者能夠脫離Appstore,實(shí)現(xiàn)從自己的服務(wù)器下載并安裝iOS應(yīng)用。簡(jiǎn)單地說(shuō),就是用戶只需要在Safari中點(diǎn)開(kāi)一條鏈接,就能直接在主界面中安裝App。
實(shí)現(xiàn)原理
OTA方式安裝,是通過(guò)Safari解析鏈接中的“itms-services://”來(lái)實(shí)現(xiàn)的。
例如:
Iphone Download
Safari會(huì)去讀取installIPA.plist中的信息,如:iOS應(yīng)用的名稱、版本、安裝地址等。
實(shí)現(xiàn)方法
- 通過(guò)企業(yè)證書發(fā)布
- 通過(guò)個(gè)人證書發(fā)布(Ad_hoc)
- 直接安裝在越獄機(jī)器上
這里我們只討論大家最常見(jiàn)的,用個(gè)人證書發(fā)布內(nèi)測(cè)版。
實(shí)現(xiàn)步驟
|
1. 用Xcode打包release版本 2. 搭建本地Web服務(wù)器 3. 開(kāi)啟HTTPS 4. 編寫好對(duì)應(yīng)的.plist文件 5. 上傳ipa、.plist、ca證書到Web服務(wù)器,配置好index.html 6. 在手機(jī)上用Safari打開(kāi)鏈接,完成下載 |
是不是很簡(jiǎn)單?OK, Let’s Start it!
Xcode打包
首先我們選擇好打包的證書,因?yàn)槭莾?nèi)測(cè)包,所以我們選擇Ad_hoc證書。
選好證書后,輸出設(shè)備我們選擇iOS Device,然后在Product選項(xiàng)中,選擇Archive
Xcode會(huì)出現(xiàn)一個(gè)信息框,我們選擇Export,然后在彈出框中選擇第二項(xiàng),點(diǎn)擊Next
這時(shí)會(huì)彈出證書選擇框,我們需要選擇Ad_hoc證書,點(diǎn)擊Choose
Xcode打包好后,會(huì)讓我們選擇保持路徑。這樣我們的iOS內(nèi)測(cè)包就已經(jīng)打包完成了。
搭建Web服務(wù)器
因?yàn)楸疚闹饕墙榻B怎么實(shí)現(xiàn)OTA的安裝,所以服務(wù)器搭建部分只做基本的指導(dǎo)(不過(guò)會(huì)詳細(xì)說(shuō)明怎么配置HTTPS),詳細(xì)搭建方法還請(qǐng)大家自行Google^_^。
好吧,iOS開(kāi)發(fā)都是用的Mac OS X,而Mac OS X中正好自帶了Apache服務(wù),所以這里我們只需要簡(jiǎn)單的在終端中敲擊一行命令,就能啟動(dòng)Web服務(wù)了。
sudo apachectl start
這時(shí)我們?cè)跒g覽器中輸入“http://127.0.0.1/“,如果出現(xiàn)It Works!,那么恭喜你Web服務(wù)器啟動(dòng)成功。
Web文件目錄是:“/Library/WebServer/Documents/”, 系統(tǒng)級(jí)根目錄默認(rèn)沒(méi)有開(kāi)啟目錄列表, 開(kāi)啟方法:編輯 “/etc/apache2/httpd.conf “文件。 搜索找到,按下列圖中紅框標(biāo)示處修改。DoucumentRoot可以改為任何路徑。
httpd.conf文件
開(kāi)啟HTTPS服務(wù)
因?yàn)閕OS7.1以后,Apple不再支持HTTP方式的OTA,所以我們需要為Apache開(kāi)啟HTTPS。
OpenSSL自制證書
開(kāi)啟HTTPS的第一步,就是需要先生成ssl證書。
- 生成服務(wù)器的私鑰
mkdir /private/etc/apache2/ssl
cd /private/etc/apache2/ssl
sudo openssl genrsa -out server.key 1024 - 生成簽署申請(qǐng)(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這個(gè)文件,去掉下面三行前面的 ‘#’
|
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這個(gè)文件,去掉下面兩行前面的 ‘#’
|
SSLCertificateFile "/private/etc/apache2/ssl/server.crt" SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key" |
編輯/private/etc/apache2/extra/httpd-vhosts.conf這個(gè)文件,在‘NameVirtualHost*:80′后面添加:
在文件末尾添加:
|
<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> |
檢查配置,如果有問(wèn)題按照提示開(kāi)啟相應(yīng)服務(wù)即可。
sudo apachectl configtest
沒(méi)問(wèn)題后,重啟服務(wù)
sudo apachectl restart
這樣就可以用https訪問(wèn)我們的本地服務(wù)器了。
編寫plist文件
plist文件編寫很簡(jiǎn)單,網(wǎng)上有很多模板,我這里為大家提供常用的信息,里面很多地方可以更改為自己所需要的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
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>版本號(hào)</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./TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www./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" href="http://192.168.10.193/ca.crt">ssl 證書安裝</a> <h1/> </body> </html> |
如果一切OK的話,我們?cè)跒g覽器打開(kāi)本地服務(wù)器地址,會(huì)出現(xiàn)如下內(nèi)容:
OTA安裝
是的,到了最激動(dòng)人心的時(shí)候了,我們用iphone打開(kāi)瀏覽器,輸入本地服務(wù)器的地址,首先選擇ssl證書安裝, 然后再點(diǎn)擊Iphone Download,哈哈,是不是已經(jīng)彈出對(duì)話框詢問(wèn)需要安裝了??
沒(méi)錯(cuò),這時(shí)點(diǎn)擊安裝即可快速地實(shí)現(xiàn)OTA下安裝App了!
|