iOS客户端的在线安装和更新—针对ADHoc证书

这篇文章纯给自己留个备份,所以对AdHoc证书内部分发和对iOS客户端开发不了解的请直接无视。

一般在iOS游戏或应用开发过程中,正式发布到App Store之前,都需要内部的测试,客户端的安装是个不大不小的问题。苹果提供了AdHoc的证书(普通版可以装100台设备,企业版无限),登记设备号 的即可通过iTunes或者无线网络安装使用AdHoc证书的App。具体不多赘述。

参考资料:
http://www.alexcurylo.com/blog/2010/08/27/wireless-ad-hoc-distribution/http://www.hanchorllc.com/2010/08/24/introducing-ios-beta-builder/

之前有用过一款产品叫HockeyApp(http://hockeyapp.net/),帮助实现内部的分发和安装,支持在线安装、检测更新,非常方便,简单分析了一下其原理:

1. 服务端提供API供客户端获取最近版本信息,参考如下: 


https://sdk.hockeyapp.net/api/2/apps/565b9262a3913bb1123c71ba6575e07b?format=json&udid=d2134514a9c016fbd016a0815f1b3f41d9f38c82&sdk=HockeySDK&sdk_version=2.5.4b1&uuid=87dcb0e9981f34f6ad998590087fc554&app_version=4.2.0.12100902&os=iOS&os_version=6.0&device=iPhone3%2C1&lang=zh-Hans&first_start_at=10%2F09%2F2012&usage_time=27300

 

[

{

"timestamp": 1349965666,

"shortversion": "4.2.1",

"mandatory": false,

"appsize": 115812817,

"title": "Metal Nation",

"version": "4.2.1.12101102",

"notes": "修复BUG"

},

{

"timestamp": 1349788437,

"shortversion": "4.2.0",

"mandatory": false,

"appsize": 115866480,

"title": "Metal Nation",

"version": "4.2.0.12100902",

"notes": "修复BUG"

},

{

"timestamp": 1349704154,

"shortversion": "4.2.0",

"mandatory": false,

"appsize": 115866530,

"title": "Metal Nation",

"version": "4.2.0.12100801",

"notes": "<p>解决无法访问的问题。</p>"

},

{

"timestamp": 1348125250,

"shortversion": "4.1.0",

"mandatory": true,

"appsize": 133946599,

"title": "Metal Nation",

"version": "4.1.0.12092001",

"notes": "<p>新版本更新主要内容:建造建筑变更为分阶层进行</p>"

},

{

"timestamp": 1345717028,

"shortversion": "3.9.4",

"mandatory": false,

"appsize": 90793414,

"title": "Metal Nation",

"version": "3.9.4.12082301",

"notes": "<p>3.9.4更新内容细节</p>"

},

{

"timestamp": 1345115309,

"shortversion": "3.9.3",

"mandatory": false,

"appsize": 69261482,

"title": "Metal Nation",

"version": "3.9.3.12081601",

"notes": "<p>本次更新主要内容</p>"

},

{

"timestamp": 1344597742,

"shortversion": "3.9.2",

"mandatory": false,

"appsize": 67664284,

"title": "Metal Nation",

"version": "3.9.2.12081002",

"notes": "<p>PA3.9.2更新说明</p>"

},

{

"timestamp": 1344332672,

"shortversion": "3.9.1",

"mandatory": false,

"appsize": 66645470,

"title": "Metal Nation",

"version": "3.9.1.12080701",

"notes": "<p>主要改进的数值</p>"

},

{

"timestamp": 1343992275,

"shortversion": "3.9.1",

"mandatory": false,

"appsize": 66622883,

"title": "Metal Nation",

"version": "3.9.1.12080302",

"notes": "<p>本次更新主要内容</p>"

},

{

"timestamp": 1343992251,

"shortversion": "3.9.1",

"mandatory": false,

"appsize": 66622828,

"title": "Metal Nation",

"version": "3.9.1.12080301",

"notes": ""

},

{

"timestamp": 1343813073,

"shortversion": "3.9.1",

"mandatory": false,

"appsize": 66602801,

"title": "Metal Nation",

"version": "3.9.1.12080101",

"notes": ""

},

{

"timestamp": 1343727905,

"shortversion": "3.9.1",

"mandatory": false,

"appsize": 66560890,

"title": "Metal Nation",

"version": "3.9.1.12073101",

"notes": ""

}

]

2. 客户端根据版本列表判断是不是最新版本,和是不是要强制更新,如果需要更新,可以类似与HockeyAPP内嵌一个网页显示版本信息,点击更新按钮后,访问服务端的下载更新包的API。

网页更新链接代码如下:

<a href="itms-services://?action=download-manifest&url=https://sdk.hockeyapp.net/api/2/apps/565b9262a3913bb1123c71ba6575e07b?format=plist&udid=d2134514a9c016fbd016a0815f1b3f41d9f38c82">Tap Here to Update</a>

3. 服务端提供下载更新包的API,传入用户设备号和请求的版本号参数,返回一个manifest.plist文件,本质是一个XML,包含更新包描述信息,参考如下:

https://sdk.hockeyapp.net/api/2/apps/565b9262a3913bb1123c71ba6575e07b?format=plist&udid=d2134514a9c016fbd016a0815f1b3f41d9f38c82

<?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>https://sdk.hockeyapp.net/api/2/apps/565b9262a3913bb1123c71ba6575e07b?format=ipa&amp;udid=d2134514a9c016fbd016a0815f1b3f41d9f38c82</string>

</dict>

<dict>

<key>kind</key>

<string>display-image</string>

<key>needs-shine</key>

<false />

<key>url</key>

<string>https://sdk.hockeyapp.net/api/2/apps/565b9262a3913bb1123c71ba6575e07b?format=png&amp;udid=d2134514a9c016fbd016a0815f1b3f41d9f38c82</string>

</dict>

</array>

<key>metadata</key>

<dict>

<key>bundle-identifier</key>

<string>com.idfsoft.idfCity</string>

<key>bundle-version</key>

<string>4.2.1.12101102</string>

<key>subtitle</key>

<string>4.2.1 (4.2.1.12101102)</string>

<key>title</key>

<string>Metal Nation</string>

<key>kind</key>

<string>software</string>

</dict>

</dict>

</array>

</dict>

</plist>

其中software-package对应的Url为ipa文件下载地址,其中display-image对应的Url为App的图标图片URL

5. 后台管理中,需要增加页面让用户可以上传最新的ipa文件和输入版本更新信息,其中ipa文件的解析逻辑如下:

  • 将ipa文件作为zip文件解压缩
  • 解压后,读取根目录下的Info.plist文件,是一个XML格式文件
  • 读取CFBundleShortVersionString节点,或得版本号简写
  • 读取CFBundleVersion获取版本号
  • 读取CFBundleIdentifier获取唯一编号
  • 读取CFBundleDisplayName获取名称
  • 保存这些信息到数据库中,在生成manifest.plist的API中用以显示相应数据。

基本上就这样。

iOS客户端的在线安装和更新—针对ADHoc证书

时间: 2025-01-16 21:19:36

iOS客户端的在线安装和更新—针对ADHoc证书的相关文章

RedHat6.4使用CentOS163yum源在线安装及更新软件

1.  虚拟机软件设置,先将虚拟机调整到可以连接外网,此例中我的计算机是使用Wifi,调整如下: 虚拟机菜单: Edit->Virtual Network Editor->Bridged to 无线网卡 2.   调整本地已安装的虚拟机网卡状态: 虚拟机菜单: VM->Virtual Machine Settings->Network Adapter->改为Bridged 3.#vim  /etc/sysconfig/network-scripts/ifcfg-eth0 BO

ios下(个人公司非企业级)AdHoc在线安装全环境配置

1,环境 客户端开发:MacOs 10.8.5 服务器开发:Centos6.3 64位 2,软件准备 Apache httpd 2.2.27 OpenSSL 0.9.8za 3,客户端准备 Apple的开发者账号大致分如下三类:个人,公司,企业,这一篇我们主要说下个人.公司的ipa在线安装.个人公司级别的AdHoc有这样一个限制:就是在线发布的ipa包只能安装 在添加到Apple账号的Devices列表中(发布IPA之后再添加的设备需要重新打IPA包)的非越狱设备及越狱设备中,而企业级的开发者账

更新日志 - BugHD iOS 客户端上线

中秋.十一长假归来,"满血复活"的我们做了 fir.im 和 BugHD 的优化更新:) BugHD 新增功能 1.iOS 客户端上线 BugHD iOS 客户端上线了,你可以随时随地查看应用崩溃状况.如果需要精确看到崩溃错误堆栈的代码行,可以在 BugHD 网站上传符号表版本.如何上传 iOS 符号表,请点击这里 iOS 版 AppStore地址 Android 版 下载地址 2.BugHD 网站移动端适配 我们对 BugHD 网站进行了移动端适配,如果你发现任何 Bug,欢迎将详尽

iOS 7.1下itms-services在线安装失败的解决方法

前段时间,接到客户的求助,主要是关于无法通过safari在线安装企业级应用的问题.经过一系列测试都没有发现相同现象,最后发现客户使用了还原的功能,把iPad的iOS升级到了7.1.网上搜索了一下,发现从iOS7.1开始,之前使用itms-services://URL方式在线安装ipa文件的方法都失效了,主要表现为在点击安装的时候,会报错为:"无法安装应用程序,因xxx.com的证书无效". 主要原因是苹果公司在iOS 7.1中修改了manifest.plist文件的访问协议,把原来的h

CentOS 中安装和更新 git 客户端工具

CentOS 系统中有可能默认未安装 git 工具,也有可能已安装但是版本太低,这时候我们需要安装或升级 git 工具. 1.检查 git 是否已安装 # git --version -bash: git: command not found # 情形一: git 未安装 # git --version git version 1.8.3.1 # 情形二: git 虽然已安装,但是版本很太低 2.安装 WANDisco 仓库包 # 如果是 CentOS 6 系统就安装这个吧 yum instal

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

ios客户端发现_动画屋活动获奖展示和获奖模块开发总结

   最近在看<web2.0策略指南>,开篇即对flicker的DVD租赁业务模型进行分析,目前看来这样的商业模型仍然很强大,而自去年纸牌屋后,flicker又引领了一股自有内容的热潮,湖南卫视未来如爸爸去哪儿.快乐大本营等节目.央视世界杯独播.爱奇艺的晓说,刘春加盟后未可知的big thing的节目.热潮后,是人为对影音入口的切割,这个入口渐次增多,对用户和对各方入口都不太算是好事,影音入口又进入了战国时代,不要多久这种模式的风险就会显现,只靠自有内容留住用户还远远不是终点,或许国内的入口可

猿题库 iOS 客户端架构设计(原文地址:http://gracelancy.com/blog/2016/01/06/ape-ios-arch-design/)

猿题库 iOS 客户端架构设计 序 猿题库是一个拥有数千万用户的创业公司,从2013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代.在如此快速的开发过程中,如何保证代码的质量,降低后期维护的成本,以及为项目越来越快的版本迭代速度提供支持,成为了我们关注的重要问题.这篇文章将阐明我们在猿题库 iOS 客户端的架构设计. MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的

iOS 程序插件及功能动态更新思路

所用框架及语言 iOS客户端-Wax(开发愤怒的小鸟的连接Lua 和 Objc的框架),Lua,Objc, 服务端-Java(用于返回插件页面) 工具框架链接地址:Wax - https://github.com/probablycorey/wax  Netty - https://netty.io/  用做Http服务器,返回页面 由于Lua脚本语言,不需要编译即可运行,这点是我的这个思路可以执行的大前提,再加上苹果允许像Lua这样的脚本的存在,这一思路才能得以实现.个人感觉这一思路有点类似于