实现 iOS App 在线安装(局域网OTA)
2016-05-31 10:10
671 查看
本文授权转载:sunljz(简书)
因为数据线已经严重破损,动不动就会自动断开连接,而且一天到晚连着设备感觉它老是在边充电边放电。另外迭代测试的时候每次都要给测试发包,忍受着那无下限的网速,所以就想做个 App 分发站点,直接在网页中点击安装,这样比较省事
在网上找了一些资料,但实际搭建的过程中还是遇到不少问题,所以自己整理了一篇笔记,内容分为3个部分
一、App 打包,生成 plist 文件
1. 打包
打包的方法就不再叙述了,最后输出 .ipa 包就可以
但想要要在线安装,还需要一个 plist 文件
plist 文件的模板如下:
itemsassetskindsoftware-packageurlhttp://172.17.22.124/test.ipametadatabundle-identifiercom.sunli.testbundle-version1.1.0kindsoftwarereleaseNotes1.1版本发布titletestDemourl 中需要填写你的 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 installurl中必须填写 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
相关文章推荐
- IOS - IOS之同步请求、异步请求、GET请求、POST请求
- iOS性能优化之TimeProfiler
- IOS - DatePicker的使用
- iOS避免出现多控件同时点击的问题
- SMBIOS介绍(3):实现
- SMBIOS介绍(2):结构表
- SMBIOS介绍(1):概述
- iOS 【iOS iPhone屏幕尺寸、分辨率及屏幕适配】
- e项目总结一活动悬浮框的实现
- iOS通讯录整合,兼容iOS789写法,附demo
- 【代码笔记】iOS-书架页面
- 【代码笔记】iOS-书架页面
- [iOS]Core Data浅析(一)
- IOS开发:一些零碎知识
- iOS编程(1)TabBarController
- iOS 源代码分析——Alamofire
- iOS存储数据的几种方式
- iOS gif 图片播放实现方法 (image 扩展方案)
- [iOS]深入理解GCD
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密