本文授權轉載:sunljz(簡書)
因為數據線已經嚴重破損,動不動就會自動斷開連接,而且一天到晚連著設備感覺它老是在邊充電邊放電。另外迭代測試的時候每次都要給測試發包,忍受著那無下限的網速,所以就想做個 App 分發站點,直接在網頁中點擊安裝,這樣比較省事
在網上找了一些資料,但實際搭建的過程中還是遇到不少問題,所以自己整理了一篇筆記,內容分為3個部分
一、App 打包,生成 plist 文件
1. 打包
打包的方法就不再敘述了,最後輸出 .ipa 包就可以
但想要要在線安裝,還需要一個 plist 文件
plist 文件的模板如下:
itemsassetskindsoftware-packageurlhttp://172.17.22.124/test.ipametadatabundle-identifiercom.sunli.testbundle-version1.1.0kindsoftwarereleaseNotes1.1版本發布titletestDemo
url 中需要填寫你的 ipa 包下載地址
bundle-identifier 填寫你打包時的 bundle id
bundle-version 版本號
reseaseNotes 發布信息
title app名稱,下載時會彈出安裝提示,提示內容包含 title
特別說明:
在線安裝的前提是你的開發者證書已經對 iOS 設備授權,這裡不涉及繞過蘋果認證的內容
二、啟動 apache 服務,配置 Https
1. 啟動 Apache
Mac OS X 自帶了 Apache 服務,我們只需要啟動它就可以了
在終端中輸入
sudo apachectl start
然後在浏覽器中嘗試輸入 http://127.0.0.1 , 如果出現 It Works!那麼就是啟動成功
站點的默認目錄是 /Library/WebServer/Documents/
2. 開啟 Https 服務
因為 iOS7.1 以後, Apple 不再支持 HTTP 方式的 OTA ,所以需要為 Apache 開啟 HTTPS 服務
①. 制作 OpenSSL 證書
生成服務器私鑰
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 文件是空的
生成 CA 私鑰
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt
創建 demoCA
在 ssl 目錄下創建 demoCA 文件夾,然後進入 demoCA ,創建一個 index.txt 和 serial ,index.txt 為空, serial 內容為01,然後再創建一個空文件夾 newcerts
然後執行命令
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
②. 配置 SSL 服務
編輯 httpd.conf 文件
sudo vim /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
注意:如果你的 httpd.conf 中缺少了某行,你可以自行添加進去即可。(我的 httpd.conf 中就沒有後面兩行,自己加上去的)
編輯 httpd-ssl.conf 文件
sudo vim /private/etc/apache2/extra/httpd-ssl.conf
把以下兩行代碼的注釋去掉
SSLCertificateFile "/private/etc/apache2/server.crt" SSLCertificateKeyFile "/private/etc/apache2/server.key"
全文搜索是要注意,可能它的路徑和我貼的不一致
然後修改路徑,改成你的證書文件路徑
SSLCertificateFile "/private/etc/apache2/ssl/server.crt" SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
編輯 httpd-vhosts.conf 文件
sudo vim /private/etc/apache2/extra/httpd-vhosts.conf
在 NameVirtualHost *:80 後面添加
NameVirtualHost *: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 172.17.22.124 DocumentRoot "/Library/WebServer/Documents/"
ServerName 填寫你的 ip
DocumentRoot 填寫你的站點路徑
檢查 apachectl 配置
sudo apachectl configtest
如果它提示:Syntax OK ,那就完成90%了,如果它提示有錯,那就要根據錯誤提示自行解決了
我在這個環節遇到了一個錯誤
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).
解決方案是參考這篇文章 http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working
sudo vim /private/etc/apache2/httpd.conf
然後把以下代碼的注釋去掉 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
但我的配置文件中,路徑跟上述的不一致,我的是下面這行
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
去掉注釋後,保存,重新檢查配置,直到成功
重啟 Apache 服務
sudo apachectl restart
這樣就可以用 https 訪問本地服務器了
三、建立在線安裝服務
跳轉到你的站點目錄,我是 /Library/WebServer/Documents/
cd /Library/WebServer/Documents/
然後把 plist 文件,ipa 包,還有前面生成在 ssl 目錄中的 ca.crt 文件都拖到站點目錄中
然後新建網頁
sudo vim index.html
輸入以下內容
click to install appssl install
url中必須填寫 https 開頭的 ipa 包下載地址,然後下載前需要安裝 ssl 證書,所以第二行附上 ca.crt 證書的下載地址
最後在 iphone 的 Safari 浏覽器中輸入地址 http://172.17.22.124/index.html 或者 https://172.17.22.124/index.html
先安裝證書,再安裝 app,大功告成!
參考資料:
http://www.jianshu.com/p/35ca63ec0d8e
http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working