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供客户端获取最近版本信息,参考如下:
[
{
"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,包含更新包描述信息,参考如下:
<?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&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&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证书的更多相关文章
- 在线安装WordPress更新 失败的解决办法
1. 登录ftp登录不上 , 总是登录失败 在服务器上新建了一个vsftpd服务器,并设置了相应的虚拟用户,修改chroot到网站目录 相关连接:https://blog.csdn.net/zhan ...
- IOS Socket 05-XMPP开始&安装服务器openfire&安装配置客户端
1. 即时通讯技术简介(IM) 即时通讯技术(IM-Instant Messageing)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方 ...
- 更新日志 - BugHD iOS 客户端上线
中秋.十一长假归来,"满血复活"的我们做了 fir.im 和 BugHD 的优化更新:) BugHD 新增功能 1.iOS 客户端上线 BugHD iOS 客户端上线了,你可以随时 ...
- IOS在线安装App
在越狱设备上可以安装,如果设备不越狱也想安装,就要企业发布权限了,可惜我没有,所以不能测试了! 1.创建ipa及plist文件: XCode菜单栏->Product->Archive-&g ...
- 软件包管理 之 Fedora/Redhat 在线安装更新软件包,yum 篇 ── 给新手指南
在本文中,我们主要解介绍 Fedora core 4.0 通过软件包管理工具yum来在线安装更新软件:关于apt工具应用,我们会在另外一篇中介绍: 一. yum 的使用:有些初学Linux的弟兄可能问 ...
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- Appium robotframework-appium (ios 客户端测试)环境搭建
一. 简介 1.1摘要 本人测试新人,最近在搞ios客户端的自动化,准备采用robotframework-appium来实现自动化测试,一边学习一边总结,此安装说明文档是基于mac系统10.11版本, ...
- 猿题库 iOS 客户端架构设计
原文: http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=444322139&idx=1&sn=c7bef4d439f4 ...
- 改进iOS客户端的升级提醒功能
改进iOS客户端的升级提醒功能 功能设计 先申明一下,我是码农,不是一个产品经理,但我觉得现有市面上的很多 App,设计的 "升级提示功能" 都不太友好.在此分享一下我的想法,欢迎 ...
随机推荐
- 过滤器(servlet.filter)和拦截器(springmvc.interceptor)区别
①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求 ...
- Android:res之layer-list的用法
layer-list可以将多个图片按照顺序层叠起来,让其看起来像一个图一样. 和 叠加为: 用法: 在在drawable下建立一个xml文件,faceleft.xml <?xml ver ...
- [转载]& 引用 取地址
原文地址:& 引用 取地址作者:beter 引用实际上就是给同一个变量取了多个名字. 举个例子: 有个人的名字叫a,之后又改名叫b,这时a和b都是指这个人,这样b就引用了a,即 ...
- elixir 高可用系列(二) GenServer
概述 如果我们需要管理多个进程,那么,就需要一个专门的 server 来集中监控和控制这些进程的状态,启停等. OTP 平台中的 GenServer 就是对这个 server 通用部分的抽象. 利用 ...
- 阿里云中Centos下配置防火墙
一.检查iptables服务状态 [root@woxplife ~]# service iptables status iptables: Firewall is not running. 说明ipt ...
- addin 笔记
http://msdn.microsoft.com/en-us/library/vstudio/19dax6cz.aspx VS 加载插件的位置: \My Documents\Visual Studi ...
- [ThingWorx] Install Guideline
环境 硬件 软件 安装过程 PostgreSQL Tomcat ThingWorx
- mysql 密码重置
1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql 2.使用命令启动mysql数据库,跳过权限验证 mysqld -nt --skip-grant-tables ...
- 使用Redis实现用户积分排行榜的教程
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/129.html?1455808528 排行榜功能是一个很普遍的需求.使用 ...
- 【软件架构】IM架构设计(安卓版)
1. 架构总览 2. 模块介绍 2.1 协议封装与任务流程 2.1.1 协议与任务的封装 协议有协议头(协议头因为格式相同,被抽象出来)和协议体组成,协议有两类:请求协议(request)和回复协议( ...