公司的一个项目有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. 03关于C的数组指针

    一.数组与指针有什么关系 (1)地址 数组名就是一个地址,指向一个数组的开端. 从实验结果我们可以看出前三个地址都是一样的,都是数组的开始地址,而最后一个是数组的第二个元素,因为是整型数据,地址加4. ...

  2. STDOUT/STDERR重定向到ALOG中

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kangear/article/details/24534707      说下背景:如今众多Andr ...

  3. Ubuntu16.04 64位编译安装Hi3520D_SDK_V1.0.4.0

    1.复制uboot/tools/mkimage到环境变量路径 2.修改kernel/timeconst.pl,删除define 3.busybox makefile修改: /itc_work/hi35 ...

  4. 火狐浏览器firebug

    1. 近日,Firebug团队在官网贴出了停止继续开发.更新维护Firebug的通知,邀请大家使用Firefox内置工具DevTools.   来自官网截图 Firebug是Firefox旗下的一款扩 ...

  5. SelectDataTable

    项目地址 :  https://github.com/kelin-xycs/SelectDataTable SelectDataTable 一个 用 C# 实现的 用 Sql select DataT ...

  6. 我 支持 使用 async await

    这篇文章原来的 标题 是 <我 反对 使用 async await>, 但经过后来的一些研究, 发现 async await 是 良性 的, 所以 我把 标题 改成了 <我 支持 使 ...

  7. java编程调试技巧

    1 多线程调试 开发过多线程应用的朋友应该有体会,有些时候,为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下. 在IDE里断点停下来的时候,可以切换到另外的线程 ...

  8. MongoDB journal与oplog解惑

    journal journal 是 MongoDB 存储引擎层的概念,目前 MongoDB主要支持 mmapv1.wiredtiger.mongorocks 等存储引擎,都支持配置journal. M ...

  9. focus、input、keydown、keyup、change、blur方法的差异

    focus.input.keydown.keyup.change.blur方法的差异: https://blog.csdn.net/yiifaa/article/details/52372022 bl ...

  10. tcpdump过滤某个端口

    一般我们使用Tcpdump时都是使用: Java代码   tcpdump -i ethx      www.2cto.com   下面这条命令就是查看80端口的访问量,进行排序,取前20位    Ja ...