App的分发测试(八) —— fastlane教程之Actions and Plugins(一)

版本记录

版本号 时间
V1.0 2020.11.04 星期三

前言

我们在做App开发的时候,开发人员开发完成以后就要交给QA进行测试了,有几种方式,一种就是将QA的测试机加到账号里面的Device里面,这个有个数限制(每种硬件类型不能超过100台,即使删除设备也不会重置),然后利用三方平台比如说蒲公英进行分发,还有一种方法就是使用TestFlight进行测试,这个专题就主要说一下App分发测试相关的内容。感兴趣的看上面几篇。
1. App的分发测试(一) —— 浅谈蒲公英平台分发测试的使用(一)
2. App的分发测试(二) —— TestFlight集成和分发测试(一)
3. App的分发测试(三) —— fastlane自动化打包并上传(一)
4. App的分发测试(四) —— fastlane自动化打包(一)
5. App的分发测试(五) —— GitHub, Fastlane & Jenkins集成(一)
6. App的分发测试(六) —— GitHub, Fastlane & Jenkins集成(二)
7. App的分发测试(七) —— TestFlight Beta测试(一)

开始

首先看下主要内容:

在本fastlane教程中,您将使用actions and plugins来覆盖您的应用程序图标,上传到Firebase并在Beta版构建就绪后向您的团队发送消息。内容来自翻译

下面看下写作环境:

Swift 5, iOS 14, Xcode 12

下面就是正文了

fastlane是一种工具,可自动执行您的开发和发布过程,从而节省时间,消除重复性任务并最大程度地减少人为错误。 在 fastlane Tutorial: Getting Started教程中,您学习了如何使用fastlane完全设置,构建,测试,存档和上载应用程序到TestFlight

本教程基于这些技能,因此最好在继续之前先完成该教程。 在这里,您将学习如何使用其他操作和插件(actions and plugins)将叠加层添加到Beta版的应用程序图标,将其上传到Firebase以供测试人员使用,以及在构建完成后如何通过Slack向您的团队发送消息。

注意:本教程假定您具有付费的Apple Developer帐户,并且具有命令行,Xcodead-hoc测试过程。 如果您没有帐户,我们的教程How to Submit an App to the Apple Store将为您提供帮助。

下载材料后,将.zip存档解压缩到计算机上方便的位置。

与第一个教程一样,您将使用一个名为mZone Poker的示例应用程序,该应用程序是无限制德州扑克'Em锦标赛的计算器。 它通过显示基于筹码数量和您输入的当前大盲注级别的推荐操作来工作。

构建并运行以进行检查:

但是,在开始使用该应用程序之前,请花一分钟时间正确设置所有内容。

1. fastlane Configuration

您应该已经在上一教程中设置了fastlaneBundler,因此打开Terminal,导航到starter project目录并运行以下命令:

bundle install

此命令要求Bundler安装Gemfile中定义的所有依赖项,以便您可以执行本教程中的其余命令。

2. Signing Assets Configuration

开始之前,您需要在Xcode中设置您的signing identitybundle ID。这些值是您在Apple Developer帐户中的唯一team ID,以及您在Apple Developer Portal的** Identifiers**部分中创建的唯一应用程序bundle identifier。如果您遵循上一教程,则应该已经设置好。

设置帐户后,请执行以下步骤:

  • 1) 从Xcode的起始文件夹中打开mZone Poker.xcodeproj
  • 2) 在Xcode的左窗格中显示Project navigator
  • 3) 选择顶部的mZone Poker项目节点。
  • 4) 单击Targets标题下的mZone Poker目标。
  • 5) 在中间窗格中,选择Signing & Capabilities选项卡。
  • 6) 确保已选中Automatically Manage Signing复选框。
  • 7) 在团队Team下拉列表中选择您的开发团队。
  • 8) 在Bundle Identifier字段中输入您的bundle ID

您可以在下图中看到在哪里执行每个步骤:

注意:如果下拉列表中没有列出您的开发团队,请尝试使用Apple ID登录。 为此,请转到菜单中的Xcode ▸ Preferences ▸ Accounts

完成上述步骤后,错误消息“Signing for mZone Poker requires a development team”将消失,您可以开始使用。 现在,是时候开始改进您的mZone Poker应用了。


Adding an Overlay to the App Icon

如果您的Beta测试人员可以通过浏览应用程序图标来区分设备上的Beta版本,该怎么办? fastlane使这变得容易!

在此步骤中,您将设置一条通道来更新您的应用程序图标以进行Beta版构建。 更新后的图标将包含自定义文本,使您可以轻松查看有关设备上Beta版的信息。

但是,在开始之前,请快速绕行以了解fastlane plugins

1. fastlane Plugins

fastlane使用默认安装发布一组默认操作。 您可以在您的通道上使用它们,而无需进行任何其他操作。 默认操作通常是针对第一方工具(例如XcodeAndroid Studio)的,但还有许多其他操作可为第三方工具或非必需的实用程序提供集成。

这些附加操作可作为插件使用,您可以将其与默认的快速通道安装一起安装。 安装它们后,就可以像默认操作一样轻松地在Fastfile中使用它们。

您可以通过阅读官方文档 official documentation了解有关插件工作方式的更多信息。 您可以在fastlane文档 fastlane docs中查看已发布插件的完整列表。

2. Icon Versioning Prerequisites

在开始配置fastlane以在应用程序图标上添加叠加层之前,您需要做好一些整理工作。 您将用来覆盖图标的fastlane插件需要ImageMagick命令行实用程序来完成其工作。 您将使用Homebrew软件包管理器进行安装。

如果尚未安装Homebrew,请转到该站点the site并将主页上的安装脚本复制并粘贴到Terminal会话中。 运行命令并按照屏幕上的说明完成设置。

之后,使用以下命令安装ImageMagick

brew install ImageMagick

在安装ImageMagick及其所有依赖项之后,就可以设置第一个fastlane插件了!

3. Installing the Icon Versioning Plugin

要使用插件,您必须执行一些额外的步骤来安装它并使它可用于fastlane。 您今天将使用Icon Versioning插件来更新应用程序图标。

首先,打开终端并运行以下命令:

bundle exec fastlane add_plugin fastlane-plugin-icon_versioning

由于这是您第一次向该项目添加插件,因此您将看到类似以下的输出:

这告诉您一些重要的事情:

  • 1) 您已成功将插件添加到插件文件Pluginfile中。
  • 2) 由于您以前从未使用过插件,因此fastlane需要修改Gemfile来引用您的插件。 这是一次提示,fastlane只是因为要确保它具有修改未创建文件的权限而显示。 该文件是您下载的材料之一。

y,该过程将继续:

注意:如果您看到一条消息:Seems like this plugin is not available on RubyGems,请选择选项3。这将尝试从RubyGems安装插件。

打开./fastlane/Pluginfile。 其内容将如下所示:

# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!

gem 'fastlane-plugin-icon_versioning'

该文件是自动生成的; 您无需对其进行编辑。 它基本上是一个Gemfile,其中列出了专门为fastlane添加的gems(又名插件)。

由于fastlane在您现有的Gemfile中添加了对该文件的引用,因此每当您再次运行bundle install时,也会为您安装该插件(如果尚未安装)。

当使用源代码控制并与其他团队成员合作时,或者当您依赖构建服务器(还需要安装插件)时,此功能非常有用。

现在,是时候设置您的应用程序图标叠加层了!

4. Creating a Lane for Icon Overlay

打开纯文本编辑器,例如AtomVisual Studio Code。 从入门项目的基本目录中,打开./fastlane/Fastfile并在platform:ios do下面添加以下代码:

desc "Overlay the app icon with build information"
lane :overlay_icon do
  # 1
  build_number = get_build_number
  # 2
  version_number = get_version_number
  # 3
  version_icon(
    appiconset_path: "mZone Poker/Assets.xcassets/AppIcon.appiconset",
    text: "beta: #{version_number} (#{build_number})"
  )
end

此代码执行以下操作:

  • 1) 使用内置的get_build_number操作检索当前的build number
  • 2) 使用内置的get_version_number操作获取当前的应用程序marketing version
  • 3) 调用version_icon插件的version_icon操作,以使用覆盖在底部显示应用程序版本和build版本号的叠加层更新应用程序图标。

现在,打开终端并运行以下命令:

bundle exec fastlane overlay_icon

您会看到一些终端输出和成功消息。 脚本完成后,请执行以下步骤来验证更改并创建叠加层:

  • 1) 转到Finder中的项目目录。
  • 2) 导航至以下路径:mZone Poker▸Assets.xcassets▸AppIcon-Versioned.appiconset。 这是原始图标集的副本。 Icon Versioning插件创建了此图标集作为原始图标的副本,并在此处为Beta图标创建了覆盖图。
  • 3) 选择一个文件并预览。

现在,您会在图标上看到一个叠加层,其中包含marketing version and build number

现在,您已经为Beta版生成了新的App Icon,现在该使用Fastlanegym来生成自己的build了。


Creating a Build

fastlane带有一个官方的动作库。 它们带有快速通道,您可以从任何通道调用它们。 要查看可用操作的完整列表,请查看fastlane的操作文档fastlane’s actions documentationGym就是其中之一。

1. Setting up Gym to Build

您需要生成一个二进制文件,以便可以为Beta测试人员执行上传。 您将使用gym命令为此生成一个.ipa文件。

在文本编辑器中打开fastlane / Fastfile,并使用以下代码在overlay_icon下创建一个新车道:

desc "Build beta ipa"
lane :build_beta do
  # 1
  enable_automatic_code_signing
  # 2
  gym(
    export_method: "ad-hoc",
    # 3
    xcargs: "ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon-Versioned"
  )
end

这条lane

  • 1) 启用自动代码签名(automatic code signing),这意味着您不必大惊小怪的供应配置文件(provisioning profiles)和其他代码签名设置。
  • 2) 运行gym命令,并通过ad-hoc发送export_method参数值。 这将构建用于测试的应用程序。 端上与Apple Developer帐户关联的任何设备都可以运行该应用程序。
  • 3) 覆盖ASSETCATALOG_COMPILER_APPICON_NAME构建设置,以强制使用先前生成的AppIcon-Versioned资源而不是Xcode中选择的默认应用程序图标进行构建。 这是确保仅在构建Beta版本时仅应用beta图标的好方法。

保存Fastfile并使用以下命令运行新lane

bundle exec fastlane build_beta

如果这是您第一次从fastlane运行gym命令,则可能会收到如下所示的代码签名提示:

如果是这样,请输入管理员密码,然后选择Always Allow以继续。 fastlane完成构建应用程序后,您会收到一条成功消息。 在此之上,您将看到文件在哪个文件系统中保存了您的构建。

Finder导航到./fastlane/builds/目录,您将看到mZone Poker.ipa等待您上传它。


Uploading to Firebase

下一步是使您的构建可供测试人员使用。 有几种平台可以上传ad-hoc进行测试。 在这种情况下,您将使用Firebase

在开始使用Firebase之前,您需要设置一个帐户并安装本地命令行界面(CLI)

1. Setting up a Firebase Account

如果您还没有Firebase帐户,请转到Firebase并设置一个。 这样一来,您就可以访问Firebase App Distribution,这是您用于分发Beta版本的工具。

激活帐户后,下一步就是安装Firebase CLI

注意:许多Firebase功能都要求您将Firebase框架嵌入到您的应用中,但是App Distribution不是其中之一。 您无需使用Firebase SDK即可分发Beta版本。

2. Setting up the Firebase CLI

转到Firebase CLI installation page页面,然后按照说明进行设置。 配置CLI后,请按照说明登录并运行建议的测试。

3. Setting up Your Project on Firebase

设置完工具后,该在Firebase上创建项目和应用程序了。

项目是一个或多个应用程序的逻辑容器。 您可以在一个项目下拥有多个应用程序,并且它们都可以共享设置,测试器和其他Firebase值。

请按照以下步骤创建您的项目:

  • 1) 转到Firebase console
  • 2) 单击Add project选项。
  • 3) 给您的项目起个名字。
  • 4) 选择是否启用Google Analytics(分析)-本教程不需要。
  • 5) 继续浏览其余屏幕,直到Firebase将您重定向到新创建项目的Project Overview

现在,您已经设置了Firebase项目,是时候在新项目中添加应用了。

4. Setting up Your App on Firebase

Project Overview页面上,您会看到提示,将Firebase添加到您的应用中。 选择圆形的iOS按钮以开始配置您的应用程序:

通过在iOS bundle ID字段中输入您先前在Xcode中使用的bundle identifier来设置新应用。 将其他两个字段保留为空白,然后单击Register app

接下来的三个步骤选择Next,因为您无需在此应用中配置Firebase SDK。 完成第5步后,单击Continue to console以返回到Project Overview。 您会在页面顶部看到您的应用程序:

接下来,您将为mZone Poker应用设置应用分发(App Distribution)

5. Setting up App Distribution

要为您新创建的应用程序设置应用程序分发,请通过单击屏幕左侧菜单中的App Distribution项转到仪表板:

首次访问时,Firebase会为您提供资源,以帮助您了解有关此功能的更多信息。 在这种情况下,您只需单击Get Started即可直接跳入。

在此屏幕上,转到Testers & Groups选项卡,然后单击Add Group。 在此处,为新的小组beta-testers命名,然后单击Save

在这里,您会看到Add testers按钮。 单击它,键入您自己的电子邮件地址,然后按Enter以将您自己添加为测试人员:

现在,您可以测试上传到Firebase的所有构建。 但是,在开始上传之前,您需要从Firebase控制台中获得另一件事:您的Firebase App ID

6. Finding your Firebase App ID

您需要告诉Firebase上传应用程序的位置。 为此,您必须使用之前创建的应用程序的唯一标识符。

要在Firebase控制台中找到此值,请单击左侧菜单中的设置齿轮,然后选择Project Settings选项:

General标签中,向下滚动到Your apps部分,然后在App ID下查找值。

记下ID。 现在您可以开始集成插件了。

7. Setting up the Firebase App Distribution Plugin

接下来,您需要设置Firebase App Distribution插件。 使用此工具,您可以通过操作从fastlane上传到Firebase

在终端中,运行以下命令以将App Distribution插件添加到Fastlane安装中:

bundle exec fastlane add_plugin firebase_app_distribution

安装完插件后,您将创建下一条lane

8. Creating an Upload Lane

打开Fastfile并添加以下通道,请确保将[[FIREBASE APP ID]]替换为设置Firebase项目时记下的App ID

desc "Upload to Firebase"
lane :upload_firebase do
  # 1
  firebase_app_distribution(
    # 2
    ipa_path: "./fastlane/builds/mZone Poker.ipa",
    # 3
    app: "[[FIREBASE APP ID]]",
    groups: "beta-testers",
    # 4
    release_notes: "Added icon overlay and started distributing via Firebase"
  )
end

这是上面的代码的作用:

  • 1) 调用新添加的插件提供的firebase_app_distribution操作。
  • 2) 告诉操作在计算机上可以找到要上传的.ipa的位置。
  • 3) 指定要上传到的应用程序以及应该有权访问该应用程序的测试人员组。
  • 4) 提供发行说明,以便您的Beta测试人员了解此版本中的新功能。 目前,您只是对字符串进行硬编码以使其简单。 但是,如果您使用的是Git,则可以结合使用其他操作(例如changelog_from_git_commits)来自动为您填充发行说明。

完成所有设置后,您可能希望进行测试,因此请从Terminal运行以下命令:

bundle exec fastlane upload_firebase

lane结束后的几分钟,您会通过电子邮件收到邀请,以从Firebase测试您的Beta。 做得好! 现在,您可以在可重复的构建脚本中生成beta

最后一步,您将学习如何在有可用构建时向Slack组发送消息。


Messaging Your Team on Slack

对于此步骤,您需要具有可访问工作空间的Slack帐户。

然后,您需要添加一个Incoming WebHook,以允许Firebase将传入消息发布到Slack。 为此,请访问Slack App Directory中的Incoming WebHook应用程序,然后单击Add to Slack。 然后,您会看到配置页面:

在此页面上,从Choose a channel…下拉列表中选择一个现有频道,或单击create a new channel并按照以下步骤操作。 选择所需的频道后,点击Add Incoming WebHooks Integration,您将获得一个Webhook URL

返回到Fastfile并通过在您添加的最后一个lane下输入以下代码来添加另一个新lane

desc "Send Slack notification for build"
lane :send_slack do 
  # 1
  build_number = get_build_number

  # 2
  version_number = get_version_number

  # 3
  slack(
    message: "App build complete for Version: #{version_number} (#{build_number})",
    success: true,
    payload: {
      "Build Date" => Time.new.to_s,
      "Built by" => 'fastlane'
    },
    slack_url: "[[SLACK INCOMING WEBHOOK URL]]"
  )
end

不要忘记用您获得的Webhook URL替换[[SLACK INCOMING WEBHOOK URL]]

lane执行以下操作:

  • 1) 使用内置的get_build_number操作检索当前的build number
  • 2) 使用内置的get_version_number操作获取当前的应用程序marketing version
  • 3) 运行slack操作以将消息与构建通知一起发布到您的Slack工作空间。

该操作接收以下值:

  • message:要发布的消息,它使用步骤1和2中的build number and marketing version
  • success:指示构建成功的布尔值。
  • payload:要传递的其他消息数据。 必须包含键和值的哈希。 在这种情况下,您要传递构建时间和Building by属性。
  • slack_url:您的传入Webhook URL

通过从终端运行以下命令来测试新lane

bundle exec fastlane send_slack

您会在Slack#test频道中收到一条通知:

此操作有大量的自定义选项。 如果您想了解Slack操作可用的所有参数,请查阅fastlane documentation


Putting It All Together

现在,您可以将新操作组合到一个lane中。 在send_slack下,添加以下内容:

desc "Create and distribute a beta build"
lane :beta do
  increment_build_number
  overlay_icon
  build_beta
  upload_firebase
  send_slack
end

唯一新的是increment_build_number。 此内置操作采用现有的build number,将其递增1,然后将其保存在CFBundleVersion键下的Info.plist中。

唯一的内部版本号标识提交到App Store的每个二进制文件以及您使用的任何测试服务。 该lane的其余部分将您在本教程中构建的操作串在一起。

要测试完整的实现,请在终端中运行以下命令:

bundle exec fastlane beta

在本教程中,您学习了如何准备和构建用于Beta测试的二进制文件,更新应用程序图标以显示构建信息,将测试构建上传到Firebase以及在准备就绪时通过Slack向团队发送通知消息。

还可以通过fastlanefastlane插件执行更多操作。 要进一步提高您的fastlane技能,请查看所有可用的操作和插件,然后尝试其他操作和插件!

如果找不到满足您需求的产品,请考虑building your own并为社区做出贡献。

有关更多深入的教程,请查看我们的课程,fastlane for iOS。 有关使用Submitting Your App With fastlane, Taking ScreenshotsApp Provisioning也有截屏视频。

后记

本篇主要讲述了fastlane教程之Actions and Plugins,感兴趣的给个赞或者关注~~~

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