iOS中app的分发测试
知识的学习在于分享。分享出来才能共同进步。
关于测试 有几种方式
1.开发人员直接在电脑上 用模拟器
2. 真机调试,测试人员可以拿着测试机找开发人员在电脑上跑真机测试
3. 公司和个人账号 直接 打ad - hoc 包 ,里面包含上测试机的udid:
a 发布到蒲公英 或者 fri.im 等三方网站 ,让测试人员去下载
b 通过邮件发给有mac电脑的测试人员 测试人员用 itools 安装 到手机上
4. 公司和个人账号 上传到itunes store , 加入内部测试人员 和 外部测试人员,进行测试 就像https://www.jianshu.com/p/d1cf3bff9530里面所说
5. 有企业账号 最方便 ,直接 打个企业包,任何手机都可以安装来测试 安装来使用
这里还涉及一个概念叫 灰度测试
指的是 程序开发完成,公司内部的测试人员也全部测试通过,这个时候程序已经相对稳定,开发团队会将程序的升级功能只开放给部分用户,这部分用户使用过程中会出现一些bug,程序得检测功能会将bug日志上报到开发团队,开发人员在进行修改,修改完成之后才向全部用户发送升级通知,这个过程就叫做灰度测试。
这种测试是偏向于 ios 的一种 。
下面是找到的一篇文章 关于 testflight的。
原文链接 https://www.jianshu.com/p/d1cf3bff9530
背景介绍
TestFlight Beta 版测试让您可以分发你 App 的 Beta 版构建版本给测试员并收集反馈。
TestFlight的出现是在iOS8的时候,在Xcode 6和iOS 8上公开发行,它被整合到了iTunes Connect,你可以通过电子邮件的形式来邀请你的Beta测试成员。
TestFlight的测试方式分为两种,一种是内部测试,一种是外部测试。从功能上讲,这两种方式都可以为测试人员在测试阶段对你的App进行测试。但是既然分了内部测试和外部测试,他们肯定还是有区别的,所谓的内部主要是指iTunes Connect上在你的开发团队里参与技术开发或者管理的成员(管理员,技术,法务人员)。最多可以邀请25个内部成员,而与之相对的外部测试,指的是那些不属于你的团队或者公司的测试者,外部测试人员的上限是10000人。这里有一点需要注意的是,在你邀请外部成员参与测试之前,需要先通过苹果的审核,一般审核会在一天左右。而这一限制在内部成员上就没有,也就是说只要你把你的App上传到iTunes Connect上之后内部成员就可以开始进行内部测试了,无需审核。
准备工作
- 待测试的 ipa 包(用Application Loader上传)或者是 archive (用Xcode Upload to App Store)文件(需要上传到 iTunes Connect );
- 到 App Store 下载安装软件 TestFlight;
步骤
- 将打包好的 ipa 或 xcarchive 文件上传到 iTunes Connect;
- 登录到 iTunes Connect 进入我的APP,选择你的APP;
到 TestFlight 模块下,如果 App Store 有提交过的版本,内部测试员就可以了,我们只需要添加内部测试员用户即可,如图:
添加内部测试员.jpeg
- 接下来坐等收邮件,就是刚刚添加的那个用户邮箱,会收到邮件,如图:
- 点击 View in TestFlight 获取邀请码,如图:
- 接下来打开之前下载的 TestFlight 软件,输入邀请码即可,接下来就可以安装之前构建的版本和 App Store 的历史版本。(每个版本都有90天的有效期,时间是从你的构建版本上传到 iTunes Connect 算起)
注意:每一个邀请码对应一个 Apple ID ,在 TestFlight 软件中无需收输入Apple ID(其实也没法输入),它会自动获取当前设备登录的 Apple ID ,如果此邀请码已经被激活(就是已绑定 Apple ID ),则无法在不同的 Apple ID 下使用了(如果多台设备都登录的是已绑定的 Apple ID 则不会出现此问题)。不过还有一种方法就是在不同的设备登录邀请码绑定的 Apple ID ,这样直接打开 TestFlight 都不需要输入邀请码即可下载安装测试软件。
添加外部测试员基本差不多,接下来我直接上图
填坑
在操作步骤3的时候可能会出现提示:“缺少出口合规证明”,这时需要做如下操作:
在info.plist中增加键值对,ITSAppUsesNonExemptEncryption 设置为NO
然后更改内部版本号,重新打包提交测试,搞定
<--------------------这是一个分割线------------------------>
以上步骤就可以利用TestFlight对我们的应用进行灰度测试了。但是我们发现一个问题,如果我们想像别的App一样,直接弹框告诉用户有新版本,用户点击体验新版本,就可以直接跳转到TestFlight体验新版本,这个逻辑该怎么实现呢?
我们知道,按照以上方式,用户需要打开邮件、复制邀请码、打开 TestFlight、输入邀请码等繁琐的步骤,我们要做到邀请码对用户透明。
- 经过几天的查找资料,终于找到了一种方式,就是hook Apple发给我们的邮件,拿到那个体验的Url,然后发给我们的用户,就可以了。
- 我们在上面第五步"点击 View in TestFlight 获取邀请码"时,可以拿到一个Url,这个Url就是我们需要的Url,格式是这样的
https://beta.itunes.apple.com/v1/invite/0415669eebc44c5688cf63b5d067d7950217d8b20cd548a39c1080195aa64ec253bccb1f?ct=22ZNNCDS7U&advp=10000&platform=ios
, - 后台将得到的那个 URL 在应用内发给受邀用户即可(当然啦,对用户来说是透明的),然后就是弹 Alert -> 弹 Controller -> 接受邀请并愉快地下载内测版本 -> 愉快地体验内测版本。
这里有一个需要注意的,如果用户本地没有安装TestFlight可以直接通过OpenUrl来打开该链接,如果用户已经安装了TestFlight,需要改为
itms-beta://beta.itunes.apple.com/v1/invite/0415669eebc44c5688cf63b5d067d7950217d8b20cd548a39c1080195aa64ec253bccb1f?ct=22ZNNCDS7U&advp=10000&platform=ios
。
所以最后的代码是这样的:
-(void)openUrl:(NSString *)type
{
NSString *url = nil;
NSURL *customAppURL = [NSURL URLWithString:@"itms-beta://"];
if ([[UIApplication sharedApplication] canOpenURL:customAppURL]) {
url = [NSString stringWithFormat:@"itms-beta://%@",url?:self.plistDict[@"BetaUrl"][type]];
customAppURL = [NSURL URLWithString:url];
[[UIApplication sharedApplication] openURL:customAppURL];
return;
}else {
url = [NSString stringWithFormat:@"https://%@",url?:self.plistDict[@"BetaUrl"][type]];
customAppURL = [NSURL URLWithString:url];
[[UIApplication sharedApplication] openURL:customAppURL];
}
}
看下实现效果:
参考资料:
作者:zgsddzwj
链接:https://www.jianshu.com/p/d1cf3bff9530
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
iOS中app的分发测试的更多相关文章
- 关于查找iOS中App路径时所要注意的一个问题
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...
- iOS - AppRealTest App 真机测试
前言 1.准备 开发者账号 自从 Xcode7 出来之后,一般的真机测试不需要开发者账号,也就不需要看这篇教程,只有 app 具有 "推送" 等功能的时候,要真机测试就必须要开发者 ...
- iOS中app启动闪退的原因
这种情况应和所谓的内存不足关系不大,很少有程序会在初始化时载入大量内容导致崩溃,并且这类问题也很容易在开发阶段被发现,所以内存不足造成秒退的可能性低(内存不足退,通常是程序用了一段时间,切换了几个画面 ...
- iOS开发系列-自动化分发测试打包
概述 项目在测试阶段需要频繁打包给测试人员,对于这些固定化的操作我们可以使用自动化的手段去解决,将时间放在有意义的事情上. xcodebuild 是苹果发布自动构建的工具. Shell脚本打包 xcr ...
- IOS中APP开发常用的一些接口
免费的API接口: 1.聚合数据,上面有手机归属地查询等: 2.百度API store:上面有很多免费的接口,可以使用在自己的app中: 3.环信:提供一些用户交互的一些场景等,可以用来做即时通讯软件
- 【转载】Loadrunner实现Android / IOS 手机APP压力测试
随着手机APP用户量的增大,大的手机APP一般都需要进行压力测试,这几天用了loadrunner 12进行了手机APP的压力测试,整理了下,大家可以参考参考怎样给Andorid / IOS手机APP进 ...
- iOS 的 APP 在系统中如何适配不同的屏幕的尺寸
iOS 的 APP 在系统中如何适配不同的屏幕的尺寸 标签: 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone ...
- 利用iOS中Safari浏览器创建伪Web App
在safari浏览器里有一个“添加到主屏幕”选项,我们可以用来创建伪Web App,下面来了解一下iOS中Safari的私有属性 第一步设置Web App的主屏幕图标: 有两种属性值apple-tou ...
- ios安装app提示【未受信任的企业级开发者】。在设置中信任此开发者
最近在测试app,ios安装app后点击提示如下图: 解决方法: 1 点击 [设置] >[通用] >[设备管理] 2 点击企业级应用 > 信任该开发者 > 信任.设置之后 ...
随机推荐
- cocos2d-x3.0 XML解析
在2dx3.0中xml解析已经不用自己找库了.已经为我们集成好了. text.xml <?xml version ="1.0" encoding ="UTF8&qu ...
- OpenGL ES 3.0之Shader and program(七)
着色器对象和程序对象是使用着色器渲染的2种基本的对象类型.一个着色器对象可以当做是一个C编译器,而程序对象作为连接器.一个编译器生成目标代码(如.OBJ,.o文件),对象文件完成创建后,C连接器将该对 ...
- [Canvas]首个小游戏告成
英雄在地图上射箭杀怪兽,杀完了就胜利了. 点此下载程序试玩. 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> < ...
- Jquery——几个注意的小知识
event.stopPropagation() 停止事件冒泡 event.preventDefault()//组织默认行为(例如错误的时候,阻止按钮提交) event.type获取事件类型 event ...
- LintCode: Flatten Binary Tree to Linked List
C++ Traverse /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, ...
- Android 之 WebView开发问题及优化
WebView 在现在的项目中使用的频率应该还是非常高的,WebView 主要用来加载一些容易改变的频繁交互的应用App.目前 HTML5 是一种趋势.在开发中会遇到一些开发问题及优化问题,如下所记. ...
- Java 之 POI各Jar包作用
目前POI的最新版本是 3.16-beta2,该版本是测试版本,稳定版本是 3.15,下载地址为 Apache POI (http://poi.apache.org/download.html). 一 ...
- scoop - 初次使用
scoop也是包管理工具,不过是含着金钥匙出生的(正巧碰上微软支持开源,并且拥抱开源生态圈),此后的Win10 powershell 3.x+也就不会像Win7 powershell 2.x那样沉默了 ...
- eclipse 远程调试程序
最近遇到一个非常恶心的问题,本地调试没有问题,到了线上就复发,逼于无奈只能使用eclipse远程调试,下面把步骤记录一下: 1.修改服务器的启动脚本,添加如下内容: export JPDA_ADDRE ...
- 使用Flask+MongoDB实现基于REST的接口简单操作
目录 前言 1 准备工作 2 具体实现 前言 最近在捣鼓如何使用阿里云服务器搭建一个简单的基于Flask框架的后端接口,刚开始为了图方便,就直接买了一个Windows Server 2008系统服务器 ...