美文网首页iOS技术交流Ios@IONICiOS用到的
iOS中利用TestFlight进行灰度测试

iOS中利用TestFlight进行灰度测试

作者: zgsddzwj | 来源:发表于2018-07-12 15:09 被阅读176次

    背景介绍

    • 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;

    步骤

    1. 将打包好的 ipa 或 xcarchive 文件上传到 iTunes Connect;
    2. 登录到 iTunes Connect 进入我的APP,选择你的APP;
    3. 到 TestFlight 模块下,如果 App Store 有提交过的版本,内部测试员就可以了,我们只需要添加内部测试员用户即可,如图:


      添加内部测试员.jpeg
    内部测试员.jpeg
    1. 接下来坐等收邮件,就是刚刚添加的那个用户邮箱,会收到邮件,如图:
    邮件.jpeg
    1. 点击 View in TestFlight 获取邀请码,如图:
    邀请码.jpeg
    1. 接下来打开之前下载的 TestFlight 软件,输入邀请码即可,接下来就可以安装之前构建的版本和 App Store 的历史版本。(每个版本都有90天的有效期,时间是从你的构建版本上传到 iTunes Connect 算起)
    TestFlight.jpeg

    注意:每一个邀请码对应一个 Apple ID ,在 TestFlight 软件中无需收输入Apple ID(其实也没法输入),它会自动获取当前设备登录的 Apple ID ,如果此邀请码已经被激活(就是已绑定 Apple ID ),则无法在不同的 Apple ID 下使用了(如果多台设备都登录的是已绑定的 Apple ID 则不会出现此问题)。不过还有一种方法就是在不同的设备登录邀请码绑定的 Apple ID ,这样直接打开 TestFlight 都不需要输入邀请码即可下载安装测试软件。

    添加外部测试员基本差不多,接下来我直接上图
    测试组.jpeg 测试组添加成员.jpeg 添加外部测试员.jpeg

    填坑

    在操作步骤3的时候可能会出现提示:“缺少出口合规证明”,这时需要做如下操作:

    在info.plist中增加键值对,ITSAppUsesNonExemptEncryption 设置为NO

    99.png

    然后更改内部版本号,重新打包提交测试,搞定

    <--------------------这是一个分割线------------------------>

    • 以上步骤就可以利用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];
        }
    }
    

    看下实现效果:


    test.jpeg

    参考资料:

    官方文档

    TestFlight的使用

    相关文章

      网友评论

      • 阿拉斯加的狗:那你外侧的时候用户不提供邮箱 你怎么给他发送验证码呢
        阿拉斯加的狗:@zgsddzwj 老哥求个qq联系方式哈 求加好友
        zgsddzwj:用开发者的邮箱,给开发者发送一次验证码,点击邮箱里的验证码,hook那个url,可以给所有的人用
      • zgsddzwj:itc本身提供了一种灰度发布方式:分阶段发布(https://help.apple.com/app-store-connect/#/dev3d65fcee1)如果您选择此选项,您的版本更新将会在一个 7 天的时间段内按百分比发布给您那些已打开自动更新的 iOS 用户(根据用户的 Apple ID 随机挑选)。不会通知用户他们被选为您的 App 分阶段发布用户。
      • zgsddzwj:发现了一个TestFlight产生地址:https://testflight.top/

      本文标题:iOS中利用TestFlight进行灰度测试

      本文链接:https://www.haomeiwen.com/subject/hptrpftx.html