文档章节

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

周进
 周进
发布于 2016/02/25 09:39
字数 1324
阅读 1341
收藏 3

因为数据线已经严重破损,动不动就会自动断开连接,而且一天到晚连着设备感觉它老是在边充电边放电。另外迭代测试的时候每次都要给测试发包,忍受着那无下限的网速,所以就想做个 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.cr

创建 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

然后在文件末尾添加

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

去掉注释后,保存,重新检查配置,直到成功

重启 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,大功告成!

参考资料:

http://www.jianshu.com/p/35ca63ec0d8e

http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working








本文转载自:http://www.jianshu.com/p/0546968b2d91

周进
粉丝 16
博文 35
码字总数 5679
作品 0
成都
CTO(技术副总裁)
私信 提问
iOS实现OTA无线安装App

引用Apple说明: 您可以使用 Apple Developer Enterprise Program(Apple 开发者企> 业级计划)开发 iOS 和 macOS 应用,对于开发、测试应用以及将> > 其分发给用户,此计划提供了完整的流程...

LuisX
2018/08/29
0
0
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
苹果iOS APP超级签名技术原理分享

iOS APP超级签名的实现流程图 超级签名原理 简单来说,就是把添加苹果设备udid然后打包进行真机测试的过程(如下面真机测试教程),实现了自动化! 申请ad hoc证书打包iOS真机测试教程 优点:...

qtb999
08/20
2.3K
5
移动开发者的工具宝箱 | iOS 证书在线检测

作为一名开发者,灵活运用各种开发工具无疑能让开发效率大大提升,事半功倍。蒲公英作为各位开发者的坚实后盾,为大家准备了内容齐全的「工具箱」,移动应用开发者常用的工具都可以在这里快速...

蒲公英开发者服务平台
07/25
0
0
iOS 10 第八个开发者测试版、第七个公测版

苹果今天向开发者发布了 iOS 10 第八个开发者测试版以及第七个公测版,距离第七个测试版仅仅相隔四天的时间。苹果在今年6月举行的 WWDC 上发布了 iOS 10 测试版,目前,我们还不知道 iOS 10...

花仲马
2016/08/28
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
22分钟前
4
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
24分钟前
4
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部