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,设计的 "升级提示功能" 都不太友好.在此分享一下我的想法,欢迎 ...
随机推荐
- Ubuntu下制作ISO文件
利用Ubuntu自带的命令mkisofs就可以制作iso文件,具体方法如下: 1. 如果你是直接从cd压制iso文件的,执行 sudo umount /dev/cdromdd if=/dev/cd ...
- Linux挂载磁盘
查看 fdisk –l 挂载 mount 磁盘 目录 参考地址:http://blog.csdn.net/tianlesoftware/article/details/5642883 卸载 umoun ...
- C/C++中static关键字详解
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...
- C#分布式缓存一:Couchbase的安装与简单使用
一.简介 目前C#业界使用得最多的 Cache 系统主要是 Memcached和 Redis. 这两个 Cache 系统可以说是比较成熟的解决方案,也是很多系统当然的选择. Memcache的开发团队 ...
- WPF快速入门系列(1)——WPF布局概览
一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...
- .NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序
今天坐高铁时尝试了一种学习ASP.NET 5的笨方法,从空文件夹开始,根据运行dnx . kestrel命令的错误信息,一步一步写代码,直至将一个最简单的ASP.NET程序运行起来. 尝试的具体步骤如 ...
- 高手速成android开源项目【导航篇】
Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个 ...
- ybutton 高端大气上档次华丽的按钮特效
小菜偶然在某网站中看到一款非常华丽的按钮特效,感觉十分有必要抄袭下来,以备日后使用. 简单描述一下按钮的效果:鼠标移到按钮上的时候,会出现灯光闪过的效果,非常的高端. 但遗憾的,这么牛逼的效果,仅仅兼 ...
- thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
本节主要介绍缓冲相关的传输类,缓存的作用就是为了提高读写的效率.Thrift在实现缓存传输的时候首先建立一个缓存的基类,然后需要实现缓存功能的类都可以直接从这个基类继承.下面就详细分析这个基类以及一个 ...
- [Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium
最近准备深入学习Python相关的爬虫知识了,如果说在使用Python爬取相对正规的网页使用"urllib2 + BeautifulSoup + 正则表达式"就能搞定的话:那么动态 ...