这篇文章纯给自己留个备份,所以对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证书的更多相关文章

  1. 在线安装WordPress更新 失败的解决办法

    1.  登录ftp登录不上 , 总是登录失败 在服务器上新建了一个vsftpd服务器,并设置了相应的虚拟用户,修改chroot到网站目录 相关连接:https://blog.csdn.net/zhan ...

  2. IOS Socket 05-XMPP开始&安装服务器openfire&安装配置客户端

    1. 即时通讯技术简介(IM) 即时通讯技术(IM-Instant Messageing)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方 ...

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

    中秋.十一长假归来,"满血复活"的我们做了 fir.im 和 BugHD 的优化更新:) BugHD 新增功能 1.iOS 客户端上线 BugHD iOS 客户端上线了,你可以随时 ...

  4. IOS在线安装App

    在越狱设备上可以安装,如果设备不越狱也想安装,就要企业发布权限了,可惜我没有,所以不能测试了! 1.创建ipa及plist文件: XCode菜单栏->Product->Archive-&g ...

  5. 软件包管理 之 Fedora/Redhat 在线安装更新软件包,yum 篇 ── 给新手指南

    在本文中,我们主要解介绍 Fedora core 4.0 通过软件包管理工具yum来在线安装更新软件:关于apt工具应用,我们会在另外一篇中介绍: 一. yum 的使用:有些初学Linux的弟兄可能问 ...

  6. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  7. Appium robotframework-appium (ios 客户端测试)环境搭建

    一. 简介 1.1摘要 本人测试新人,最近在搞ios客户端的自动化,准备采用robotframework-appium来实现自动化测试,一边学习一边总结,此安装说明文档是基于mac系统10.11版本, ...

  8. 猿题库 iOS 客户端架构设计

    原文: http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=444322139&idx=1&sn=c7bef4d439f4 ...

  9. 改进iOS客户端的升级提醒功能

    改进iOS客户端的升级提醒功能 功能设计 先申明一下,我是码农,不是一个产品经理,但我觉得现有市面上的很多 App,设计的 "升级提示功能" 都不太友好.在此分享一下我的想法,欢迎 ...

随机推荐

  1. vmware Esxi 更换管理网卡IP

    使用VMware vSphere Client登录ESXI服务器.如下 在Configuration配置网络--->Networking

  2. PCB检查事项,生成钻孔表

    PCB检查事项 检查器件是否都放完, 检查连接线是否全部布完, 检查Dangling Line,Via, 查看铜皮是否孤立和无网络铜皮, 检查DRC, 1.选择菜单Display-Status,查看标 ...

  3. 让asp.net和php同时在Linux上跑起来

    实现这个想法有很多种方法,我就我最近算是比较熟悉的方式来说给大家吧. 因为有了mono,所以.net才能跨平台,.net都跨平台了,.net平台的童鞋们是不是应该提起精神好好了解下mono呢? 当然了 ...

  4. 3.SRS文档

    1.功能需求 本程序的使用者为局域网用户.程序实现的主要功能是局域网的常见格式的文件的传 输.其用例图如图1.本程序可通过可视化操作界面实现一对多的文件传输. 1.1模块分析 为实现局域网文件传输, ...

  5. 作业七:团队项目——Alpha版本冲刺阶段-02

    昨天进展:框架设计以及菜单设计. 今天安排:完善界面设计以及象棋图片的绘制. 小组一共三人,陈芝航因家里有事,与我们进行了QQ视屏会议.

  6. Uniscribe文字自动换行

      转载:http://blog.csdn.net/jianlizhao66/article/details/1480457 我们获得了每个字形的宽度数组piAdvances,以及这个RUN所占用的总 ...

  7. [译]面向初学者的Asp.Net状态管理技术

    介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...

  8. easyui使用技巧

    1.自定义datagrid字体大小 通过formatter改变字体大小,然后在列中使用: 如下: function formatFontSize(value){ return'<span sty ...

  9. [BTS] The value "" for the property InboundId is invalid

    Microsoft.ServiceModel.Channels.Common.MetadataException: Retrieval of Operation Metadata has failed ...

  10. Javascript之document对象用法(很重要)

    一.找到元素 document.getElementById("id"):根据id找层,最多找一个 var a=document.getElementById("id&q ...