iOS通過OTA方式分發(fā)應(yīng)用的實(shí)現(xiàn)

本文轉(zhuǎn)載自

鏈接 http://blog.csdn.net/close_marty/article/details/38441903

作者 close_marty

最近設(shè)計(jì)的同事找到我毅舆,說有沒有什么方法可以很方便的獲取和安裝我們應(yīng)用最新的測試包,然后還給我看了別人通過微信朋友圈分享測試包的做法御滩。好吧箕肃,雖然我手頭沒有外網(wǎng)服務(wù)器盅安,那我就在內(nèi)網(wǎng)搭一個(gè)吧,然后先在內(nèi)網(wǎng)實(shí)現(xiàn)通過wifi直接安裝測試包。

首先大概說下OTA吧畅姊,OTA就是over the air反粥,是一種無線發(fā)布方式卢肃,它可以實(shí)現(xiàn)app的在線安裝疲迂,不再需要數(shù)據(jù)線。目前國內(nèi)有不少團(tuán)隊(duì)通過使用企業(yè)證書+OTA的方式來發(fā)布自己的應(yīng)用莫湘,所以你會看到有的網(wǎng)頁上有某個(gè)應(yīng)用的廣告尤蒿,你點(diǎn)擊之后就直接提示你是否安裝這個(gè)app,一旦你確定幅垮,它就直接在你的手機(jī)上安裝了腰池,這中間完全沒有經(jīng)過appstore的參與和審核。這也是實(shí)現(xiàn)在不越獄的手機(jī)上安裝未經(jīng)審核app的方法忙芒。不過我們自己的測試包都是使用開發(fā)者證書來打包的示弓,所以只有指定的設(shè)備才可以安裝。

要實(shí)現(xiàn)OTA呵萨,需要準(zhǔn)備下面這三個(gè)文件奏属,然后把他們放到自己的web服務(wù)器上,通過訪問你的web頁面來實(shí)現(xiàn)在線安裝甘桑。

  1. *.ipa文件拍皮,也就是你的安裝包,可以是開發(fā)者證書簽名的跑杭,也可以是企業(yè)證書铆帽,看你的用途和目的

  2. *.plist文件,這個(gè)描述文件主要是用來說明應(yīng)用的安裝信息的德谅,下面一個(gè)簡單的sample

<?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://${YOUR_DOMAIN_DOTCOM}/${PATH_TO_BETA_IF_ANY}/${APPLICATION_NAME}.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>${BUNDLE_IDENTIFIER}</string>
<key>bundle-version</key>
<string>${APPLICATION_VERSION}</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>${DISPLAY_NAME}</string>
</dict>
</dict>
</array>
</dict>
</plist>

其中指定了ipa文件的具體存放路徑爹橱。這個(gè)plist可以在打包的過程中自動(dòng)生成,具體方法可以參考這里窄做,我不再贅述
http://aaronparecki.com/articles/2011/01/21/1/how-to-distribute-your-iOS-apps-over-the-air

也可以通過正常流程打包完ipa包之后愧驱,根據(jù)ipa文件來生成plist文件,可參考第三方的工具

https://github.com/sveinungkb/ios-ota-buddy

還可以自己手動(dòng)去編寫這么一個(gè)文件或者自己寫個(gè)腳本去生成椭盏,只要包含這些主要信息即可组砚。

  1. 一個(gè)或簡單或復(fù)雜的發(fā)布頁面,目的是提供一個(gè)itms-services協(xié)議的鏈接掏颊,讓用戶訪問這個(gè)鏈接即可實(shí)現(xiàn)在線安裝糟红。一個(gè)最簡單的html頁面就是下面這樣。

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

整個(gè)OTA的核心就是蘋果的itms-services協(xié)議乌叶, safari通過解析類似于itms-services://?action=download-manifest&url=https://xxx.xxx.xxx/xxxx.plist 這樣的一個(gè)鏈接來實(shí)現(xiàn)在線安裝盆偿。url就是你的*.plist文件所在的地址,在iOS7.1以前准浴,這個(gè)url是沒有限制的事扭,在7.1之后,蘋果做了修改乐横,要求這個(gè)url必須是可信任的https鏈接求橄。其他地方的鏈接并沒有要求今野。

對于https鏈接,目前主流的有三種解決方案罐农。

方案1:交給公司解決腥泥,讓公司提供一個(gè)可信的https連接,這個(gè)最直接啃匿。
方案2:采用第三方的網(wǎng)站提供的https連接,比較常見的就是把plist上傳到dropbox蛆楞,然后分享出去溯乒,它的外鏈就是https的(不過dropbox已經(jīng)被墻了,so...),國內(nèi)網(wǎng)盤的外鏈貌似都是http的豹爹,基本可以忽略
方案3:使用自建的https連接
我們是個(gè)小團(tuán)隊(duì)裆悄,采用的方案3,但是這里有個(gè)問題臂聋,https是需要有證書的光稼,而可信的證書必須是由知名的CA所頒發(fā),當(dāng)然孩等,向這些知名的CA申請證書是需要money的艾君。由于我使用OTA的目的只是在團(tuán)隊(duì)內(nèi)部分發(fā)一下測試包而已,所以我們采用自簽名的證書來加密https肄方。

自簽名分為兩個(gè)步驟冰垄,首先生成自己的CA根證書,再用這個(gè)根證書去簽名我們服務(wù)器所使用的證書权她。

  1. 生成自己的根證書
    生成自己的密鑰對

openssl genrsa -out ca.key 1024

生成證書請求文件虹茶,并使剛剛的key來加密CA根證書

openssl req -new -x509 -days 365 -key ca.key -out ca.crt
其中-x509選項(xiàng)表示生成自簽名的證書,生成證書會要求填一系列的東西隅要,此時(shí)可以任意填寫蝴罪,也可以直接回車,Common Name (e.g. server FQDN or YOUR name) []:步清,這一項(xiàng)建議填寫一個(gè)便于識別的名字要门,比如可以是你的名字或者代號。
完成到這里你就已經(jīng)生成了自己的根證書了尼啡,你也和那些知名CA機(jī)構(gòu)一樣暂衡,用根證書給別人的證書簽名啦。崖瞭。撒花狂巢。。书聚。不過由于你不知名唧领,沒有人會認(rèn)可你的證書藻雌,所以你簽名的所有證書都是不會被信任的。

  1. 生成服務(wù)器使用的證書斩个,并用自己的根證書簽名
    步驟基本同上:
    生成一個(gè)密鑰對

openssl genrsa -out server.key 1024
生成證書請求文件
openssl req -new -key server.key -out server.csr
這里又需要填寫之前的那一堆東西胯杭,值得注意的是,
Common Name (e.g. server FQDN or YOUR name) []:
這里一定要填寫你的https連接所對應(yīng)的域名或者是服務(wù)器Ip, 比如xxx.xxx.com或者是192.168.25.68這樣受啥。

接下來我們需要使用根證書對這個(gè)證書進(jìn)行簽名做个,但是在簽名之前,需要做一些準(zhǔn)備工作滚局, 我們需要構(gòu)建這樣一個(gè)目錄結(jié)構(gòu)居暖,在當(dāng)前目錄新建文件夾demoCA,
進(jìn)入demoCA藤肢,在demoCA下創(chuàng)建兩個(gè)文件index.txt和serial 太闺,以及文件夾newcerts,其中index.txt的內(nèi)容為空嘁圈,serial的內(nèi)容為01省骂。
完成之后,就可以開始簽名了

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
這條命令中涉及的所有文件都是在之前步驟中生成的最住,如果缺少了什么文件钞澳,最好回去檢查一下步驟是否有問題。
命令執(zhí)行后會要求確認(rèn)是否進(jìn)行簽名涨缚,確認(rèn)即可略贮。
到這里,證書的構(gòu)造已經(jīng)完成仗岖,最終的目錄結(jié)構(gòu)應(yīng)該是這個(gè)樣子

20140808182350924.jpeg
  1. 讓iOS設(shè)備信任你的根證書
    之前說過了逃延,自簽名的證書是不可信的,所以你需要讓通過OTA方式來安裝app的手機(jī)去信任你的證書轧拄。

方式1:把你的根證書文件揽祥,也就是ca.crt 放到web服務(wù)器的某個(gè)位置,然后iOS設(shè)備通過safari去訪問這個(gè)文件就會直接提示用戶安裝證書檩电,點(diǎn)擊安裝即可拄丰。(只能是safari,不能是其他瀏覽器)
方式2:通過email方式俐末,把ca.crt作為附件通過郵件發(fā)送到iOS設(shè)備上料按,然后也可以打開安裝
方式3:其他我不知道的方式,比如什么iPhone配置實(shí)用工具之類的卓箫,總之呢载矿,就是讓iOS設(shè)備去打開并安裝ca.crt這個(gè)文件。

我采用的方式1烹卒,我把ca.crt的url和itms-services鏈接一起放在一個(gè)簡單的發(fā)布頁面install.html里面的闷盔,然后把html的地址生成個(gè)了一個(gè)二維碼弯洗,發(fā)給大家。其他人掃描二維碼逢勾,訪問這個(gè)頁面牡整,然后點(diǎn)擊兩下,第一下安裝證書溺拱,第二下安裝app逃贝,就可以搞定了。

安裝之后迫摔,這個(gè)證書文件就會變?yōu)榭尚诺牧饲镉尽?梢栽趇OS設(shè)備上的通用-描述文件中查看這個(gè)證書的狀態(tài)攒菠。

  1. 修改itms-services協(xié)議中的url為https

比如itms-services://?action=download-manifest&url=https://172.16.8.53/OTA-Install/xxxxxxx..plist,當(dāng)然如果已經(jīng)是https的歉闰,那就不用改了辖众。
至于ipa文件是否使用https并不重要,蘋果只要求itms-services協(xié)議中的url字段使?用https和敬。

至此就可以在iOS7.1及以上的設(shè)備中通過OTA方式安裝了凹炸。

附1:
前面的 openssl req 和 openssl ca 命令,有可能需要增加一個(gè)config參數(shù)
-config ..\conf\openssl.cnf
不過我沒有加昼弟,所以默認(rèn)使用的
Using configuration from /System/Library/OpenSSL/openssl.cnf

附2:Apache服務(wù)器的openssl配置(mac OSX 環(huán)境)

  1. 確保 httpd.conf 中 LoadModule ssl_module 這項(xiàng)設(shè)置是有效的
  2. 在 httpd-ssl.conf 中啤它,確保下?面的配置有效,并且對應(yīng)的crt和key文件正確(這兩個(gè)文件就是我們之前自己生成的服務(wù)器使用的證書和密鑰)
    SSLCertificateFile "/private/etc/apache2/ssl/server.crt"
    SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
  3. 記得重啟服務(wù)器
  4. 檢查https是否生效可以訪問 https:localhost
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舱痘,一起剝皮案震驚了整個(gè)濱河市变骡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芭逝,老刑警劉巖塌碌,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旬盯,居然都是意外死亡台妆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門胖翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來接剩,“玉大人,你說我怎么就攤上這事萨咳“萌保” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵培他,是天一觀的道長桐汤。 經(jīng)常有香客問我而克,道長,這世上最難降的妖魔是什么怔毛? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任员萍,我火速辦了婚禮,結(jié)果婚禮上拣度,老公的妹妹穿的比我還像新娘碎绎。我一直安慰自己,他們只是感情好抗果,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布筋帖。 她就那樣靜靜地躺著,像睡著了一般冤馏。 火紅的嫁衣襯著肌膚如雪日麸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天逮光,我揣著相機(jī)與錄音代箭,去河邊找鬼。 笑死涕刚,一個(gè)胖子當(dāng)著我的面吹牛嗡综,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杜漠,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼极景,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驾茴?” 一聲冷哼從身側(cè)響起盼樟,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锈至,沒想到半個(gè)月后恤批,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裹赴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年喜庞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棋返。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡延都,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睛竣,到底是詐尸還是另有隱情晰房,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站殊者,受9級特大地震影響与境,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜猖吴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一摔刁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧海蔽,春花似錦共屈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幌衣,卻和暖如春矾削,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豁护。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工哼凯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人择镇。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像括改,于是被迫代替她去往敵國和親腻豌。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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

  • 證書的三個(gè)作用 加密通信和身份驗(yàn)證(驗(yàn)證對方確實(shí)是對方聲稱的對象)和數(shù)據(jù)完整性(無法被修改嘱能,修改了會被知) 證...
    SuperRoot閱讀 12,211評論 1 11
  • HTTPS介紹 超文本傳輸安全協(xié)議(英語:Hypertext Transfer Protocol Secure吝梅,縮...
    齊滇大圣閱讀 8,903評論 8 96
  • CA和證書安全協(xié)議(SSL/TLS)OpenSSH 一、CA和證書 (一) PKI(Public Key Infr...
    哈嘍別樣閱讀 1,383評論 0 0
  • 為推進(jìn)素質(zhì)教育炸茧,普及體育運(yùn)動(dòng)肪虎;增強(qiáng)學(xué)生體質(zhì)排嫌,豐富校園文化;提高運(yùn)動(dòng)能力右冻,提高運(yùn)動(dòng)興趣,提高集體凝聚力著拭。2017年...
    弘墻閱讀 598評論 0 1
  • 每天早晨纱扭,我都再一次提醒自己,生命短暫而美好儡遮,沒時(shí)間糾結(jié)乳蛾,沒時(shí)間計(jì)較。生活本來很不易,不必事事渴求別人的理解和認(rèn)同...
    1e5b698bde5e閱讀 131評論 0 0