公司的一个项目有Android和iOS的app,Android的下载和安装都很方便,不过iOS有些麻烦,因为项目本身有些限制,主要有以下一些障碍:
1.iOS的版本不是通过Appstore分发。
2.出于安全的考虑,Android和iOS的app只能通过vpn的方式来访问服务器,而手机通过vpn后是无法访问互联网的。因此无法访问互联网的相关HTTPS的服务,换句话说就是无法使用互联网的SSL证书的web服务。
3、iOS的版本大于7.1的,因此apple的itms-services协议必须实用HTTPS。

鉴于上面这些障碍,于是考虑在局域网搭建内部HTTPS的服务,通过OTA(Over-the-Air)方式来分发iOS的应用。

OTA

OTA即Over-the-Air,简单来说就是通过无线的方式发送指令给设备,具体针对iOS的设备,比如iphone 、ipad等,让开发者能够脱离Appstore,实现从自己的服务器下载并安装iOS应用。 用户只需要在iphone 或ipad的浏览器中点开一条链接,就能直接在主界面中安装App。整个分发的过程包括三部分:设备(iPhone,ipad),服务器(profile service,用来发送配置文件),验证服务器(包括CA和目录服务器)。

OTA分发的实现方式

针对iOS应用分发,需要在服务器里上包括三个文件,来实现OTA方式的分发

1.ipa文件,也就是应用安装包,可以是开发者证书签名的,也可以是企业证书。
2.plist文件,主要用来说明iOS应用的安装信息,主要的安装信息包括ipa文件的名称和存放路径。可以通过Xcode来创建plist文件,具体创建过程和plist文件这里就不赘述了。
3、一个提供itms-services协议链接的页面,同时该页面是通过HTTPS的方式访问。itms-services协议链接指向plist文件的路径,例如:

<a href="itms-services://?action=download-manifest&url=https://192.168.0.1/appipa.plist">Install App</a>

有了上面三个文件,apple设备就可以通过提供HTTPS服务器,读取plist文件的iOS安装的ipa文件的路径,从而实现下载和安装。

自建OpenSSL证书

由于提供HTTPS的服务只能在局域网内部,因此SSL证书不能使用相关CA机构颁发的,且证书不是基于域名,是基于ip地址的,因此只能采用自制证书。在这里我采用的是OpenSSL配置Tomcat 的SSL证书,OpenSSL使用是windows 版本的Apache服务器下的openssl.exe生成。 步骤如下(采用命令行的方式):

1.生成服务器的私钥
openssl genrsa -out server.key 1024

2.生成签署申请(Common Name必须为服务器的ip或域名)
openssl req -new -out server.csr -key server.key -config ..\conf\openssl.cnf


3.生成CA私钥
openssl genrsa -out ca.key 1024

4.用CA的私钥产生CA的自签署证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -config ..\conf\openssl.cnf

5.创建demoCA(bin目录下)
demoCA里面创建文件index.txt和serial,serial内容为01,index.txt为空,以及文件夹newcerts

6.生成网站服务器签署证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf

最后把生成好的server.crt 和server.key路径配置到Apache服务器的openssl.cnf配置文件里(具体配置见相关文档),重新启动Apache服务器即可。

SSLCertificateFile “/Apache22/conf/ssl2rver.crt”
SSLCertificateKeyFile “/Apache22/conf/ssl2rver.key”

客户端证书ca.crt可以通过下载或者email方式提供给iOS 设备安装,不过有一点要注意:由于这是自签名的SSL证书,是不可信任的,因此需要在iphone 或ipad 里手动设置信任证书。

安装完客户端证书后,就可以通过iphone 或ipad的浏览器来访问提供itms-services协议链接的页面,下载和安装iOS的应用了。

-----------------------------------------------------------

欢迎关注我的网站和微信公众号,文章会在我的网站和微信公众号上同步发布。

本文首发链接:https://www.watch-life.net/website-app/ota-ios-app.html

我的网站:守望轩

微信公众号名称:守望轩

微信公众号:iwatchlife

你也可以扫描或长按以下二维码

通过OTA的方式在局域网分发iOS应用的更多相关文章

  1. 如何利用Pre.im分发iOS测试包

    大众创新万众创业,在移动互联网的风口,移动APP开发与测试发展方兴未艾,受到了越来越多的重视.相较 iOS,Android 的开发环境更加开放.Android 开发者要测试应用时,只需发个 APK 安 ...

  2. 【转】在企业内部分发 iOS 应用程序

    (via:破船之家,原文:Provision iOS IPA App for In-House Enterprise Distribution)   在企业内部分发 iOS 应用程序非常复杂.经过努力 ...

  3. ITMS-SERVICES://方式安装IPA在IOS 7.1中的变化

    转:https://laoyur.com/?p=414 iOS7.1中,通过itms-services://方式安装ipa已经发生了改变,.plist文件必须是https://的,.ipa文件的链接则 ...

  4. 使用HTTPS网站搭建iOS应用内测网站(OTA分发iOS应用)

    为什么要搭建应用内测网站呢? 1.AppStore的审核速度比较慢,万一被拒,还得等,而且一旦发布,任何人都可以下载,而有些时候只有老板想知道最新的修改是否符合要求,万一不符合要求呢?又要修改了. 2 ...

  5. nrf52——DFU升级OTA升级方式详解(基于SDK开发例程)

    在我们开始前,默认你已经安装好了一些基础工具,如nrfutil,如果你没有安装过请根据官方中文博客去安装好这些基础工具,连接如下:Nordic nRF5 SDK开发环境搭建(nRF51/nRF52芯片 ...

  6. 输出流格式化(以操纵子方式格式化,以ios类成员函数方式格式化)

    一.以操纵子方式格式化 数据输入输出的格式控制使用系统头文件<iomanip>中提供的操纵符.把它们作为插入操作符<<的输出对象即可.如setiosflags.setw.set ...

  7. 搭建Minisipserve服务器实现局域网内IOS客户端idoubs的通信

    idoubs是IOS设备开发的第一款全功能并开放源码的3GPP IMS客户端,它同时专为IOS平台开发设计的voIP测试版客户端,以doubango为框架,能实现当前最先进的多媒体功能,主要功能有:语 ...

  8. Unity 使用C/C++ 跨平台终极解决方式(PC,iOS,Android,以及支持C/C++的平台)

    PC的事实上根本不用说,毕竟C#和C++交互的文章已经够多了,当然我自觉得经过几次折腾后.差点儿全部游戏须要到的操作我都掌握了(各种传參方法,各种坑,不懂的能够留言问.尽管基本上没人看.哈哈) 废话不 ...

  9. IOS渠道追踪方式

    本文来自网易云社区 作者:马军 IOS,安卓渠道追踪的差异 Google Play国内不可用,国内的安卓 App 分发,都是依托几十个不同的应用市场或发行渠道,如百度.360.腾讯等互联网企业以及小米 ...

随机推荐

  1. A* 寻路学习

    启发式搜索:启发式搜索就是在状态空间中的搜索.对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无谓的搜索路径,提高了效率.在启发式搜索中,对位置的估价是十分重 ...

  2. DevExpress 中 设置 labelControl 的背景透明到图片的方法

    labelControl 中的 backColor 可以设置为: TransParent 当设置为: Transparent 的时候,labelControl 的背景依然为 主form的背景颜色 ,研 ...

  3. Nginx可以做什么?看完这篇你就懂了

    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流. Nginx能做什么 —— ...

  4. KiCad 的 Digikey 元件库

    KiCad 的 Digikey 元件库 KiCad 最初由法国人Jean-Pierre Charras于1992年推出,目前由 CERN(欧洲核子研究组织)接手开发. 而且现在有很多大公司的加入,比如 ...

  5. [转]kafka详解

    一.入门     1.简介     Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设 ...

  6. spring中ApplicationContextAware接口描述

    项目中使用了大量的工厂类,采用了简单工厂模式: 通过该工厂类可以获取指定的处理器bean,这些处理器bean我们是从spring容器中获取的,如何获取,是通过实现ApplicationContextA ...

  7. vue线上项目,优化前后对比

    优化前: dev初次时间:52s dev时间:5s~6s build时间:374s(6.2分钟) build后zip包大小: vue.vue-router 优化后: dev初次时间:49s.48s.5 ...

  8. python re正则模块

    re 正则表达式操作  本模块提供了类似于Perl的正则表达式匹配操作.要匹配的模式和字符串可以是Unicode字符串以及8位字符串. 正则表达式使用反斜杠字符('\')来表示特殊的形式或者来允许使用 ...

  9. Linux常用文本操作命令整理

    阅读目录 1.统计命令——wc 2.切分命令——cut 3.排序命令——sort 4.去重命令——uniq 5.查找命令——grep 6.替换/查找/删除命令——sed 7.强大的文本分析命令——aw ...

  10. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 解决办法

    启动mysql 报错: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/m ...