iOS OTA 環境部署

一、Mac OS X 啟用 web 服務器

Mac OS X 自帶了Apache環境,我們只需要啟動它就行了,可以通過在終端(terminal)輸入 httpd -v 來查看Apache的版本信息:

$ httpd -v
Server version: Apache/2.4.18 (Unix)
Server built:   Feb 20 2016 20:03:19

啟動Apache

在終端輸入 sudo apachectl start 就可以啟動Apache。

啟動后,在瀏覽器中輸入 http://127.0.0.1http://localhost 如果看到 It Works! 頁面:

itworks.png

Apache 就啟動成功了,站點的根目錄為系統級根目錄:

/Library/WebServer/Documents

停止Apache:

sudo apachectl stop

重啟Apache:

sudo apachectl restart

二、開啟 HTTPS 服務

iOS 7.1 以上的設備部署OTA環境必須使用HTTPS,可以配置Apache開啟HTTPS服務。

創建自簽名證書

  1. 首先創建一個ssl目錄用來存放證書:

     $ cd /etc/apache2/
     $ sudo mkdir ssl
     $ cd ssl
    
  2. 創建主機密鑰:

     $ sudo ssh-keygen -f 192.168.3.112.key
     Generating public/private rsa key pair.
     Enter passphrase (empty for no passphrase): 
     Enter same passphrase again: 
     Your identification has been saved in   192.168.3.112.key.
     Your public key has been saved in 192.168.3.112.key.pub.
     The key fingerprint is:
     SHA256:bNX90ww2g2GCh38Q/h68JnazkZYtnbkMEb1G5E51QWw root@XXdeiMac.local
     The key's randomart image is:
     +---[RSA 2048]----+
     |         oo.o +o+|
     |        o.o+ B E.|
     |         oo.+ %  |
     |       . ..o.* B.|
     |        S  .= +.+|
     |       .   . X o.|
     |          o & =  |
     |         . = B . |
     |            . o  |
     +----[SHA256]-----+
     $
    

    執行 sudo ssh-keygen -f 192.168.2.112.key 命令,會被要求提供一個密碼用于主機密鑰,可以選擇任何的密碼或直接留空。其中192.168.2.112是指Mac的內網地址,下同。

    也可以使用下面的命令創建密鑰:

     $ sudo openssl genrsa -out 192.168.2.112.key 2048
     Generating RSA private key, 2048 bit long modulus
     ....+++
     ....+++
     e is 65537 (0x10001)
     $
    
  3. 創建簽署申請:

     $ sudo openssl req -new -key 192.168.2.112.key -out 192.168.2.112.csr
     You are about to be asked to enter information that will be incorporated
     into your certificate request.
     What you are about to enter is what is called a Distinguished Name or a DN.
     There are quite a few fields but you can leave some blank
     For some fields there will be a default value,
     If you enter '.', the field will be left blank.
     -----
     Country Name (2 letter code) [AU]:
     State or Province Name (full name) [Some-State]:
     Locality Name (eg, city) []:
     Organization Name (eg, company) [Internet Widgits Pty Ltd]:
     Organizational Unit Name (eg, section) []:
     Common Name (e.g. server FQDN or YOUR name) []:192.168.2.112
     Email Address []:
    
     Please enter the following 'extra' attributes
     to be sent with your certificate request
     A challenge password []:
     An optional company name []:
     $
    

執行 sudo openssl req -new -key 192.168.2.112.key -out 192.168.2.112.csr 命令后,系統會提示輸入各項信息,由于這是自簽名的證書,除了 Common Name (e.g. server FQDN or YOUR name) []: FQDN( fully qualified domain name)必須是服務器域名或 IP 外,其他都不重要,可以隨意填寫或一路回車。

  1. 創建SSL證書:

    在生產環境中,我們需要提交證書申請(CSR)文件給證書頒發機構,由證書頒發機構提供SSL證書。

     $ sudo openssl x509 -req -days 365 -in 192.168.2.112.csr -signkey 192.168.2.112.key -out 192.168.2.112.crt
     Signature ok
     subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=192.168.2.112
     Getting Private key
     $
    

    我們也可以直接通過以下的命令創建證書:

     $ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 192.168.2.112.key -out 192.168.2.112.crt
    
  2. 創建NOPASS密鑰:

     $ sudo openssl rsa -in 192.168.2.112.key -out 192.168.2.112.nopass.key
    

    到目前為止SSL目錄下已經創建了下面一些文件,這些文件將在后面被用到:

     $ ls -l
     -rw-r--r--  1 root  wheel  1180 10 22 13:08 192.168.2.112.crt
     -rw-r--r--  1 root  wheel   993 10 22 11:58 192.168.2.112.csr
     -rw-------  1 root  wheel  1679 10 22 11:44 192.168.2.112.key
     -rw-r--r--  1 root  wheel   408 10 22 11:44 192.168.2.112.key.pub
     -rw-r--r--  1 root  wheel  1679 10 22 13:19 192.168.2.112.nopass.key
    

配置 SSL

  1. 編輯 /etc/apache2/httpd.conf 文件,刪除下列代碼前的注釋符號 #:

     LoadModule ssl_module libexec/apache2/mod_ssl.so
     Include /private/etc/apache2/extra/httpd-ssl.conf
    
  2. 編輯 /etc/apache2/extra/httpd-ssl.conf 文件,添加 <VirtualHost>httpd-ssl.conf 中已經有一條 <VirtualHost> 記錄,我們將其注釋掉,新建一條:

     <VirtualHost *:443>
     #General setup for the virtual host
     DocumentRoot "/Library/WebServer/Documents"
     ServerName 192.168.2.112
    
     #SSL Engine Switch:
     SSLEngine on
    
     #Server Certificate:
     SSLCertificateFile "/etc/apache2/ssl/192.168.2.112.crt"
    
     #Server Private Key:
     SSLCertificateKeyFile "/etc/apache2/ssl/192.168.2.112.key"
    
     #SSL Engine Options:
     <FilesMatch "\.(cgi|shtml|phtml|php)$">
         SSLOptions +StdEnvVars
     </FilesMatch>
     <Directory "/Library/WebServer/CGI-Executables">
         SSLOptions +StdEnvVars
     </Directory>
     </VirtualHost>
    

檢查配置文件并重啟 Apache

命令行輸入 $ sudo apachectl -t,可能會提示:

AH00526: Syntax error on line 92 of /private/etc/apache2/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

根據提示,編輯 /etc/apache2/httpd.conf 文件,刪除下列這些代碼前的注釋符號 #

LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so

再次測試,顯示 Syntax OK:

$ sudo apachectl -t
Syntax OK

說明測試通過,重啟 Apache:

$ sudo apachectl restart

此時,就可以使用 HTTPS 訪問本地服務了,在瀏覽器中輸入 https://192.168.2.112/ 。

三、使用企業級證書打包生成ipa及plist文件:

打包具體步驟這里就不詳述了,主要說一點,打包最后一步中,填寫如下manifet.plist文件:

manifest.png

其中,各項都必須填寫,URL是指相應文件在web服務器中的URL,比如ipa文件,如果直接放在服務器主目錄下,則App URL為 https://192.168.2.112/TESTAPP.ipa

各項都填寫好,Export ipa成功后,需要將 ipa、兩個image文件以及manifest.plist文件放到剛剛填寫的URL對應的服務器目錄下。

四、為web服務器生成首頁文件:index.html :

  1. 創建一個如下內容的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.3.112/manifest.plist">點擊安裝</a>
    <h1/>
    <a title="iPhone" >ssl 證書安裝</a>
    <h1/>
    </body>
    </html>
    

    其中,https://192.168.3.112/manifest.plist指向打包生成的plist文件,http://192.168.3.112/192.168.3.112.crt指向服務器中的CA證書,也就是上述生成crt證書,因此,需要將上述生成的crt證書copy到web服務器目錄下。

  2. 將index.html放到web服務器主目錄下。

  3. 為了使web服務器能夠正常的傳輸plist及ipa文件,需要配置 Web 服務器,設定服務器 MIME 類型,即編輯/etc/apache2/mime.types文件,添加如下兩種類型:

     application/octet-stream ipa
     text/xml plist
    
  4. 打開iPhone或者iPad中的瀏覽器,輸入web服務器地址:https://192.168.2.112,如果出現如下內容,說明服務器已搭建成功:

home.png

先點擊ssl安裝證書安裝相應的CA證書,然后在點擊點擊安裝進行app安裝。

五、安裝過程中可能遇到的問題及解決方案:

  1. 顯示下載失敗:

    官方文檔中指出三種原因:

    1)請確定應用已正確進行簽名。測試方法是使用 Apple Configurator 2 將它安裝到設備上,然后查看是否發生錯誤。

    2)請確定清單文件的鏈接是否正確,清單文件是否可供網絡用戶訪問。

    3)請確定 .ipa 文件(在清單文件中)的 URL 是否正確,并且該 .ipa 文件是否可供網絡用戶通過 HTTPS 訪問。

  2. 無法連接到“192.168.3.112”:

    1)是否先下載了CA證書

    2)CA證書中的服務器與
    <a href="itms-services://?action=download-manifest&url=https://192.168.3.112/manifest.plist">Install App</a>中的url是否匹配,因為點擊下載時,iOS會使用下載下來的CA證書進行驗證,只有驗證通過才能進行下載安裝。比如我就出現這個問題,CA證書中服務器是自己定義的域名,而manifest中的url用的是IP地址。

  3. 無法下載應用程序 此時無法安裝“XXX”:

    1)我出現這個問題的原因是,沒有提供Xcode打包時,manifest.plist中指定的兩個image,將兩個相應的image放到web服務器中后就可以下載安裝了。

參考文章:
http://help.apple.com/deployment/ios/#/apda0e3426d7
http://www.lxweimin.com/p/35ca63ec0d8e
http://www.lxweimin.com/p/d006a34a343f

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容