一步一步實現無線安裝 iOS 應用(內網 OTA)

原文地址:https://www.jianshu.com/p/35ca63ec0d8e

 

什麼是OTA?


OTA即Over-the-Air,是Apple在 iOS4 中新加的一項技術,目的是讓開發者能夠脫離Appstore,實現從自己的服務器下載並安裝iOS應用。簡單地說,就是用戶只需要在Safari中點開一條鏈接,就能直接在主界面中安裝App。

實現原理


OTA方式安裝,是通過Safari解析鏈接中的"itms-services://"來實現的。

例如:
<a title="iPhone" href="itms-services://?action=download-manifest&url=https://192.168.10.193/installIPA.plist"> Iphone Download</a>

Safari會去讀取installIPA.plist中的信息,如:iOS應用的名稱、版本、安裝地址等。

實現方法


  1. 通過企業證書發佈
  2. 通過個人證書發佈(Ad_hoc)
  3. 直接安裝在越獄機器上

這裏我們只討論大家最常見的,用個人證書發佈內測版。

實現步驟


1. 用Xcode打包release版本
2. 搭建本地Web服務器
3. 開啓HTTPS
4. 編寫好對應的.plist文件
5. 上傳ipa、.plist、ca證書到Web服務器,配置好index.html
6. 在手機上用Safari打開鏈接,完成下載

是不是很簡單?OK, Let's Start it!

Xcode打包


首先我們選擇好打包的證書,因爲是內測包,所以我們選擇Ad_hoc證書。

 

選好證書後,輸出設備我們選擇iOS Device,然後在Product選項中,選擇Archive

Xcode會出現一個信息框,我們選擇Export,然後在彈出框中選擇第二項,點擊Next

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

Xcode打包好後,會讓我們選擇保持路徑。這樣我們的iOS內測包就已經打包完成了。

搭建Web服務器


因爲本文主要是介紹怎麼實現OTA的安裝,所以服務器搭建部分只做基本的指導(不過會詳細說明怎麼配置HTTPS),詳細搭建方法還請大家自行Google_。

好吧,iOS開發都是用的Mac OS X,而Mac OS X中正好自帶了Apache服務,所以這裏我們只需要簡單的在終端中敲擊一行命令,就能啓動Web服務了。

sudo apachectl start

這時我們在瀏覽器中輸入"http://127.0.0.1/",如果出現It Works!,那麼恭喜你Web服務器啓動成功。

Web文件目錄是:"/Library/WebServer/Documents/", 系統級根目錄默認沒有開啓目錄列表, 開啓方法:編輯 "/etc/apache2/httpd.conf "文件。 搜索找到<Directory "/Library/WebServer/Documents">,按下列圖中紅框標示處修改。DoucumentRoot可以改爲任何路徑。

httpd.conf文件

開啓HTTPS服務


因爲iOS7.1以後,Apple不再支持HTTP方式的OTA,所以我們需要爲Apache開啓HTTPS。

OpenSSL自制證書

開啓HTTPS的第一步,就是需要先生成ssl證書。

  • 生成服務器的私鑰
    mkdir /private/etc/apache2/ssl cd /private/etc/apache2/ssl sudo openssl genrsa -out server.key 1024

  • 生成簽署申請(Common Name必須爲服務器的ip或域名)
    sudo openssl req -new -key server.key -out server.csr

  • 生成CA私鑰
    sudo openssl genrsa -out ca.key 1024

  • 用CA的私鑰產生CA的自簽署證書
    sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt

  • 創建demoCA
    demoCA裏面創建文件index.txt和serial,serial內容爲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配置到服務器上,我們存放的位置是"/private/etc/apache2/ssl/server.crt","/private/etc/apache2/ssl/server.key"ca.crt放到文件根目錄中。

配置Apache的SSL服務

仍然是編輯/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>

檢查配置,如果有問題按照提示開啓相應服務即可。

sudo apachectl configtest

沒問題後,重啓服務

sudo apachectl restart

這樣就可以用https訪問我們的本地服務器了。

編寫plist文件


plist文件編寫很簡單,網上有很多模板,我這裏爲大家提供常用的信息,裏面很多地方可以更改爲自己所需要的。

plist文件內容如下:
<?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服務器的文件目錄下,然後修改index.html中的內容。
(index.html內容):

<!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>應用名字</title>
</head>
<body>
<h1 style="font-size:40pt">iOS應用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的話,我們在瀏覽器打開本地服務器地址,會出現如下內容:

OTA安裝


是的,到了最激動人心的時候了,我們用iphone打開瀏覽器,輸入本地服務器的地址,首先選擇ssl證書安裝, 然後再點擊Iphone Download,哈哈,是不是已經彈出對話框詢問需要安裝了??

沒錯,這時點擊安裝即可快速地實現OTA下安裝App了!



作者:east520
鏈接:https://www.jianshu.com/p/35ca63ec0d8e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章