实现 iOS App 在线安装(局域网OTA)

因为数据线已经严重破损,动不动就会自动断开连接,而且一天到晚连着设备感觉它老是在边充电边放电。另外迭代测试的时候每次都要给测试发包,��忍受着那无下限的网速,所以就想做个 App 分发站点,直接在网页中点击安装,这样比较省事

在网上找了一些资料,但实际搭建的过程中还是遇到不少问题,所以自己整理了一篇笔记,内容分为3个部分

一、App 打包,生成 plist 文件

1. 打包

打包的方法就不再叙述了,最后输出 .ipa 包就可以
但想要要在线安装,还需要一个 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://172.17.22.124/test.ipa</string>
                </dict>
            </array>
        <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>com.sunli.test</string>
                <key>bundle-version</key>
                <string>1.1.0</string>
                <key>kind</key>
                <string>software</string>
                <key>releaseNotes</key>
                <string>1.1版本发布</string>
                <key>title</key>
                <string>testDemo</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

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.txtserial ,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

然后在文件末尾添加

<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 172.17.22.124
    DocumentRoot "/Library/WebServer/Documents/"
</VirtualHost>

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

输入以下内容

<html>
<body>
<a href="itms-services://?action=download-manifest&url=https://172.17.22.124/test.plist" class="app_link">click to install app</a>
<br><br>
<a title="iPhone" href="http://172.17.22.124/ca.crt">ssl install</a>
</body>
</html>

url中必须填写 https 开头的 ipa 包下载地址,然后下载前需要安装 ssl 证书,所以第二行附上 ca.crt 证书的下载地址

最后在 iphone 的 Safari 浏览器中输入地址 http://172.17.22.124/index.html 或者 https://172.17.22.124/index.html
先安装证书,再安装 app,大功告成!

参考资料:
//www.greatytc.com/p/35ca63ec0d8e
http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容