iOS构建自分发平台

简述:iOS开发平时发布内测应用,大家经常用的有蒲公英、fir.im等第三方服务平台,无论是手动打包上传至内测平台,还是使用jenkins或者第三方内测平台提供的脚本、或者自己编写脚本实现CI,这些都依赖于第三个平台提供服务。而且每次有版本更新都需要提醒测试人员有新版本,给他们截图二维码等等......最近公司有需求要构建自己的内测分发平台,这样平时内测时,只需要把打包的ipa文件上传至公司服务器,测试人员打开app后就能发现是否有新版本,并且无需扫描二维码,直接在app内进行安装升级。

参考链接如下:
以无线方式安装企业内部应用

自分发必须条件

  • 后台服务器要有一个检测是否有新版本的接口,该接口应该可以返回一个 企业内部预置描述文件的地址,即一个.plist文件
  • 后台服务器应该提供开发人员上传.ipa包的入口
  • 后台服务器返回的.plist文件应该是基于iOS开发人员上传的.ipa文件动态构建的,.plist文件里面的app下载地址应当是最新上传的版本

iOS 支持以无线方式安装自定的企业内部应用,而无需使用 iTunes 或 App Store。应用的格式必须为 .ipa,并且使用企业内部预置描述文件进行构建。无线安装要求:
1. XML 清单文件
2. 可让设备访问 Apple iTunes 服务器的网络配置
3. 对于 iOS 7.1 或更高版本,使用 HTTPS
为了安装应用,用户使用特殊的 URL 前缀从您的网站上下载清单文件。您可以通过短信或电子邮件分发用于下载清单文件的 URL,这里我们公司是将清单文件的下载地址配置在了请求版本信息的接口中,或将其嵌入创建的另一企业应用中。
您负责设计和托管用于分发应用的网站。请确定用户已通过认证(可能是使用基本认证或基于目录的认证),并确定网站可通过内联网或互联网进行访问。您可以将应用和清单文件放入隐藏目录或任何可使用 HTTPS 读取的位置。

XML文件清单说明(.plist文件)

清单文件是一个 XML plist 文件,可供 Apple 设备用来从您的 Web 服务器上查找、下载和安装应用。清单文件由 Xcode 创建,使用的是您在共享用于企业分发的归档应用时所提供的信息。
以下栏是必填项:

  • URL:应用 (.ipa) 文件的完全限定 HTTPS URL(即必须是https链接)
  • display-image:57 x 57 像素的 PNG 图像,在下载和安装过程中显示。指定图像的完全限定 URL
  • full-size-image:512 x 512 像素的 PNG 图像,表示 iTunes 中相应的应用
  • bundle-identifier:应用的包标识符,与 Xcode 项目中指定的完全一样
  • bundle-version:应用的包版本,在 Xcode 项目中指定
  • title:下载和安装过程中显示的应用的名称

样本清单文件还包含可选键。例如,如果应用文件太大,并且想要在执行错误检验(TCP 通信通常会执行该检验)的基础上确保下载的完整性,可以使用 MD5 键。
通过指定项目数组的附加成员,您可以使用一个清单文件安装多个应用(这个不做说明,我没试)。
首次进行平台的创建,需要给服务器人员一个.plist样板,在打包过程中我没可以选择生成一个.plist文件,位置如下:

图片.png

图中红色框中默认是没有勾选的,第一次构建分发平台的时候需要勾选,只是为了搞一个.plist文件的样板,后续打包就不需要了。
点击图中下一步见下图:

图片.png

Name已经默认生成,Display Image URL: Full Size Image URL:是存放在公司服务器上的两个图片地址,位置可以放在服务器上任意位置。App URL:就是每次上传到公司服务器的内测.ipa包的下载地址,所以整个.plist文件需要动态进行构建,后续都需要从服务器拿.plist文件地址。
打包完成后可以发现生成了一个manifest.plist文件。

图片.png
图片.png

如何安装到手机中

下面列出我们后台升级请求接口中返回的版本信息,其中包含manifest.plist的下载地址

{
    data =     {
        description = "1\U3001\U66f4\U65b0\U53cb\U76df\U5206\U4eabSDK\Uff0c\U9002\U914dhttps\U3002
\n2\U3001\U5f3a\U5236\U5347\U7ea7\Uff0c\U9ebb\U70e6\U91cd\U65b0\U6d4b\U8bd5\U4e00\U4e0b\U5206\U4eab\U529f\U80fd\U3002
\n3\U3001\U8c22\U8c22\U3002";
        force = 1;
        size = "2.5 MB";
        toggle = on;
        "update_time" = "2016-12-19";
        url = "itms-services://?action=download-manifest&url=https://alpha.yihuangjin.com/api/mobile/manifest.plist";
        version = "1.0.8";
    };
    message = ok;
    "ret_code" = 0;
}

其中:
url = "itms-services://?action=download-manifest&url=https://alpha.example.com/api/mobile/manifest.plist";
中的
https://alpha.example.com/api/mobile/manifest.plist";
是.plist文件的地址,url中的
itms-services://?action=download-manifest
是iOS系统用来直接安装到手机需要解析用的。

使用openUrl的方式安装

在app中定义如下方法:

+ (void)openUrlWithString:(NSString *)urlString
{
    NSURL *url = [NSURL URLWithString:urlString];
    if (IS_IOS_10) {
        NSDictionary *dic = [NSDictionary dictionary];
        [[UIApplication sharedApplication] openURL:url options:dic completionHandler:nil];
    }else
    {
        [[UIApplication sharedApplication] openURL:url];
    }
}

直接
[self openUrlWithString:@"url对应的value值"];
就可以实现直接安装到手机中。

轻点 Web 链接后会下载清单文件,并触发下载和安装

您的网站可以是链接到清单文件的单个页面。用户轻点 Web 链接后会下载清单文件,并触发下载和安装。

以下是示例链接:
<a href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">Install App</a>
请勿添加归档应用 (.ipa) 的网站链接。载入清单文件时,设备会下载该 .ipa 文件。虽然 URL 的协议部分是“itms-services”,但 iTunes Store 并不参与此过程。
此外,请确定 .ipa 文件可通过 HTTPS 进行访问,并且您的站点已使用 iOS 信任的证书进行了签名。如果自签名证书没有受信任的锚点并且无法由 iOS 设备验证,安装会失败。

服务器端的要求

设定服务器 MIME 类型,您可能需要配置 Web 服务器,让清单文件和应用文件可正确传输。
对于 Server 应用,请将 MIME 类型添加到网页服务的 MIME 类型设置:

application/octet-stream ipa
text/xml plist

对于微软的互联网信息服务器 (IIS),请使用 IIS Manager 在服务器的“属性”页面中添加 MIME 类型:

.ipa application/octet-stream
.plist text/xml

说明

其实manifest.plist这个文件可以每次打包都重新生成,由于我们这边管理后台是已经开发好的,然而管理后台只能上传一个文件,就是说上传了.ipa文件后,再上传manifest.plist文件,就会把.ipa文件覆盖,自建内测分发平台的时候这两个文件都是必须的,就想了一个折中的办法,动态构建.plist文件,.plist文件里面的.ipa下载地址也由服务器人员进行构建。
正常情况下:
将这些项目上传到网站上可供已认证的用户访问的区域:

应用 (.ipa) 文件
清单 (.plist) 文件

每次打包都重新构建并上传这两个文件,可以使用上面所述的两种方式先去请求.plist文件所在地址,解析.plist文件中.ipa的下载地址,然后触发下载和安装。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容