由於iOS13.1要安裝企業應用,url必須是https的,不能是http,這就要求我們的服務器要支持https:
itms-services://?action=download-manifest&url=https://example.com/manifest.plist
完成以下操作,即可通過自己的Mac筆記本構建局域網用於下載測試(同一個局域網或者VPN網絡下)
注意:正式打包出來的企業ipa包,萬萬不可放到第三方公網測試網站當成發布的服務器,比如:蒲公英,會導致蘋果封號。
實現(Mac):
1、支持https;
2、自建信任證書;
一、配置https
Mac OS X 自帶了Apache環境,啟動之后,相當於web服務器(外部可以訪問到,讀取plist文件和ipa包),可以通過在終端(terminal)輸入 httpd -v 來查看Apache的版本信息:
$ httpd -v Server version: Apache/2.4.41 (Unix) Server built: Feb 29 2020 02:40:57
啟動Apache
在終端輸入
sudo apachectl start
就可以啟動Apache。
啟動后,在瀏覽器中輸入 http://127.0.0.1或http://localhost 如果看到 It Works! 頁面,那就說明啟動成功了。
測試一下本地ip網絡https的鏈接狀態:
先查看本地網絡的ip地址,然后在瀏覽器打開
如果本地不支持https,那就需要配置了。
Apache 啟動成功后,站點的根目錄為系統級根目錄:
/Library/WebServer/Documents 停止Apache: sudo apachectl stop 重啟Apache: sudo apachectl restart
開始配置 SSL
1、編輯 /etc/apache2/httpd.conf 文件,刪除下列代碼前的注釋符號 #:
LoadModule ssl_module libexec/apache2/mod_ssl.so Include /private/etc/apache2/extra/httpd-ssl.conf
2、備份文件,只需要執行一次:
sudo cp httpd-ssl.conf httpd-ssl.conf.bak
如果操作出現錯誤,可以使用命令,恢復備份的 httpd-ssl.conf 文件:
sudo cp httpd-ssl.conf.bak httpd-ssl.conf.conf
編輯 /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.11 //一會創建證書需要用到,填寫本地網絡ip地址 #SSL Engine Switch: SSLEngine on #Server Certificate: //一會創建的證書的名字,填寫相應的名字即可 SSLCertificateFile "/etc/apache2/ssl/ca.crt" #Server Private Key: //一會創建的證書的名字,填寫相應的名字即可 SSLCertificateKeyFile "/etc/apache2/ssl/server.key" #SSL Engine Options: <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/Library/WebServer/CGI-Executables"> SSLOptions +StdEnvVars </Directory> </VirtualHost>
3、檢查配置文件並重啟 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
4、再次測試,顯示 Syntax OK:
sudo apachectl -t
Syntax OK
5、說明測試通過,重啟 Apache:
sudo apachectl restart
網頁出現It works!,說明https通過
二、生成 Apache 服務器 Https 服務用的自簽名證書
iOS7.1 以后, Apple 不再支持 HTTP 方式的 OTA ,所以需要為 Apache 開啟 HTTPS 服務,並利用 OpenSSL 制作自簽名證書。
證書創建完之后是這個樣子的:
創建證書的步驟:
1、生成服務器私鑰 server.key
sudo mkdir /private/etc/apache2/ssl cd /private/etc/apache2/ssl sudo openssl genrsa -out server.key 1024
2、生成簽署申請
sudo openssl req -new -key server.key -out server.csr
注意:需要完整填寫各項信息,注意Common Name必須是服務器 ip 或域名,其他信息可以隨意填寫。例如我需要把 ipa 安裝包放在 192.168.2.11 的內網服務器上,則Common Name就填寫 192.168.2.11 。如果這一步漏填信息,可能會導致最后生成的 ca 文件是空的。
3、生成 CA 私鑰ca.crt
sudo openssl req -new -x509 -days 365 -key server.key -out ca.crt
填寫信息和上面的填寫的一樣即可,注意Common Name必須填寫,這里還是填寫192.168.2.11即可。
4、創建文件和文件夾
在 ssl 目錄下創建 demoCA 文件夾,然后進入 demoCA ,創建一個 index.txt 和 serial文件,index.txt 為空, serial 內容為01,然后在 demoCA 中再創建一個空文件夾 newcerts
sudo mkdir demoCA && cd demoCA
sudo mkdir newcerts
sudo touch index.txt
sudo touch serial
使用 Xcode 或者 vim 編輯 serial 文件,第一行寫入 01 保存即可。
5、簽名生成server.crt
執行命令,返回到ssl文件夾下面
cd /private/etc/apache2/ssl
然后執行命令,用ca進行簽名生成server.crt
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
這一步可能會報如下錯誤
Using configuration from /private/etc/ssl/openssl.cnf variable lookup failed for ca::default_ca140736040362952: error:0E06D06C:configuration file routines:NCONF_get_string: no value:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/ libressl-22.50.2/libressl/crypto/conf/conf_lib.c:323:group=ca name=default_ca
這是由於/private/etc/ssl/文件夾下缺少 openssl.cnf 的問題,解決辦法是拷貝一份,輸入命令
cp /usr/local/etc/openssl/openssl.cnf /private/etc/ssl/openssl.cnf
使用Xcode或者vim修改/private/etc/ssl/openssl.cnf文件,這里使用vim直接修改
sudo vim /private/etc/ssl/openssl.cnf
dir = ./demoCA # Where everything is kept 修改為當前你的demoCA路徑 dir = /private/etc/apache2/ssl/demoCA
6、修改完成后再執行命令
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
7、會提示有效期和生成證書,都輸入y即可。
Certificate is to be certified until Nov 10 06:39:36 2019 GMT (365 days) Sign the certificate? [y/n]:y (翻譯)證書有效期至11月10日06:39:36 2019 GMT(365天) 1 out of 1 certificate requests certified, commit? [y/n]y 簽署的證書嗎? (翻譯)1 / 1的證書請求被認證,提交?
8、此時我們看到 HTTPS 證書已經生成完成。
三、放置資源文件
進入web服務器:
cd /Library/WebServer/Documents
放置如下:
ipa:xcode打出來的包;
ca.crt:上面創建的自簽證書;
icon57:57*57尺寸的圖標;
icon512:512*512尺寸的圖標;
manifest.plist:xcode打出來的文件之一;
格式:
第一個url:http://192.168.2.11/web/App.ipa 必須對應web服務器里面ipa存放的路徑
檢測:在瀏覽器輸入,可下載ipa即為成功;
http://192.168.2.11/web/App.ipa
index.html:蘋果手機首次安裝ipa包,必須先下載安裝 ca.crt 證書,然后再點擊安裝 ipa。 url 中必須填寫 https 開頭的 plist 文件下載地址,plist 文件中對應 ipa 文件的下載地址。
<html> <head> <meta name="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h4>手機首次下載請先"點擊安裝SSL證書",並根據提示安裝信任證書</h4> 在 iOS 10.3 及更高版本中,手動安裝包含證書有效負載的描述文件時,這個證書不會自動受 SSL 信任。 當安裝通過電子郵件發送或從網站下載的描述文件時,您必須手動開啟受 SSL 信任。 要為這個證書開啟受 SSL 信任,請前往“設置”>“通用”>“關於本機”>“證書信任設置”。在“針對根證書啟用完全信任”下,開啟信任這個證書。 <a title="iPhone" href="http://192.168.2.11/web/ca.crt">?點擊安裝SSL證書?</a> <hr> <a href="itms-services://?action=download-manifest&url=https://192.168.2.11/web/manifest.plist" class="app_link">?點擊安裝版本?</a> <hr> </body> </html>
檢查:在瀏覽器輸入以下網址,看能否下載ca.crt和顯示manifest.plist內容,如果都可以,說明沒問題。
https://192.168.2.11/web/manifest.plist http://192.168.2.11/web/ca.crt
四、設置證書信任
如果下載 ipa 時出現無法連接到192.168.*.*的錯誤,則需要手動設置信任。
iOS7.0 以后必須使用 HTTPS 進行,iOS 10 之前的設備,直接安裝自簽名根證書后就可以安裝 iOS 應用,但是在 iOS 10.3 以上的設備上,安裝后還需要到“關於本機”那里手動開啟信任。