移动 DevOps 攻略书(二)

原文:annas-archive.org/md5/be98d708e176b50f9833d9bb61c785a3

译者:飞龙

协议:CC BY-NC-SA 4.0

第六章:移动应用发布管理

我们现在处于移动 DevOps 和 CI/CD 进展的持续阶段。一旦应用程序成功开发和测试完毕,它就准备好发布到应用商店。这通常包括将移动应用发布到测试版或生产版本,并使其对用户可用。移动应用发布管理对于企业优化用户体验并保持高质量至关重要。它涉及规划和实施新功能/更新和热修复。

但发布移动应用需要不同的流程、步骤和工具。在本章中,我们将探讨移动应用发布管理过程的各个阶段,并涵盖以下主题:

  • 移动应用发布管理中的挑战

  • 移动应用程序发布的定义

  • 实施完整的 CI/CD 过程

  • 确保遵守应用商店的指南和规定

  • 发布和分发移动应用程序

  • 将用户反馈与测试版测试结合

  • 应用商店提交

  • 应用商店优化(ASO)

  • 监控和报告发布进度

  • 实施发布列车

首先,我们将讨论在发布移动应用时遇到的最大挑战,以便知道如何通过相关的发布策略、流程和工具来应对它们。

移动应用发布管理中的挑战

作为一名应用开发者,了解移动应用发布管理过程至关重要,以确保顺利部署并获得用户的高度满意。

为发布应用程序设立流程对企业至关重要,从初创公司到企业级公司,因为这是确保应用程序在长期内成功的最佳方式。这不仅有助于保持用户的参与度,还帮助建立企业与客户之间的强大关系。

此外,通过确保应用程序保持最新且无漏洞,企业可以降低用户不满意和昂贵的技术问题的风险。

作为一家以移动为主的公司,应用商店上的客户反馈和评分非常重要,因为它为我们提供了应用质量、功能和整体表现的指标——我们不能忽视它们,因为这将帮助我们改善开发和发布过程。

正如前面章节中所讨论的,移动开发是独特的,因此,由于以下原因,发布过程将是独特且具有挑战性的:

  • 发布新功能或热修复没有简单直接的流程。

  • 发布移动应用程序没有先决条件的工具、服务或平台来帮助我们顺利且频繁地发布;大多数情况下,我们是手动操作,这消耗了团队的时间和精力,而且发布可能会延迟数月。

  • 在多个设备、平台和配置上进行测试可能会耗时且复杂。因此,在第五章实施强大的移动应用测试策略中,我们建议使用测试自动化和云设备测试,因为手动测试可能需要数周时间才能对新版本发布有足够信心。

  • 每个应用商店都有具体的政策和审查程序。 navigating 这些程序并确保遵守应用商店的规则可能会很有挑战性,且可能会导致应用发布延迟。

  • 在发布后发现错误时,您可能需要恢复到先前的版本。管理多个软件版本并有效处理回滚可能会很困难。

  • 发布跨平台应用程序具有挑战性,因为您需要管理两个具有不同要求、指南和流程的应用。

移动应用发布的定义

当移动应用发布后,客户可以下载、安装并在其设备上使用该应用。这涉及多个阶段,包括构建、测试和将应用发布到应用商店或其他分发平台。最终目标是为客户提供一个可靠、安全且功能齐全的应用,满足他们的需求和期望。

制定一个稳健的移动应用发布策略对于确保成功的上线和长期成功至关重要。以下是为您的移动应用定义发布策略的分步指南。

定义发布策略

拥有一个发布策略对确保成功的发布管理至关重要。这个策略应考虑各种方面,例如发布频率、发布功能类型、测试和验证过程、每次发布的风险以及减轻这些风险的最佳方法。

自信发布并通过工具和策略帮助全球发布、管理和分发应用程序,以确保您的应用成功上线。

移动应用发布策略是一个精心规划的方法,旨在启动、更新和维护移动应用程序。它概述了确保顺利发布过程的关键步骤、里程碑和所需资源,同时尽量减少干扰并最大化用户满意度。一个明确的发布策略可以帮助您管理期望,分配资源并衡量成功。

理解移动应用发布管理流程

移动应用发布管理涉及规划、安排、协调和向用户部署新版本或更新。这个过程对希望定期更新应用的新功能、修复程序和安全补丁至关重要。但是,在发布过程中,我们需要考虑不同的步骤;让我们一起来探索它们:

  1. 发布前:

    • 计划发布

    • 构建和测试应用

  2. 准备发布:

    • 管理代码签名

    • 准备versionCodeversionName

  3. 发布应用

  4. 选择合适的发布渠道:

    • 测试版测试

    • 应用商店提交

  5. 启动应用:

    • 应用内更新

    • 监控应用的性能

  6. 发布后:

    • 处理用户反馈和评论

    • 分析应用性能数据

    • 规划未来的版本发布

    • 移动发布列车

    • 应用商店优化(ASO)

为了更深入了解每个阶段,让我们详细查看每一个阶段。

发布前

这是初始阶段,在这个阶段,我们应该作为一个团队,定义并达成一致关于发布过程的内容,包括发布策略、责任划分等。

发布规划

一旦发布策略已被定义,开发实现过程就显得尤为重要。这个过程应该包括发布安排管理代码更改确保应用符合质量标准。还应包括确保应用在发布前经过测试和验证的步骤。

构建和测试应用

如前章所述,我们应该使用持续集成CI)流水线来构建和测试移动应用,确保我们没有任何阻碍因素或问题会延迟发布过程。然后,我们可以继续进行持续交付和持续部署CD),将应用发布到应用商店。

持续交付和部署(CD)

如在第三章《移动 DevOps 基础》一书中提到,持续交付会自动将通过 CI 检查的构建交付到生产环境(例如暂存环境),在那里进行测试和审查,确保其符合要求后再发布到生产环境。

目标是自动化开发和部署过程,以确保移动应用的快速、可靠和经济的交付。

移动应用的 CI/CD 过程主要包括以下几个步骤:

  1. 将构建版本发布给 QA 团队,以便他们进行额外的检查和测试,例如探索性测试,以确保构建符合预期。

  2. 如果公司或团队已经参与该计划,可以将构建版本发布给测试人员。

  3. 如果一切正常,发布经理或负责发布过程的人可以批准构建并将其发布到相关的应用商店或生产环境中。

  4. 以下图中可以看到这些步骤:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.01_B18113.jpg

图 6.1 – 持续交付过程

持续部署通常是 CI/CD 流水线的一部分,这意味着部署到代码库的代码将自动部署到生产环境——在我们这里,移动应用将自动部署到相关的应用商店。CI/CD 流水线通常被称为这些实践的结合体:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.02_B18113.jpg

图 6.2 – 持续部署过程

持续部署过程自动化了应用构建的部署流程,避免了人工干预。阻止新更改部署到生产环境的唯一因素是构建或测试失败。这一流程有助于加快应用生产,并更快速地获得客户反馈。

注意

要了解 GitHub 移动团队如何通过 GitHub Actions 自动化发布流程,请访问github.blog/2022-01-12-how-we-ship-github-mobile-every-week/

准备发布版本和标签

我们需要根据应用的不同执行不同的步骤。例如,在应用级别的 build.gradle 文件中,需要处理 versionCodeversionName

接下来的步骤是使用 Build 菜单中的 Generate Signed Bundle / APK… 选项生成签名的 APK 或应用包;本节后面我们将介绍代码签名和生成包文件的过程。这也可以在 CI 服务器上自动完成。

同时,对于 iOS 应用,有不同的步骤,涉及在应用目标设置的 General 选项卡中更新版本和构建号。完成后,选择 Generic iOS Device 作为构建目标,从 Product 菜单归档应用,然后选择 Archive 菜单。本节后面我们将介绍如何进行代码签名和归档应用。

完成这些步骤后,GitHub 仓库中的发布标签和发布说明将为下一个发布版本做好准备。

准备发布

将任何应用发布到 Apple App Store、Google Play Store 或其他任何商店,都需要证书、配置文件或 Keystores 来识别应用已由受信任的公司或开发者构建。

因此,我们需要在构建发布应用之前管理代码签名过程。

设置开发者账户

该过程的第一步是设置 Apple 开发者账户。您需要提供姓名、地址和联系方式,还需要提供支付信息并同意 Apple Developer Program License Agreement。设置好账户后,您可以访问 Apple Developer Portal。对于 Google 开发者账户也需要执行相同的步骤,以便将应用发布到 Google Play 商店。

管理代码签名

代码签名 是对应用程序可执行代码进行数字签名的过程,确保其完整性和真实性。这个过程在 Android 应用开发生命周期中至关重要,它帮助确认应用来自受信任的来源,并且自签名以来没有被篡改。

让我们解释一下 Android 和 iOS 所需的代码签名步骤。

首先,让我们从 Android 应用的代码签名步骤开始。

要对 Android 应用进行签名(developer.android.com/studio/publish/app-signing),请按照以下步骤操作:

  1. 设置一个开发者账户(play.google.com/console/)。

  2. 使用 keytool 工具创建一个唯一的私钥-公钥对(docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html)。

  3. 使用私钥签署应用程序,并将公钥嵌入到自签名证书中。

Android Studio 或 apksigner 工具用于使用生成的密钥对打包并签署应用程序。

Android 系统在安装过程中验证应用程序的签名,以确保其完整性和真实性。

要生成私钥-公钥对和自签名证书,请按照以下步骤操作:

  1. 打开终端或命令提示符。

  2. 执行以下命令:

    keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
    
  3. 在提示时提供所需信息,如你的姓名、组织和位置。

  4. 选择一个强密码用于你的密钥库和密钥对。

你的密钥对和自签名证书将存储在指定的 .jks 文件中,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.03_B18113.jpg

图 6.3 – keytool 输出

要在 Android Studio 中签署应用程序,请按照以下步骤操作:

  1. 在 Android Studio 中,打开 构建 菜单并选择 生成已签名的 Bundle / APK…

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.04_B18113.jpg

图 6.4 – 生成已签名的 Bundle / APK…

选择 .aab(Android 应用包)。然后,点击 下一步

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.05_B18113.jpg

图 6.5 – 选择 Android 应用包或 APK

  1. 点击 my-release-key.jks

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.06_B18113.jpg

图 6.6 – 选择密钥库路径

  1. 输入密钥库和密钥对密码以及密钥别名。

  2. 选择你的 目标文件夹构建变体 参数,然后点击 完成

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.07_B18113.jpg

图 6.7 – 选择构建变体

Android Studio 将创建一个已签名的 App Bundle,准备好分发,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.08_B18113.jpg

图 6.8 – Gradle 执行任务

在发布文件夹中,你可以找到生成的 .aab 文件,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.09_B18113.jpg

图 6.9 – .aab 文件

保持你的签名密钥和密钥库文件的安全——它们用于标识和验证你的应用程序。如果你丢失了签名密钥或密钥库文件,将无法更新或维护你的应用程序。

现在,让我们看一下 iOS 应用程序代码签名的步骤。

要签署 iOS 应用程序,请按照以下步骤操作:

  1. 登录或创建一个 Apple 开发者账户(developer.apple.com/),如果你还没有的话。

  2. 访问 Apple 开发者门户,并从仪表板选择 证书、标识符与描述文件

证书是用来验证应用开发者身份并签署应用代码的数字文件。

有两种类型的证书:

  • 开发证书,用于应用开发过程中

  • App Store(发布)证书,用于将应用分发到 Apple App Store

标识符是用于将你的应用与开发者账户关联、启用某些应用功能(如推送通知)并创建配置文件的唯一标识符。

有三种类型的标识符:

  • 应用 ID:此 ID 用于标识特定应用

  • 包 ID:此 ID 用于标识特定应用组内的应用

  • 团队 ID:此 ID 用于标识开发者或组织

配置文件是包含关于你的应用、证书和设备标识符的文件。这些配置文件允许你的应用在 iOS 设备上运行,并访问某些应用功能,如推送通知、应用内购买和 iCloud。

有两种类型的配置文件:

  • 开发配置文件,用于应用开发过程中。

  • 发布配置文件,用于将应用分发到 App Store,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.10_B18113.jpg

图 6.10 – Apple 开发者证书

在 Apple 开发者门户中,打开证书、标识符与配置文件(developer.apple.com/account/resources/certificates/list)页面,然后点击**+按钮创建新的证书。选择iOS 应用开发并点击继续**,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.11_B18113.jpg

图 6.11 – 创建新的 Apple 开发者证书

按照屏幕上的指示从 Mac 的钥匙串访问应用生成证书签名请求CSR)(developer.apple.com/help/account/create-certificates/create-a-certificate-signing-request)。上传 CSR 并下载生成的开发证书。

接下来,你需要创建一个应用 ID。这个唯一标识符将你的应用与其配置文件和证书关联起来。点击标识符,然后点击**+按钮。填写必要的详细信息,点击继续**注册你的应用 ID,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.12_B18113.jpg

图 6.12 – 创建应用标识符

现在,让我们创建一个配置文件。点击Profiles,然后点击**+按钮。选择iOS App Development并点击Continue**。选择你刚创建的 App ID、开发证书,以及你想用于测试的设备。为你的配置文件命名并点击Generate,如下面的截图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.13_B18113.jpg

图 6.13 – 注册新配置文件

选择我们之前创建的 App ID,并配置配置文件,如下面的截图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.14_B18113.jpg

图 6.14 – 生成配置文件 | 选择一个 App ID

打开你的 Xcode 项目并进入Signing & Capabilities标签。点击Team下拉菜单,选择你的开发者账户。Xcode 应该会自动处理配置文件和证书。如果没有,点击Import Profile并找到你下载的配置文件。

一旦你设置好账户、配置文件、App ID 和证书,你就需要为发布准备你的应用。这包括完成创建截图和设置应用元数据等任务。

但在此之前,你需要上传并保存你的凭据到 CI 提供商,以便在发布过程中自动签署应用。例如,Bitrise 在工作流编辑器中提供了一个标签,你可以上传你的配置文件和代码签名证书,以便它们能在 iOS CI/CD 流水线中使用:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.15_B18113.jpg

图 6.15 – Bitrise 的 iOS 代码签名与文件标签

对于 Android,你可以上传 Keystore 文件以在 CI/CD 流水线中签署你的应用:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.16_B18113.jpg

图 6.16 – Bitrise 的 Android 代码签名与文件标签

在 GitHub Actions 中也应该是一样的情况;你可以将凭据存储在 GitHub Secrets 中(docs.github.com/en/actions/reference/encrypted-secrets),这样可以快速将凭据传递给 GitHub Actions。你还可以使用 Codemagic 来处理 iOS(docs.codemagic.io/yaml-code-signing/signing-ios/)和 Android(docs.codemagic.io/yaml-code-signing/signing-android/),采用相同的方法,或使用任何其他 CI 提供者。

或者,你可以通过 API 密钥连接到 Apple 服务(如 App Store Connect 或 Apple Developer Portal),以自动上传 iOS 应用到 App Store。

使用 fastlane match 管理大规模移动团队中的证书和配置文件

在一个大型且可扩展的移动团队中,集中且安全地管理证书和配置文件至关重要,以防止冲突并确保所有团队成员使用最新的统一文件。

工具如fastlanefastlane matchdocs.fastlane.tools/actions/match/)可用于在大型团队中管理证书和配置文件。这些工具会在构建和发布应用时自动下载开发人员的最新签名证书和配置文件。

文件应根据仓库中的Matchfile进行存储和访问。一旦证书和配置文件被下载,团队成员可以使用 fastlane match 构建和发布应用,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.17_B18113.jpg

图 6.17 – fastlane match 的工作原理。

使用 fastlane match 有助于消除许多与代码签名相关的常见问题,如过期的证书或不匹配的配置文件。这是一个推荐的安全且协作的代码签名管理方法。在第九章移动 DevOps 最佳实践中,我们将讨论如何在构建、测试和发布移动应用时使用 fastlane。

发布应用。

发布候选版本RC)构建在满足以下条件时准备好交付给我们的测试人员:

  • 为处理发布候选版本所需的任何紧急修复,创建了一个分支

  • 构建是根据适当的版本号生成并上传到 TestFlight/Firebase App Distribution,具体取决于应用的类型。

  • 所有的单元测试UI 测试快照测试都已通过。

  • 创建一个问题来跟踪发布过程

  • 发布说明已准备好。

  • 如果没有问题,构建可以自动提交到 App Store 或 Google Play Store,或者可以由发布经理和相关人员手动批准。

这个工作流或管道可以通过你的 CI 提供商实现,如在第四章中讨论的,通过移动 DevOps 实现持续集成与交付,但如前所述,它应支持与不同工具和服务的集成,以简化发布过程。

团队需要为给定的构建生成一个应用二进制文件。然后,必须定义一个包含多个步骤的任务,生成构建,执行测试用例,然后将其归档并上传到 TestFlight(iOS)或 Firebase App Distribution(Android)。你可以为每个版本创建一个专用的分支,这样可以随时回溯并挑选任何想要包含的更改,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.18_B18113.jpg

图 6.18 – 移动发布周期。

现在,让我们深入了解不同的发布阶段,例如 beta 测试和应用商店提交。

Beta 测试

移动应用的 Beta 测试是创建过程中的一个关键阶段。在正式发布之前,它使开发者能够在实际移动设备上测试他们的应用并收集用户反馈。通常,Beta 测试使用一小群愿意测试发布版本并提供功能、可用性和整体用户体验反馈的用户。

移动应用开发过程中的 Beta 测试阶段至关重要,因为它为开发者提供了在公开发布前评估应用的可用性和功能的机会。然而,由于以下原因,构建有效的 Beta 测试计划可能会让人感到紧张:

  • 害怕负面反馈:当将应用交给 Beta 测试人员时,可能会担心他们会提供负面反馈或遇到可能会削弱开发团队信心的关键漏洞。

  • 资源不足:创建一个合适的 Beta 测试计划需要资源,如时间、金钱和人员。与测试人员协调、管理反馈以及实施更改可能会消耗大量资源,特别是对于较小的开发团队或独立开发者来说。

  • 确定合适的测试人员:找到真正有兴趣提供有价值反馈并代表目标用户群的 Beta 测试人员可能具有挑战性。

  • 时间限制:Beta 测试阶段可能会引入延迟,这可能会被视为快速部署的障碍。

设置应用的 Beta 测试计划有不同的步骤。我们来看一下。

定义应用的范围

设置成功的移动应用 Beta 测试计划的第一步是定义应用的范围。这应该包括对应用功能、目标用户以及应用可用平台的清晰描述。这对于确保应用在正确的环境中进行测试至关重要。

此外,开发者应该考虑在 Beta 测试过程中想要跟踪哪些指标。这可能包括下载数量、使用统计数据和用户反馈。

一旦应用的范围确定,就可以开始设置 Beta 测试计划。

准备发布

一旦 Beta 测试计划建立完成,准备应用的发布至关重要。这包括确保在测试阶段识别出的任何问题都得到了处理,并且应用已准备好公开发布。开发者还应考虑如何推广应用以及采取哪些措施以确保成功的发布。

对于 iOS,开发人员需要创建一个 App Store Connect 账户(appstoreconnect.apple.com/login),并通过平台提交他们的应用程序。对于 Android,则需要一个 Google Play 控制台账户(play.google.com/console/about/),并必须通过该平台提交他们的应用程序。这包括提供必要的元数据,如应用程序的名称、描述、关键字、截图、应用图标和定价信息。

开发人员还需要提供一个测试帐户及其登录凭据,如果他们的应用程序需要身份验证,则可以访问应用商店的内容或功能。这使他们能够在 Beta 测试和应用商店提交阶段测试应用程序。

通过允许一组用户在应用程序发布之前测试该应用程序,开发人员可以获取有关产品性能的宝贵反馈,并在确定版本发布之前进行任何必要的调整或增强。

招募测试员

你可以联系那些对测试应用程序表示兴趣的目标用户群体。你也可以在与应用相关的论坛和社交媒体上发布信息,或使用像 TestFlight 这样的服务来找到测试员。以下是一些有效的招募测试员的方法:

  • 提供清晰的说明:一旦你招募了测试员,向他们提供清晰的安装和使用应用程序的说明,以及如何提供反馈意见。

  • 监控反馈:监控测试员的响应,并在向公众发布之前对应用程序进行任何必要的更改。

Beta 测试工具

在移动应用程序开发中,Beta 测试是一个重要的阶段。它允许开发人员在应用程序全面发布之前从有限的用户群体中获取宝贵的反馈意见,识别和修复问题,并确保更顺利的发布。有多种工具可用于在移动应用程序上进行 Beta 测试。以下是一些流行的工具:

  • TestFlight

  • Google Play Beta 测试

  • Firebase 应用分发

让我们仔细看看。

TestFlight

TestFlightdeveloper.apple.com/testflight/)是 iOS 应用开发者的宝贵工具,允许他们在将应用程序发布到应用商店之前进行测试。它现在是 iOS 应用开发生态系统的一部分。

TestFlight 简化了开发人员邀请 Beta 测试员尝试他们的应用程序的流程。您只需提供测试人员的电子邮件地址,他们将收到通过 TestFlight 下载应用程序的邀请。

TestFlight 与 iOS 开发环境的集成使得在 iPhone、iPad 和其他 Apple 设备上分发和测试应用程序变得简单。它是免费的,适用于各种规模的开发者,从个人到大公司。

开发人员可以同时分发多个应用构建版本,从而测试不同的版本并确定最成功的版本。

TestFlight 使测试版测试者能够轻松地在应用中直接提供反馈。这确保开发者能够获得宝贵的意见,并在公开发布应用之前进行必要的改进。

开发者可以邀请最多 10,000 名外部测试者,这使他们能够收集大量反馈并发现潜在问题。有关使用 TestFlight 测试应用的更多信息,请访问 testflight.apple.com/

以下是您必须遵循的使用 TestFlight 进行测试的基本步骤:

  1. 在 Xcode 中创建一个新版本,并确保它符合所有应用商店的指南和要求,包括截图和元数据。

  2. 将您的应用上传到 App Store Connect,并选择要分发给测试版测试者的版本。

  3. 通过从 App Store Connect 发送电子邮件邀请,邀请测试版测试者来测试您的应用。每个应用最多可以邀请 10,000 名测试者。邀请后,他们将收到一封邀请邮件,接受邀请并在其 iOS 设备上安装 TestFlight。

  4. 在测试版测试者接受邀请并安装 TestFlight 后,您可以将他们添加到 App Store Connect 的一个组中。这样,您可以管理不同版本应用的分发,将其分发给不同的测试者组。

  5. 一旦您将测试版测试者添加到一个组中,就可以通过在 App Store Connect 中选择要分发的应用版本,并选择要分发给的测试者组,来将应用分发给他们。

  6. 测试版测试者可以通过 TestFlight 应用提供关于应用的反馈,包括截图、评论和评分。

  7. 监控应用的表现并跟踪测试版测试者报告的问题,然后修复发现的任何问题。

在测试版阶段完成并解决所有问题后,应用就可以发布到相关的应用商店。

Google Play 测试版

Google Play 测试版 (support.google.com/googleplay/android-developer/answer/9845334?hl=en&visit_id=638185357369512451-3818777855&rd=1) 是 Android 应用开发者的重要工具,提供了一个直接的方式来在应用发布到 Google Play 商店之前进行测试。它的简单设置、与 Google Play 商店的无缝集成以及对大量测试者的支持,使其成为 Android 应用测试的首选工具。

Google Play 测试版允许开发者通过电子邮件邀请或共享链接的方式将应用分发给测试者。测试者可以像访问其他应用一样,通过 Google Play 商店轻松访问应用。

测试者可以直接在应用中提供反馈,为开发者提供改进应用的重要意见,从而在应用发布到公众之前进行必要的优化。

Google Play beta 测试还支持分阶段发布,允许开发者将应用更新发布给一部分用户,并逐步增加该部分用户的比例。

你可以使用 Google Play Console 针对特定群体进行测试,或者将测试向 Google Play 用户开放,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.19_B18113.jpg

图 6.19 – Google Play Console

Google Play 提供三种测试类型:

  • 内部测试:最多可以让 100 名测试者快速访问你的应用进行初步质量保证检查:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.20_B18113.jpg

图 6.20 – Google Play Console – 内部测试

  • 开放测试:这允许你与大量用户进行测试,并在 Google Play 上展示测试版本的应用:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.21_B18113.jpg

图 6.21 – Google Play Console – 开放测试

  • 封闭测试:这允许你在发布前的测试阶段,从更广泛的测试者中收集更有针对性的反馈:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.22_B18113.jpg

图 6.22 – Google Play Console – 封闭测试

以下是在 Google Play Console 上实施 beta 测试的一般步骤:

  1. 通过创建 beta 版本并使用 Keystore 签名,确保应用准备好进行测试。

  2. 通过将测试者的 Google 电子邮件地址添加到 Google Play Console,创建一个 beta 测试者列表。

  3. 将应用的 beta 版本上传至 Google Play Console,beta 测试者可以访问它。

  4. 通过电子邮件向测试者发送 beta 测试邀请,其中包含一个下载应用程序 beta 版本的链接。

  5. 监控来自 Google Play Console 的 beta 测试反馈,并解决任何报告的问题或 bug。

  6. 根据收到的反馈,我们可以对应用进行修改和改进,然后再向公众发布。

  7. 一旦完成测试并解决所有问题,便可以通过 Google Play Store 向公众发布。

Firebase 应用分发

Firebase 应用分发 (firebase.google.com/docs/app-distribution) 可以通过简单的流程将你的应用分发给可信赖的测试者,将应用迅速部署到测试者的设备上。这样,你可以提前并频繁地收到反馈,并将其与移动 DevOps 和 CI/CD 目标对齐。

Firebase 应用分发允许开发者在 iOS 和 Android 设备上分发和测试应用,使其成为多平台应用开发的多功能选择。然而,iOS 开发者通常更喜欢使用 TestFlight,因为它是免费的,并且与 Apple 的服务和应用集成得更紧密。

使用 Firebase 应用分发分发应用给测试者非常简单。你可以通过电子邮件邀请测试者,或者分享一个链接,让他们快速访问应用。

Firebase App Distribution 与Crashlytics (firebase.google.com/products/crashlytics) 无缝集成,这是一个实时崩溃报告工具。它帮助开发者快速识别并修复问题,提高应用的稳定性和性能。

Firebase App Distribution 支持流行的 CI/CD 工具,允许开发者自动化构建、测试和分发应用的过程。

使用 Firebase App Distribution 进行 Android 测试的基本步骤如下:

  1. 创建 Firebase 账户和项目。

  2. 将 Firebase SDK 添加到你的项目中。

  3. 创建一个已签名的发布版应用包。

  4. 使用 Firebase CLI、Gradle 或 CI 服务器将你的应用构建上传到 Firebase App Distribution。

  5. 通过添加测试者的电子邮件地址或在 Firebase 控制台中创建测试者组来邀请测试者。你也可以导入包含测试者电子邮件地址的 CSV 文件。

  6. 一旦构建完成并上传,且测试者已添加,便可以将应用分发给选定的测试者。他们将收到一封包含访问和安装应用 Beta 版本的说明的电子邮件邀请。

一旦测试阶段完成,我们可以进入最后阶段,即将应用提交到应用商店。

提交应用

在提交应用进行审核之前,开发者必须确保其符合App Store 审核指南,该指南涵盖了诸如用户隐私、内容、设计和功能等广泛的主题。开发者还应在不同设备和 iOS 版本上广泛测试应用,以确保流畅的用户体验。

提交应用即意味着将其上传到应用商店(如 App Store 或 Google Play)进行审核和批准,并让用户可以下载。

一旦你的应用准备好,你需要将其提交到相关的应用商店。这包括上传应用、提供截图和其他元数据,并提交应用进行审核。审核过程可能需要长达一周的时间,只有当应用符合应用商店的指南时,它才有可能被接受。

审核过程通常需要几天时间,但根据应用的复杂性和提交量,时间框架可能会有所不同。在审核过程中,Apple 团队会根据 App Store 审核指南对应用进行评估,检查其功能性、性能、设计和内容问题。

审核过程后,可能有几种结果:

  • 如果应用符合所有指南,它将被批准并发布到 Apple App Store。你将收到通知,应用将可供下载。

  • 如果应用不符合指南,它将被拒绝,并且你将收到反馈,说明需要解决的具体问题。然后,你可以进行必要的更改并重新提交应用进行审核。

  • 如果应用的元数据不符合指南,它将被拒绝,但二进制文件无需重新审核或重新构建。你可以更新元数据并重新提交进行审核。

我们现在准备好发布应用了。但在此之前,我们需要了解可以使用哪些移动应用分发平台来公开发布它。

移动应用分发平台

移动应用分发平台 是开发者发布、分发并销售移动应用的数字市场。这些平台对于开发者而言至关重要,可以帮助他们触及更广泛的受众,并为其应用赢得曝光。一些最受欢迎的移动应用分发平台包括:

  • Apple App Store (www.apple.com/de/app-store/): iOS 设备的官方应用商店,包括 iPhone、iPad 和 iPod Touch。开发者可以提交应用进行审核,并在审核通过后提供下载。

  • Google Play Store (play.google.com/store/apps): Android 设备的官方应用商店,提供各种应用、游戏和其他数字内容,供用户下载。与 Apple App Store 类似,开发者可以提交应用进行审核,并在审核通过后提供下载。

  • Amazon Appstore (www.amazon.com/mobile-apps/b?ie=UTF8&node=2350149011): 亚马逊的应用商店,是 Android 应用的替代市场,提供广泛的应用和游戏,包括一些仅在该平台上独有的应用。

  • Microsoft Store (apps.microsoft.com/store/apps): Windows 设备的应用商店,包括 Windows Phone、Surface 平板电脑和 Windows PC 等设备。开发者可以通过该平台分发移动应用和桌面应用。

  • Samsung Galaxy Store (galaxystore.samsung.com/apps): 三星的应用商店,提供专为三星设备定制的各种应用和游戏,包括独家内容和促销活动。

  • Huawei AppGallery (appgallery.huawei.com/): 华为的官方应用商店,提供适用于华为和荣耀设备的应用和游戏。由于与谷歌服务断开连接,华为一直在发展其应用商店,作为 Google Play Store 的替代方案。

需要注意的是,所有这些应用商店都有相关的指南和政策,提交应用时必须遵守:

确保你的应用符合所有要求和指南,以便按时完成审核过程。

App Store 提交

将 iOS 应用上传到 Apple App Store 包括以下步骤:

  1. 你需要配置你的 Xcode 项目,以便使用必要的配置文件和证书构建并归档你的应用。确保你拥有用于应用分发的必要配置文件和证书,而不仅仅是开发用的证书。

  2. 访问App Store Connect网站,并使用你的 Apple Developer 账户登录。

  3. 点击我的应用并选择你要提交的应用。

  4. 在左侧边栏中,点击App Store标签,滚动到元数据部分,点击编辑按钮。在这里,你可以为你的应用添加必要的元数据,包括应用名称、副标题、描述、关键词和类别。

  5. 滚动到截图与视频部分并点击编辑按钮。在这里,你可以为每种设备类型和你支持的语言添加应用截图。确保你的截图符合 App Store 的指南,包括正确的尺寸和分辨率。

  6. 你可以通过拖放截图到截图部分,或点击**+**按钮从电脑中选择截图进行上传。

  7. 你还需要设置你的应用价格或选择将其免费提供。你还可以选择哪些国家或地区可以使用你的应用。

  8. 完成所有必要步骤后,你可以将应用提交到 App Store 进行审核。确保你已彻底测试应用,并符合 Apple 的所有指南和政策。

  9. Apple 将审核你的应用,以确保它符合所有技术、设计和内容要求。审核过程通常需要几天时间,但如果应用存在问题,可能会更长。

一旦你的应用获得批准,你可以在 App Store 上发布它。你可以选择立即发布,或者安排未来某个日期发布。

App Store 提交提示

提交应用到 App Store 时,有几个步骤可以增加被接受的机会。首先,你应确保所有必填信息已包含并准确无误。这些信息包括截图、视频、联系方式、应用描述和隐私政策:

  • 确保应用程序与最新的 iOS 版本和设备兼容。

  • 使用 beta 测试工具在提交应用到 App Store 之前进行测试。

  • 投资于优质的设计和开发服务,以确保您的应用符合 App Store 对质量的标准。

  • 遵循 App Store 提交应用的指南,包括提供完整且准确的应用描述。

通过遵循这些提示,应用开发者可以提高应用被 App Store 接受的机会。

Google Play 商店提交

Google Play 商店 (play.google.com/store/apps) 是 Android 设备的官方应用分发平台。与 Apple App Store 类似,开发者可以将他们的应用提交到 Play 商店进行审批,并分发给 Android 用户。

发布 Android 应用可能令人兴奋,但了解涉及的过程对于确保应用的成功至关重要。

将 Android 应用上传到 Google Play 商店涉及以下步骤:

  1. 在 Google Play 控制台中,进入所有应用程序标签页,点击创建应用按钮。选择一个默认语言并为您的应用输入标题。这将创建一个应用的草稿列表,您可以稍后更新更多细节。

  2. 接受开发者计划政策和美国出口法律,然后点击创建 应用按钮:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.23_B18113.jpg

图 6.23 – Google Play 控制台 – 创建应用

  1. 请确保使用安全证书签名您的 APK 或 AAB 文件,创建版本代码,并更新应用的版本名称。

  2. 在 Google Play 控制台中,进入发布概览部分,然后选择生产。通过选择适当的发布轨道(alpha、beta 或 production)来创建一个新的发布版本。上传您的 AAB 文件并填写必要的详细信息,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.24_B18113.jpg

图 6.24 – Google Play 控制台 – 发布仪表板

  1. 现在,您可以创建一个新的生产发布版本,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.25_B18113.jpg

图 6.25 – Google Play 控制台 – 创建生产发布

  1. 如果您的应用有应用内产品、订阅或使用任何其他 Google Play 服务,请在获利部分中进行相应配置:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.26_B18113.jpg

图 6.26 – Google Play 控制台 – 获利

最后,在应用内产品下,您可以添加 Google 支付详细信息,如下所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.27_B18113.jpg

图 6.27 – Google Play 控制台 – 应用内产品

提交后,谷歌将审核您的应用,通常需要几个小时到几天时间。审核通过后,您的应用将在 Google Play 商店上线,您可以开始跟踪其性能、管理更新并回应用户反馈。

此外,您可以将安卓应用上传到其他应用商店,而不是 Google Play 商店,例如亚马逊应用商店、华为应用市场和三星 Galaxy Store。

要将应用上传到亚马逊应用商店,您需要拥有一个亚马逊开发者账户(developer.amazon.com/)。

将安卓应用上传到亚马逊应用商店涉及以下步骤:

  1. 您需要配置您的 APK,并使用有效的证书进行签名。确保您的应用符合亚马逊的技术和设计指南(developer.amazon.com/docs/app-submission/understanding-submission.html),并且使用有效的签名证书构建:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.28_B18113.jpg

图 6.28 – 亚马逊开发者仪表盘

  1. 一旦您的应用准备好上传,您需要提供一些有关应用的信息。这包括应用的名称、描述、关键词、截图以及其他元数据,帮助用户发现并下载您的应用。亚马逊应用商店目前支持分阶段发布(developer.amazon.com/docs/app-submission/release-updates-in-staged-rollouts.html),让您逐步将应用的新版本引入市场。

  2. 完成所有必要的步骤后,您可以将应用提交到亚马逊应用商店进行审核。确保您已彻底测试应用,并遵守所有亚马逊的指南和政策。

  3. 亚马逊将审核您的应用程序,以确保其符合所有技术、设计和内容要求。审核过程通常需要几个小时,但如果应用程序存在问题,可能会花费更长时间。

一旦您的应用被批准,您可以在亚马逊应用商店发布它。您可以选择立即发布或安排未来的发布日期。

完成 CI/CD 工作流

要完成我们在第四章《通过移动 DevOps 实现持续集成和交付》中创建的 CI/CD 工作流,您可以将所需的步骤添加到您的流水线中,以将 iOS 和安卓应用发布到 TestFlight、App Store、Firebase App Distribution、Google Play 商店或任何其他分发平台。

例如,以下是使用 Xcode Archive & Export for iOSDeploy to App Store Connect 等步骤,通过 Bitrise 构建、测试和发布 iOS 应用到 App Store 的工作流概览,如下所示的截图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.29_B18113.jpg

图 6.29 – Bitrise iOS CI/CD 工作流

这是一个高层次的概述,展示了使用 Codemagic 构建、测试并发布 iOS 应用到 App Store 的 YAML 文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/codemagic-iOS.yml

此外,你还可以使用 GitHub Actions 执行相同的步骤,构建、测试并发布 iOS 应用到 App Store:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/.github/ios.yml

现在,让我们来看看使用 Bitrise、Codemagic 和 GitHub Actions 构建、测试和发布 Android 应用的一些示例。

我们将从 Bitrise 开始。以下截图展示了 Firebase 应用分发和 Google Play 的高级 Android CI/CD 工作流:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.30_B18113.jpg

图 6.30 – Bitrise Android CI/CD 工作流,用于 Firebase 应用分发和 Google Play

对于 Codemagic,你可以在 github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/codemagic-android.yml 找到 YAML 文件。

最后,对于 GitHub Actions,你可以在 github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/.github/android.yml 找到 YAML 文件。

此外,我们还可以将 Android 应用上传到其他应用商店,例如针对华为设备的 Huawei 应用商店。以下是使用 Bitrise 构建、测试和部署 Android 应用到 Huawei 应用商店的工作流示例:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.31_B18113.jpg

图 6.31 – Bitrise Android CI/CD 工作流,用于 Huawei 应用商店

一旦我们将应用发布并部署到不同的应用商店,我们需要等待质量团队给我们反馈关于版本的意见。如果通过审批,它可以发布到不同的商店;否则,我们将收到拒绝的理由。在这种情况下,我们必须修复问题并上传另一个版本。

现在,让我们来看一些常见的应用拒绝原因以及如何避免它们。

应用商店何时拒绝应用?

开发一个应用可能是一个耗时且昂贵的过程。应用开发者希望他们的应用能被应用商店接受,但有时它们会被拒绝。

当应用被拒绝时,这对开发者来说可能是一次令人沮丧的经历。理解应用被拒的原因非常重要,以便避免再次发生。

让我们来看一下 App Store 拒绝应用的最常见原因(developer.apple.com/app-store/review/#common-app-rejections),以及应用开发者可以做些什么来提高被接受的机会。

不完整或不正确的信息

最常见的拒绝原因之一是不完整或不正确的信息。例如,如果应用开发者没有提交所有必需的截图和视频,App Store 会拒绝该应用。应用开发者还应确保应用的名称、描述和关键词准确无误并且是最新的,提供完整且准确的信息,以确保应用能够被接受。

质量差

App Store 还会拒绝不符合质量标准的应用。这包括那些难以使用、存在过多漏洞,或者用户体验不佳的应用。因此,在第五章《实施稳健的移动应用测试策略》中,我们建议在 DevOps 和 CI/CD 流水线中使用测试自动化,以作为移动应用质量的把关。

此外,App Store 有特定的设计指南(developer.apple.com/app-store/review/guidelines/#design),必须遵循这些指南才能让应用被接受。例如,应用应易于导航,具有简洁的用户界面,并且没有拼写错误或其他问题。如果应用的设计未符合 App Store 的标准,可能会被拒绝。

不可接受的内容

App Store 还会拒绝包含非法内容的应用。这包括包含冒犯性或不当语言、侵犯版权或商标的内容,以及宣传仇恨或暴力的应用。应用开发者应确保其应用不包含任何可能被视为冒犯性或非法的内容。

正如你可能已经注意到的,我们讨论了手动发布移动应用的过程,目的是理解每个应用的流程和前提条件。

现在,让我们探讨一些自动化工具,这些工具可以帮助移动团队自动发布应用,而不是按照这里讨论的手动流程。

使用自动化发布工具自动化你的发布流水线

在撰写本文时,市面上有多种工具可帮助移动团队加速并自动化移动应用发布过程。这包括像 Runway 这样即用型的解决方案,以及 Bitrise 的发布管理附加组件。

Runway

Runway.teamwww.runway.team/)是一个简化移动应用发布过程的平台。它拥有一个用户友好的界面,使开发者能够轻松上传和分发他们的移动应用:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.32_B18113.jpg

图 6.32 – Runway 仪表盘

只需几次点击,你就可以将应用推送到不同的应用商店,省去了手动提交的烦恼。Runway 提供了不同 CI/CD 平台之间的集成,如 Bitrise、Codemagic、GitHub Actions 等,自动化构建、测试和发布应用程序的过程。这节省了你的时间和精力,并通过早期发现问题确保高质量的产品。

它支持 Android 和 iOS,使其成为开发跨平台应用程序的多功能选择。你可以在一个中心位置管理两个平台的应用发布,如下所示,针对 iOS 应用:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.33_B18113.jpg

图 6.33 – iOS 提交的 Runway 仪表板

你也可以对 Android 应用做同样的操作:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.34_B18113.jpg

图 6.34 – Android 提交的 Runway 仪表板

它允许你设置不同的发布渠道(例如 alpha、beta 和生产),让你可以在上线前与不同的用户群体进行测试:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.35_B18113.jpg

图 6.35 – Android 发布摘要的 Runway 仪表板

集成是 Runway 的核心,它投入大量精力使集成成为体验的一部分,确保其无缝、强大和安全:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.36_B18113.jpg

图 6.36 – Runway 与分发服务的集成

你可以通过其 iOS (demo.runway.team/dashboard/org/demo/app/appollo-ios) 和 Android (demo.runway.team/dashboard/org/demo/app/appollo-android) 的沙盒解决方案体验该平台。

Bitrise 发布管理附加组件

Bitrise 发布管理 (devcenter.bitrise.io/en/release-management.html) 中,你可以查看应用程序的发布状态。这样,所有团队成员都能了解即将发布的进度,从而更有效地协调工作。

使用发布管理,你可以自动化与特定发布相关的任务,例如监控功能准备情况或提交应用程序进行 App Store 审核:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.37_B18113.jpg

图 6.37 – Bitrise 发布管理附加组件

你可以随时检查提交过程的状态。例如,下面的截图显示我们已经将应用提交到 TestFlight,下一步是将应用提交到 App Store:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.38_B18113.jpg

图 6.38 – Bitrise 发布管理阶段

此外,其他工具也可以帮助你发布移动应用,例如 TestFairy (testfairy.com/app-distrubution) 和 AppCenter (learn.microsoft.com/en-us/appcenter/distribution/)。

启动应用

一旦应用被 App Store 团队批准,你可以通过多种方式通知用户新的版本发布,并且尝试通过ASO优化你的应用。让我们一起探索如何使用应用内更新。

应用内更新

用户可以直接通过应用更新他们的应用,而无需访问应用商店,这是一种很好的方式来更新应用的最新功能和修复的漏洞。应用内更新让用户能够直接在应用内更新,而无需去应用商店。

通过定期更新你的应用,你可以保持用户的参与度,减少用户因故障或缺乏新功能而放弃应用的可能性。

应用内更新有两种类型:

  • 使用灵活的应用内更新意味着用户可以在下载和安装更新的同时继续使用应用。更新完成后,用户会被提示重新启动应用,以便使用更新后的版本。

  • 即时应用内更新要求用户在使用更新版本之前先进行更新。一旦用户同意更新,更新后的应用就会被下载并安装。

应用内更新可以成为应用开发者改进用户体验、确保更多用户使用最新版本应用的强大工具。开发者通过实施应用内更新,可以增加用户参与度,减少流失,并在快速发展的移动应用市场中保持竞争力。

应用商店优化(ASO)

ASO 旨在优化移动应用,以便在应用商店中获得更好的可见度和更高的排名。这个过程包括研究关键词、撰写引人注目的标题和描述、建立链接、以及创建截图和视频。

ASO 受到以下因素的影响:

  • 应用的标题在搜索引擎优化中起着至关重要的作用,因为它是用户在搜索应用时首先看到的内容。

  • 应用的描述应该清楚地解释它是什么以及它的用途。描述中应该使用关键词,但要确保它自然流畅,而不是听起来像是垃圾信息。

  • 应用关键词是用户可能在应用商店搜索的词语或短语。将相关关键词包含在应用的描述、标题和其他元数据中,以提高应用的可见度。

  • 你可以通过鼓励用户评分和评论,以及回应负面反馈,来提高应用在搜索引擎结果中的可见度。

  • 确保应用图标醒目,并且能够反映应用的用途,帮助用户在浏览应用商店时快速识别。

  • 视频和截图可以帮助用户理解应用的功能。您应该使用高质量的图片和视频展示应用的核心功能。

  • 如果您的应用支持多语言,请优化每种语言的应用商店元数据。这样可以提高在不同地区的应用可见性。

  • 确保您的应用定期更新,添加新功能、修复 bug 和提升性能。

  • 对应用图标、截图和描述进行 A/B 测试,以找到表现最佳的组合。

ASO 是一个持续的过程,定期监控和更新应用商店列表非常重要,确保其保持最新状态并反映应用的任何变化。

根据收集到的数据,对应用商店列表进行迭代和优化。

遵循此检查清单可以提高您的应用的可见性和转化率,进而增加下载量和用户参与度。市场上有不同的工具可以帮助您进行 ASO,例如 appfigures (appfigures.com/aso-tools)。他们提供了关于 iOS 应用商店排名前列应用的有趣见解 (appfigures.com/top-apps/ios-app-store/united-states/iphone/top-overall),Google Play 应用 (appfigures.com/top-apps/google-play/united-states/top-overall),以及其他商店的相关数据。此外,他们还提供了关于 ASO 的不同资源和指南 (appfigures.com/resources/guides)。

发布后

一旦移动应用发布到不同的应用商店,开发者仍然需要执行各种维护任务。这包括监控应用评论、回应用户咨询、并更新应用以修复 bug 和添加新功能。

监控应用性能

一旦应用发布,就必须密切监控,以确保它符合发布策略要求。作为这一过程的一部分,您可以监控用户反馈和使用分析,处理用户反馈和评论,分析应用和 bug 报告。通过这样做,我们可以发现潜在问题,并确保用户获得最佳体验。我们将在第七章中探讨移动应用监控、可观察性和分析,建立移动应用监控、可观察性和分析

规划未来的发布

在发布当前版本后,保持您的移动应用更新并持续改进是保持用户参与度的关键。为了规划未来的发布,您可以按照以下步骤进行:

  1. 根据反馈和分析,更新您的产品路线图,包括新功能、增强功能和 bug 修复。您的业务目标应该与那些最能帮助用户的功能保持一致。

  2. 在实现计划的功能和增强时,请遵循编码和设计的最佳实践。确保所有的 bug 和问题都能被识别和修复。

实施发布列车

移动发布列车是一种加速您发布周期的过程。这种方法将帮助您更一致地发布,并允许分布式团队围绕应用开发更加对齐。

一旦您有了 CI/CD,您就可以构建列车。

在开发阶段,您的团队有时间审查、构建、测试和合并应该成为列车一部分的主分支功能,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_06.39_B18113.jpg

图 1.39 – 移动发布列车

在发布列车期间,可能涉及广泛的利益相关者,包括开发团队、质量保证团队、产品管理以及最终发布完成前的多次迭代和测试阶段。

如何实施发布列车

要实施发布列车,您必须执行以下步骤:

  1. 采用固定发布列车的时间表(例如,2 周或 1 周)。

  2. 确定谁将负责管理发布(发布经理)。

  3. 使用功能标志和分阶段发布来增加发布的信心。

  4. 确定发布列车的范围。发布计划包括每个发布中将包含的功能和功能。

  5. 根据明确的流程计划和优先考虑功能。产品经理、开发人员和用户等广泛的利益相关者应参与此过程。

请记住,这是一个持续的过程,因为我们处于维持阶段,这需要外部支持以确保我们保持在轨道上。

总结

移动应用发布管理是一个关键的应用开发过程,需要仔细规划、测试和执行。遵循本章中概述的最佳实践可以确保顺利的发布过程并最大化用户满意度。

移动应用的发布管理涉及计划、调度、协调和部署移动应用的新版本或更新到用户。这一过程对于定期更新应用程序以及新功能、错误修复和安全补丁至关重要。但是,在发布过程之前、期间和之后,我们应考虑不同的步骤。让我们一起探讨它们。

移动应用发布管理对企业优化用户体验和保持高质量至关重要。它涉及计划和实施新功能/更新和热修复。

然而,发布移动应用程序需要不同的流程、步骤和工具。我们在本章涵盖的主题中发现了移动应用程序发布管理过程的各个阶段。

在下一章中,我们将继续向我们的移动应用和 CI/CD 管道添加更多功能,以确保我们向用户快速而频繁地发布。

第三部分:监控、优化和保障移动 DevOps

移动 DevOps 涉及在生产环境中监控移动应用的性能和使用情况,并利用这些数据向开发团队提供反馈。这有助于快速识别和解决问题,提升整体用户体验。

本部分包含以下章节:

  • 第七章*,建立移动应用监控、可观察性和分析*

  • 第八章*,确保移动应用和 DevOps 安全*

  • 第九章*,移动 DevOps 最佳实践*

第七章:建立移动应用的监控、可观测性和分析

在前一章中,我们学习了如何成功将移动应用发布到相关的应用商店。然而,这并不是 CI/CD 过程的最后阶段。下一个阶段是持续支持我们的客户并追踪应用使用情况、性能、崩溃等。这就是移动应用的监控、可观测性和分析发挥作用的地方。在本章中,我们将涵盖以下内容:

  • 什么是监控?

  • 什么是可观测性?

  • 实施监控和可观测性对移动应用的好处

  • 监控和可观测性之间的区别

  • 什么是分析?

  • 在监控和可观测性中考虑的因素

  • 实施移动应用的监控和可观测性的步骤

  • 移动应用的监控、可观测性和分析工具

  • 移动应用监控、分析和可观测性的关键指标

  • 实施移动应用的持续监控

移动应用之所以复杂,是因为它们与各种外部系统交互,如服务器、API 和数据库。这种复杂性会使得在问题发生时识别和诊断问题变得具有挑战性。监控、可观测性和分析可以实时反馈应用性能、用户行为和系统交互情况。这些信息可以帮助开发人员在问题影响用户之前识别潜在问题,并在问题发生时开发有效的解决方案。

另外,为了提高应用的评级、用户参与度和收入,您应建立监控和可观测性实践,以在它们对用户产生负面影响之前识别和解决任何问题。确保您的移动应用程序表现最佳非常重要,提供无缝的用户体验。

但首先,让我们更多了解监控、可观测性和分析。

什么是监控?

移动应用的监控指的是持续跟踪和分析移动应用程序的性能、可靠性和整体稳定性,以确保无缝的用户体验。它涉及收集关于应用崩溃、错误、冻结和其他性能问题的数据,帮助开发人员识别和解决可能会对用户体验产生负面影响的任何问题。

监控的目标是识别和解决可能影响用户体验质量的任何问题,例如崩溃或加载时间过长。

下图重点介绍监控中的不同关键组件,如应用崩溃、错误跟踪和应用性能:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.01_B18113.jpg

图 7.1 – 监控组件

为了确保应用程序的最佳性能和用户满意度,开发团队必须优先解决这些关键组件。通过分析和解决潜在问题,团队可以保证卓越的用户体验。让我们深入了解每个组件,以充分理解它们的重要性:

  • 应用崩溃报告:这包括识别和收集崩溃信息,包括应用崩溃的频率、受影响的设备以及导致崩溃的具体情况。这些数据有助于理解和修复根本原因。

“监控崩溃的症状,而不仅仅是 崩溃本身。”*

  • 错误追踪:这包括 API 错误、网络错误或应用运行时发生的代码异常。这些信息可以用来解决和诊断应用代码中的问题。

  • 应用性能监控:这衡量应用的响应性、加载时间及其他性能指标,以确保平稳的用户体验。

什么是可观察性?

移动应用的可观察性指的是通过分析应用的外部输出(如日志、指标和追踪)来获得对应用内部状态的洞察。它使开发人员或发布团队能够监控、理解和排查应用的行为和性能。

可观察性是我们通过 应用二进制文件 在用户设备生产环境中看到发生的事情的能力。*”

可观察性对维护高质量的用户体验至关重要,确保应用的可靠性和稳定性。

可观察性专注于不同的关键方面,如图 7.2所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.02_B18113.jpg

图 7.2 – 可观察性组件

如我们所见,可观察性的目标是深入了解系统的运行方式,检测问题并有效地排除故障。可观察性关注多个关键方面,包括以下内容:

  • 日志:在应用运行时,日志包含关于用户操作、系统事件和错误信息的内容。分析日志可以帮助开发人员识别模式、诊断问题,并更好地了解应用。

  • 指标:指标跟踪应用的健康状况,识别瓶颈并优化性能。

  • 追踪:追踪提供了对单个请求或事务的详细视图,展示它们如何在应用的各个组件中流动,如网络调用、API 交互和数据库查询。

为移动应用实施监控和可观察性带来了许多好处,这些好处提升了应用的性能、用户体验和整体成功。让我们来看一些主要的优势。

实施移动应用监控和可观察性的好处

实施移动应用监控和可观察性有多个好处,其中一些如下:

  • 监控和可观察性使你能够识别和解决应用中的性能瓶颈。

  • 持续跟踪应用性能和用户行为有助于你做出数据驱动的决策,从而改善用户体验,最终提高用户留存率和满意度。

  • 你可以通过监控和可观察性快速检测和诊断问题,并在它们对用户产生负面影响之前解决问题。

  • 在问题变得严重之前,通过更好地理解应用的行为,可以主动解决可观察性相关的潜在问题。

“一旦我们在应用中具有可观察性,当事情变得奇怪但仍然 工作时,我们可以发出警报。”

  • 可分析您应用的性能数据以优化资源使用,从而节省成本并提高效率。

监控与可观察性的区别

监控和可观察性是互补的实践,在一起使用时,有助于团队构建和维护高质量的移动应用。正如图 7**.3所示,监控侧重于积极追踪性能并响应已知问题,而可观察性则强调深入理解应用行为,以识别趋势、诊断未知问题和优化性能:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.03_B18113.jpg

图 7.3 – 监控与可观察性

监控系统是被动的,而可观察性系统是主动的。通过结合这两种实践,团队可以创建全面的策略来维护和改进他们的移动应用。

什么是分析?

在移动应用分析中,收集、测量、分析和解释有关应用使用、用户行为和性能的数据。开发人员、营销人员和产品经理可以利用移动应用分析来优化应用性能、增强用户参与度和提高客户忠诚度。分析用户偏好和痛点能够实现数据驱动的决策和持续改进。

分析帮助您了解如何优化用户行为和应用,以实现业务目标。

分析侧重于不同的关键方面,如图 7**.4所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.04_B18113.jpg

图 7.4 – 分析组件

正如我们所看到的,分析涵盖了各种关键方面:

  • 用户获取和归因:跟踪新用户的来源,如有机搜索、付费广告或推荐,有助于确定营销活动的有效性,并识别最有价值的用户获取渠道。

  • 用户参与度:监控用户与应用的互动,包括会话持续时间、会话频率、访问的屏幕和执行的应用内操作,可以深入了解用户偏好,帮助识别改进的方向。

  • 用户保留和流失:分析用户保留率和流失模式有助于了解影响用户满意度或不满意度的因素,并帮助开发人员实施促进长期用户忠诚的改变。

  • 用户分割:根据人口统计、行为和偏好对用户进行分组,可实现个性化营销活动、定向促销和量身定制的用户体验。

  • 应用内购买和收入:跟踪应用内购买、订阅收入和广告收入有助于评估应用的盈利策略,并识别优化和增长的机会。

监控和可观察性中的考虑因素

为移动应用建立监控和可观察性策略时,我们需要考虑以下因素:

  • 定义监控和可观察性策略的关键目标和目标。这决定了需要跟踪的指标,如应用性能、用户参与度和错误率,从而减少停机时间,确保符合法规或改善用户体验。

  • 考虑应用的目的和用户期望,以确定合适的指标。例如,如果应用是一个游戏,你应该跟踪用户参与度,例如玩游戏的时间、完成的关卡数和社交分享。另一方面,如果应用是生产力工具,你应该跟踪应用性能,例如响应时间、加载时间和错误率。

  • 定义实现这些目标所需的工具和技术也非常重要。一旦目标确定,接下来的步骤就是实施监控和可观察性工具。监控和可观察性有多种工具可供选择,包括 APM(应用性能管理)、日志管理和分析工具。选择与目标和需求相符的正确工具至关重要。

  • 确定需要监控的关键指标和 KPIs(关键绩效指标),如系统性能、资源利用率、错误率和响应时间。确保这些指标是相关的、可操作的,并且可以用来跟踪朝着目标的进展。

  • 收集数据只是第一步。分析已收集的数据并根据获得的洞察采取行动至关重要。你可以利用这些数据来识别性能瓶颈、解决问题并优化应用性能。

  • 确定哪些数据源是必要的,以收集所需的指标。这可以包括日志、应用程序追踪和系统或网络指标。

  • 选择适当的工具和技术来分析和可视化数据,如仪表板、异常检测和警报机制。确保这些工具能够提供可操作的洞察,以支持决策。

  • 设置警报和通知机制,及时通知相关利益相关者出现问题或潜在问题。配置警报阈值和升级策略,以平衡误报和漏报。实时警告开发者应用崩溃和错误,并提供关于问题原因的详细信息。

  • 实施应用内反馈。可以直接在应用内提供反馈和建议,这有助于开发者识别改进点。

  • 确保你的监控和可观察性策略与其他基础设施中的工具(如事件管理或 CI/CD)良好集成。

  • 为团队成员提供培训和文档,确保他们能有效使用监控和可观测性工具,并理解收集到的数据。

实现移动应用监控和可观测性的步骤

让我们看看实现监控和可观测性的步骤:

  1. 根据你的需求、预算和平台支持选择适合的工具。一些流行的选择包括以下几种:

    • 监控工具:Firebase Crashlytics、Bugsnag、Sentry、Embrace 和 Instabug

    • 分析工具:Firebase Analytics、Amplitude、Mixpanel 和 Google Analytics for Mobile

    • 可观测性工具:Datadog 和 NewRelic

    • 移动性能 工具:Emerge

    • 事件管理:PagerDuty、Incident.io 和 Grafana Incident

  2. 对于选择的工具,按照官方文档的步骤在移动应用中设置 SDK。这通常涉及向构建或依赖文件中添加依赖项,并在应用代码中初始化 SDK。

  3. 配置监控工具以捕捉崩溃、非致命错误和性能问题。你还可以设置自定义事件、标签或用户属性,以便为调试提供更多上下文。

  4. 定义你希望追踪的事件和用户属性,同时考虑用户参与度、转化率和留存率等方面,使用分析工具来辅助决策。

  5. 通过在应用中添加代码来实现事件追踪,记录在相关节点上定义的事件和用户属性。例如,当用户完成购买或到达特定应用页面时,你可以记录一个事件。

  6. 定期监控你选择的监控工具的仪表盘,以识别崩溃、性能瓶颈和其他问题。

  7. 设置警报和通知,以便及时了解需要立即处理的关键问题。如果发生紧急问题,你还可以将这些警报通过 ChatOps 集成发送为 Slack 消息给 Microsoft 团队,甚至通过 SMS 或电话通知。

  8. 使用你选择的分析工具的仪表盘分析用户行为,例如活跃用户数、会话时长和用户留存率。

  9. 创建自定义报告或使用内建报告来识别趋势、模式和改进的方向。

  10. 利用分析洞察设计并实施 A/B 测试,以优化应用的用户体验、参与度和转化率。

  11. 分析 A/B 测试的结果,并做出基于数据的决策以改进你的应用。

现在我们已经了解了如何开始进行移动应用的监控和可观测性,接下来让我们讨论市场上移动应用的监控、可观测性和分析工具,以及它们之间的差异。

移动应用的监控、可观测性和分析工具

开发者可以使用工具监控应用性能,接收实时通知,并通过 SDK 与警报工具集成。我们一起来看看这些工具。

监控和可观测性工具

如前所述,监控和可观察性工具应与事件管理工具集成,以便能够处理值班管理或应对事件。

可观察性工具对于移动应用开发和维护至关重要。它们提供宝贵的数据和指标,帮助识别瓶颈、改善应用稳定性并增强用户体验。流行的选项包括监控工具。

让我们讨论一些可以帮助我们实现这一目标的工具。

Firebase Crashlytics

Firebase Crashlytics (firebase.google.com/products/crashlytics) 是一个优秀的崩溃报告工具,专为移动应用开发者设计,提供 实时崩溃报告、详细诊断和与其他 Firebase 工具的无缝集成。其直观的仪表板和准确的崩溃报告使其成为开发者改善应用稳定性的可靠选择。

以下是 Firebase Crashlytics 的一些功能:

  • 实时崩溃报告:它监控你的应用并自动捕获崩溃数据,提供关于任何问题的最新信息。

  • 详细的崩溃诊断:它深入分析每次崩溃的细节,并提供丰富的诊断信息,如堆栈跟踪、设备信息和用户数据,帮助你定位问题。

  • 崩溃分析:它提供有价值的分析,帮助识别趋势、检测常见问题并优先修复漏洞。

  • 与 Firebase 的集成:作为 Firebase 套件的一部分,Crashlytics 能与其他 Firebase 工具无缝协作,简化你的应用开发工作流程。

  • 跨平台支持:它支持 Android 和 iOS 应用,使其成为移动应用开发者的多功能选择。

你可以通过访问 https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-sdk 来轻松地将 Crashlytics SDK 添加到你的 Android 应用中;对于 iOS、Flutter 和 Unity 应用,你可以按照相同的步骤操作。

此外,你还可以将 Crashlytics 数据导出到 BigQuery (firebase.google.com/docs/crashlytics/bigquery-export) 进行进一步分析。你可以使用 BigQuery SQL 分析数据,导出到其他云服务提供商,并使用 Google Data Studio 可视化数据并创建自定义仪表板。

此外,你还可以通过 Android Studio 内的 App Quality Insights 分析 Firebase Crashlytics 中的任何问题 (developer.android.com/studio/debug/app-quality-insights)。

Xcode Organizer

Xcode Organizerdeveloper.apple.com/documentation/xcode/analyzing-the-performance-of-your-shipping-app)是一个优化 Apple 生态系统内移动应用性能的工具。它能够提供详细的性能数据、实时监控和以用户为中心的分析,使其成为开发者在提供卓越用户体验过程中不可或缺的资源。

Xcode Organizer 帮助你管理 iOS、macOS、watchOS 和 tvOS 应用开发项目的各个方面。它提供了组织、归档和分发应用的功能,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.05_B18113.jpg

图 7.5 – 从窗口菜单打开 Xcode Organizer

你可以查看崩溃情况以及与特定版本相关的不同指标,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.06_B18113.jpg

图 7.6 – Xcode Organizer 的主屏幕

以下是 Xcode Organizer 的一些功能:

  • 深入的性能洞察:这个工具提供了丰富的性能指标,从 CPU 和内存使用情况到网络活动。它可以帮助你深入了解应用的内部运行情况。

  • 实时监控:你可以实时观看应用在用户交互时的表现。这个功能特别有助于识别可能影响用户体验的性能问题和崩溃。

  • 以用户为中心的分析:Xcode Organizer 的一大亮点是能够根据不同的用户交互分析性能数据。这对进行有针对性的改进、提升最常见的用户场景至关重要。

  • 对比分析:你可以衡量不同版本或构建的应用性能。这有助于你追踪所做更改的影响,并找出需要关注的区域。

然而,值得注意的是,这个工具仅与在 Apple 生态系统内为 iOS、macOS、watchOS 和 tvOS 开发的应用兼容。开发跨平台应用的开发者可能会觉得这个工具不太有用。

需要记住的是,Xcode 的界面和特性可能会随着新的更新而有所变化。为了保持信息的更新,最好参考 Xcode 文档(developer.apple.com/documentation/xcode)或相关资源以获取最新信息。

Firebase 性能监控

Firebase 性能监控 (firebase.google.com/products/performance) 是一个旨在帮助您分析和优化应用性能,从而提供流畅用户体验的工具。它是移动应用开发者分析和优化性能的一个好选择。凭借实时性能监控、可自定义的指标以及与其他 Firebase 工具的无缝集成,它是确保流畅用户体验的强大工具。

以下是 Firebase 性能监控的一些功能:

  • 实时性能监控:它自动实时跟踪应用的性能指标,为您提供有关应用运行情况的宝贵见解

  • 可自定义的指标:可以根据应用的具体需求创建定制的性能指标

  • 详细的性能数据:它分析延迟、渲染、网络使用等方面的详细数据,以确定性能瓶颈并优化您的应用

  • 跨平台支持:它与安卓和 iOS 应用无缝兼容,是移动应用开发者的多功能选择

  • 与 Firebase 集成:它作为 Firebase 套件的一部分,这意味着性能监控可以与其他 Firebase 工具无缝集成,从而简化您的应用开发流程

  • 性能数据仪表盘:性能数据以用户友好的仪表盘形式展示,便于您分析指标并优化应用

您可以通过遵循 firebase.google.com/docs/perf-mon 上的步骤,轻松将性能监控 SDK 添加到您的 Android、Flutter 或 iOS 应用中。

当您添加性能监控 SDK 时,Firebase 会自动收集应用中若干常见过程的数据,包括以下内容:

  • 苹果和安卓应用的启动时间

  • 苹果和安卓应用的屏幕渲染

  • 所有类型应用的网络请求

以下是从性能监控中收集到的一些信息示例:https://firebase.google.com/support/privacy?authuser=0&hl=en#performance-monitoring-collected-info

Instabug

Instabug (www.instabug.com/) 是一个强大的全方位平台,专为寻求全面的错误报告、崩溃报告和性能监控工具的移动应用开发者设计。其便捷的集成、直观的仪表盘和广泛的功能使其成为那些希望提升应用稳定性和用户体验的开发者的优秀选择,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.07_B18113.jpg

图 7.7 – 发布视图

以下是 Instabug 的一些功能:

  • 应用内错误报告:它允许用户在应用内直接报告错误,并附带注释截图,使收集宝贵反馈变得更加简单:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.08_B18113.jpg

图 7.8 – Bug 报告视图

  • 崩溃报告:它帮助实时获取崩溃报告,并提供详细信息,如堆栈跟踪和用户数据,使你能够快速识别并修复问题:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.09_B18113.jpg

图 7.9 – 崩溃视图

  • 性能监控:Instabug 通过其监控工具帮助你关注应用的性能,跟踪关键指标,如应用启动时间、网络请求和 UI 响应性:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.10_B18113.jpg

图 7.10 – Bug 报告详细视图

  • 应用内调查:此调查通过可定制的应用内调查轻松收集用户反馈,帮助你做出数据驱动的决策,从而提升你的应用:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.11_B18113.jpg

图 7.11 – 创建测试调查

  • 集成:Instabug 与流行的项目管理、沟通和问题跟踪工具(如 Jira、Slack 和 GitHub)集成,简化你的开发工作流程。

  • 跨平台支持:Instabug 与 Android、Flutter、React Native、Xamarin、Cordova 和 iOS 应用无缝兼容,满足各种开发者需求:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.12_B18113.jpg

图 7.12 – Instabug 支持的平台

此外,Instabug 还提供了一个沙盒环境 (demo-dashboard.instabug.com/demo),让你可以体验产品并了解更多功能。

但请注意,Instabug 的免费版本有一些限制,可能需要升级到付费计划才能访问高级功能和更高的使用限制。

这是将 SDK 添加到你的 iOS 应用的文档:docs.instabug.com/docs/ios-integration

Embrace

Embrace (embrace.io/) 是一款强大的移动应用性能管理平台,提供全面的性能监控、崩溃报告和用户会话跟踪,具体如以下截图所示。其独特的重播功能和详细的洞察分析使其成为开发者优化应用性能和用户体验的绝佳选择。然而,缺乏免费版本以及初期的学习曲线可能是一些用户的挑战:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.13_B18113.jpg

图 7.13 – ANR 摘要

以下是 Embrace 的一些功能:

  • 性能监控:Embrace 提供详细的应用性能洞察,涵盖关键指标,如应用启动时间、网络请求和用户界面响应性

  • 崩溃报告:你可以获取实时崩溃报告,包含丰富的信息,如堆栈跟踪、设备数据和用户操作,帮助你快速识别并解决问题:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.14_B18113.jpg

图 7.14 – 崩溃摘要

  • 用户会话跟踪:Embrace 使你能够监控单个用户会话,提供完整的用户体验图景,包括交互和遇到的问题:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.15_B18113.jpg

图 7.15 – 用户时间线

这里是将 SDK 添加到你的 Android 应用程序的文档:embrace.io/docs/android/integration/integration-steps/

Sentry

Sentry for 移动应用 (sentry.io/for/mobile/) 是一款强大的错误监控和报告解决方案,简化了调试过程。它的易于集成、实时错误追踪和直观的仪表板,使其成为一个在快速捕获和修复问题方面非常有价值的工具:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.16_B18113.jpg

图 7.16 – 项目视图

以下是 Sentry 的一些功能:

  • 实时错误监控:Sentry 帮助自动跟踪和捕捉应用中的错误,提供关于任何问题的最新信息。

  • 详细的错误诊断:Sentry 帮助获取深入的诊断信息,如堆栈跟踪、设备信息和用户数据,帮助你准确定位错误的根本原因:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.17_B18113.jpg

图 7.17 – 问题详细视图

  • 问题分组:Sentry 智能地将相似的错误分组,使得识别趋势和优先修复变得更加容易:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.18_B18113.jpg

图 7.18 – 问题视图

  • 集成:Sentry 与流行的项目管理、通信和问题追踪工具如 Jira、Slack、GitHub 等进行集成,以简化你的开发工作流程:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.19_B18113.jpg

图 7.19 – 集成视图

  • 跨平台支持:Sentry 支持 Android、Flutter、React Native 和 iOS 应用,成为开发者的多功能选择。

  • 实时错误追踪:Sentry 的实时错误监控可以帮助你快速发现和修复问题,确保更流畅的用户体验。

  • 直观的仪表板:Sentry 的用户友好型仪表板让错误监控和数据分析变得轻松,帮助你随时掌握应用的稳定性。

这里是将 SDK 添加到你的 Flutter 应用程序的文档:docs.sentry.io/platforms/flutter/。Sentry 还为客户提供沙盒环境 (try.sentry-demo.com/organizations/noted-baboon/issues/),以便他们通过演示应用程序探索产品。

Google Play 控制台关键数据

Google Play Console vitals (developer.android.com/topic/performance/vitals) 是一个为 Android 应用开发者提供的工具,旨在轻松监控和优化应用性能。它的无缝集成、数据驱动的见解以及免费的使用方式,使其成为跟踪应用稳定性、电池使用情况和渲染性能的理想选择:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.20_B18113.jpg

图 7.20 – Android vitals 概览

以下是 Android vitals 的一些功能:

  • Android vitals 仪表盘:Google Play Console vitals 提供一个用户友好的仪表盘,概述应用的性能指标,如崩溃率、应用无响应ANR)率等。

  • 稳定性监控:您可以实时跟踪崩溃和 ANR,以识别并解决影响应用稳定性的问题。

  • 渲染性能:您可以监控应用的渲染性能,包括渲染缓慢和帧冻结等问题,以确保流畅的用户体验。

  • 电池使用:您可以关注过度唤醒和唤醒锁,以优化应用的电池使用并最小化用户设备的电量消耗。

  • 用户反馈:您可以访问用户评论和评分,获取有关应用性能和改进方向的深入见解。

请注意,Google Play Console vitals 仅适用于 Android 应用。因此,iOS 应用开发者应考虑其他性能监控解决方案。Android Studio 的最新版本现在支持 Android vitals,无需任何额外的 SDK 或配置(developer.android.com/studio/preview/features#aqi-android-vitals)。

Datadog

Datadog for mobile apps (www.datadoghq.com/dg/real-user-monitoring/mobile-rum/) 是一个强大的监控和分析平台,提供性能监控、详细的错误报告以及强大的分析功能。它的灵活性和跨平台支持使其成为开发者在寻找一体化移动应用监控平台时的理想选择。

以下是 Datadog 的一些功能:

  • 实时性能监控:您可以实时监控移动应用的性能,包括网络请求、错误和延迟等关键指标。

  • 详细的错误报告:Datadog 提供关于错误和崩溃的详细信息,包括堆栈跟踪、设备信息和用户操作,帮助您快速识别和解决问题:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.21_B18113.jpg

图 7.21 – 错误和崩溃跟踪视图

  • 可自定义仪表盘:Datadog 创建个性化的仪表盘,以可视化和分析应用的性能数据,以最适合您团队的方式进行展示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.22_B18113.jpg

图 7.22 – 仪表板视图

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.23_B18113.jpg

图 7.23 – 添加新的日志

以下截图显示了如何将 SDK 依赖项添加到 Android 应用程序的 Gradle 文件中,以便你能够监控应用程序的性能:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.24_B18113.jpg

图 7.24 – 添加新的 Android 日志

  • 集成:Datadog 与广泛的其他工具和平台集成,允许你集中管理数据并简化开发流程,如以下截图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.25_B18113.jpg

图 7.25 - 集成视图

  • RUM 和会话回放 (docs.datadoghq.com/real_user_monitoring/):Datadog 提供对单个用户活动和体验的实时可见性,从而带来以下好处:

    • 跟踪移动应用程序屏幕、用户操作、网络请求和前端代码的性能

    • 跟踪长期和版本中的持续性错误和问题:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.26_B18113.jpg

图 7.26 – UX 监控视图

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.27_B18113.jpg

图 7.27 – 为 Android 设置实时用户监控

你可以通过将 SDK 添加到应用程序的依赖项中来为应用程序设置实时用户监控,以下截图展示了如何操作:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.28_B18113.jpg

图 7.28 – 设置实时用户监控

  • 确定应用程序使用的国家、设备和操作系统,监控单个用户的操作流程,并分析用户与应用程序的互动(最常访问的页面、点击、交互和功能使用):

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.29_B18113.jpg

图 7.29 – 为 iOS 设置实时用户监控

  • 获取有关用户会话的所有信息以排查问题(会话持续时间、交互、加载的资源和错误)

New Relic

New Relic 移动应用版 (newrelic.com/platform/mobile-monitoring) 是一款性能监控和分析解决方案,提供监控、详细的崩溃报告和高级分析功能。它的可定制性和对 Android、iOS、React Native、Capacitor、Cordova 和 Flutter 的跨平台支持,使其成为开发者优化应用性能和用户体验的优秀选择。然而,其复杂性和缺乏免费套餐可能会成为一些用户的障碍。

以下是 New Relic 的一些功能:

  • 实时性能监控:New Relic 提供对关键性能指标的实时监控,如应用加载时间、网络请求和错误率

  • 崩溃报告:你可以获取有关崩溃的详细信息,包括堆栈跟踪、设备信息和用户操作,以帮助你快速识别并解决问题

  • 可定制仪表盘:你可以创建个性化的仪表盘,以一种适合团队需求的方式来可视化和分析应用的性能数据

  • 用户互动跟踪:你可以监控用户在应用中的互动,深入了解用户体验并识别需要改进的地方

  • 集成:New Relic 与流行的工具和平台集成,使你能够集中管理数据并简化开发工作流,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.30_B18113.jpg

图 7.30 – 在 New Relic 上设置移动应用

你可以从选择希望使用的平台开始,比如 Android,然后继续完成其余配置,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.31_B18113.jpg

图 7.31 – 在 New Relic 上设置 Android 应用

之后,你可以将 SDK 添加到 Gradle 文件中,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.32_B18113.jpg

图 7.32 – Android 构建配置

配置完成后,你将看到一个显示 Android 应用概览的仪表盘,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.33_B18113.jpg

图 7.33 – Android 应用概览

你可以找到不同的示例,了解如何为 Android (docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-android/get-started/introduction-new-relic-mobile-android/)、iOS (docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/get-started/introduction-new-relic-mobile-ios/)、Flutter (docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application/) 和 React Native (docs.newrelic.com/docs/mobile-monitoring/new-relic-monitoring-react-native/monitor-your-react-native-application/) 设置 New Relic。

Emerge

Emerge (www.emergetools.com/) 是一个创新的移动应用优化平台,旨在帮助开发者减少应用大小并提高整体性能。

它专注于应用大小减少资源优化代码分析,使其成为移动开发者在希望最小化应用占用空间并提升用户体验时的推荐选择。

以下是 Emerge 的一些关键功能:

  • 应用大小减少:Emerge 分析你的移动应用,找出优化的地方,使你能够在不影响功能的前提下减少应用的大小:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.34_B18113.jpg

图 7.34 – iOS 应用仪表盘

此外,你还可以使用 Emerge 来分析应用的大小,例如,iOS 应用,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.35_B18113.jpg

图 7.35 – iOS 应用大小分析

  • 资源优化:Emerge 帮助优化应用的图像、字体和其他资源,最小化它们对应用大小和性能的影响。

  • 代码分析:你可以深入了解应用的代码库,识别未使用的代码,发现重构和优化的机会:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.36_B18113.jpg

图 7.36 – iOS 大小分析 X 光

  • 快照测试(测试版):你可以为每次上传创建快照。这些快照会自动与拉取请求进行比较,帮助你看到哪些内容发生了变化,哪些被添加或移除,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.37_B18113.jpg

图 7.37 – 快照测试视图

  • CI 集成:通过 GitHub Actions 和 Codemagic,你可以配置自动化的比较(PR 评论/状态检查)显示在你的版本控制系统(VCS)中,使得组织中的每个人都能轻松了解你的性能指标。更多细节可以在此查看:docs.emergetools.com/docs/integrate-into-ci

  • 自动告警:例如,通过 Slack 告警 (docs.emergetools.com/docs/slack),当上传的构建触发配置阈值时,可以向某个频道发送告警。

事件管理

移动应用的事件管理工具在确保应用的顺利运行和稳定性方面起着至关重要的作用,帮助你检测、分析和应对事件,如崩溃、性能问题以及其他技术问题。

让我们来看一些在移动应用开发中常用的流行事件管理工具。

Incident.io

Incident.io (incident.io/) 是一款强大的事件管理平台,旨在帮助团队有效地处理事件并提高系统韧性。它的集中事件跟踪、改进的沟通、自动化功能和事后分析能力使其成为那些希望简化事件响应流程的团队的优秀选择。

以下是 Incident.io 的一些功能:

  • 事件跟踪:集中所有与事件相关的信息,使得可以通过一个平台轻松追踪和管理事件

  • 沟通:通过内建聊天功能以及与流行的沟通工具集成,促进事件期间团队的沟通和协作

  • 自动化:通过触发预定义的操作来自动化事件响应流程,例如告警响应者、创建工单和更新利益相关者

  • 事后分析:通过综合报告进行事后回顾,帮助团队从事件中学习并提高系统的韧性

  • 集成:与流行的监控和工单工具集成,简化事件管理工作流程

PagerDuty

PagerDuty (www.pagerduty.com/) 是一款事件管理平台,旨在帮助团队有效地处理事件并提高系统可靠性。它的全面事件跟踪、灵活的告警功能、改进的沟通、自动化功能和事后分析能力使其成为那些希望简化事件响应流程的团队的优秀选择。

以下是 PagerDuty 的一些功能:

  • 事件跟踪:集中所有与事件相关的信息,使得可以通过一个平台轻松追踪和管理事件

  • 告警和升级:配置告警规则和升级策略,确保在事件发生时,正确的团队成员得到通知并参与其中

  • 沟通:在事件发生期间,通过内置聊天功能和与流行通信工具的集成,促进团队之间的沟通与协作。

  • 自动化:通过预定义的操作(如告警响应者、创建工单和更新利益相关者)自动化事件响应过程。

  • 事后分析:进行事后事件回顾,提供全面报告,帮助团队从事件中学习并提高系统的韧性。

  • 集成:与流行的监控、告警和工单工具集成,简化事件管理工作流。

此外,我们还可以通过以下步骤使用分析工具优化移动应用的性能:

  1. 识别性能问题:确定需要改进的应用性能的具体方面,如启动时间、帧率或内存使用。

  2. 选择分析工具:选择一个适合平台和解决的性能问题类型的工具。一些常见的移动应用分析工具包括 XCode Instruments(iOS)(developer.apple.com/documentation/xcode)、Android Profiler (developer.android.com/studio/profile/android-profiler) 和 Flutter Profiler (docs.flutter.dev/perf/ui-performance)。

  3. 运行分析工具:使用分析工具收集应用性能的数据。这可能涉及在设备或模拟器上运行应用,并执行特定的操作或场景,以模拟实际使用情况。

  4. 分析结果:回顾由分析工具收集的数据,以识别应用性能中的任何问题或瓶颈。

  5. 优化应用:利用从分析工具中获得的见解,通过修复任何已识别的问题或提高应用代码和资源的效率来优化应用的性能。

分析工具

移动应用的分析工具在帮助团队做出数据驱动决策、增强用户体验和实现商业目标方面起着至关重要的作用。

通过提供有价值的指标和用户洞察,这些工具使开发者和营销人员能够持续优化他们的应用,并在动态的移动应用市场中保持竞争力。

让我们来看看一些用于移动应用的流行分析工具。

移动应用的 Google Analytics

Google Analytics for Mobile Apps (developers.google.com/analytics/solutions/mobile) 就像为你的应用配备了一个私人侦探。这款强大的工具帮助你收集关于用户如何与应用互动的宝贵信息。无论你是在运行一个游戏、生产力应用,还是介于两者之间的应用,这个工具都能提供有助于你做出更好决策的见解。

以下是 Google Analytics for Mobile Apps 的一些功能:

  • 用户群体分析和人口统计学:了解您的应用程序有多少用户,他们的特征是什么,以及他们来自哪里

  • 用户行为分析:深入了解用户在应用中的行为和交互

  • 应用内购买收入测量:跟踪和分析货币化和支付指标

  • 定制报告:创建对您的业务有益的报告

  • 视觉用户旅程导航:通过图形路径分析增强用户体验

  • 用户群体行为分析:通过数据分割和分析获得更深入的洞察

  • 利用谷歌分析数据:在谷歌产品中利用谷歌分析数据

  • 多平台支持:Google Analytics 为 Android、iOS 和 Flutter 移动应用提供分析数据

您可以在 firebase.google.com/docs/analytics 学习如何将 SDK 添加到您的 Android、iOS、Flutter 和 Unity 应用中。

振幅

振幅 (amplitude.com/) 是一个强大的产品分析平台,可以深入洞察用户行为,帮助团队做出数据驱动的决策,优化其产品。其易用性、可扩展性和集成能力使其成为企业驱动产品增长的优秀选择:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.38_B18113.jpg

图 7.38 – 振幅首页

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.39_B18113.jpg

图 7.40 – 向振幅添加新移动应用

以下是振幅的一些关键特点:

  • 行为分析:跟踪用户在产品中的动作,帮助您理解用户行为模式并识别改进的空间

  • 漏斗和队列:分析用户转化漏斗和队列保持,以衡量产品功能和营销工作的成功

  • 实时分析:实时监控产品性能,使您能够快速响应用户行为的任何问题或变化

  • 可定制仪表板:创建个性化仪表板,可视化和分析团队最关注的数据

  • A/B 测试和实验:运行实验和 A/B 测试,优化产品的用户体验并测量变化的影响

Mixpanel

Mixpanel (mixpanel.com/) 是一个产品分析平台,可以深入洞察用户行为,帮助团队做出数据驱动的决策,优化其产品。其易用性、可扩展性和集成能力使其成为企业驱动产品增长的优秀选择:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_07.40_B18113.jpg

图 7.40 – 向 Mixpanel 添加新移动应用

以下是 Mixpanel 的一些特点:

  • 行为分析:跟踪用户在产品中的操作,帮助你理解用户行为模式并识别改进的地方。

  • 漏斗和用户群体:分析用户转化漏斗和用户群体留存情况,以衡量你的产品特性和营销效果的成功。

  • 实时分析:实时监控产品性能,使你能够迅速响应任何问题或用户行为的变化。

  • 可定制的仪表板:创建个性化的仪表板,以可视化和分析对你的团队最重要的数据。

  • A/B 测试和实验:进行实验和 A/B 测试,以优化你的产品用户体验,并衡量变更的影响。

现在我们已经探讨了不同的监控、可观察性、事件管理和分析工具,接下来我们来概述一下在使用这些工具时通常考虑的关键指标。

移动应用监控、分析和可观察性的关键指标

在这一部分,我们将查看一些适用于移动应用监控、分析和可观察性的关键指标,你应该在这些方面考虑使用。

监控指标

一些关键的监控指标如下:

  • 应用加载时间:应用初始化并准备好用户交互所需的时间。更快的加载时间能提供更好的用户体验。

  • API 响应时间:你的应用从后端服务或第三方 API 获取响应所需的时间。较长的响应时间可能让你的应用感觉缓慢或反应迟钝。

  • 帧率:应用每秒渲染的帧数。低帧率可能表明存在性能问题,尤其是在动画繁重或游戏类应用中,可能会导致用户体验差。

可观察性指标

一些可观察性指标如下:

  • 错误率:导致错误的应用请求比例,例如失败的 API 调用或后端问题。高错误率可能会影响应用的性能和可靠性。

  • 延迟:请求从用户设备到服务器再返回所需的时间。高延迟会让你的应用感觉缓慢且反应迟钝。

  • 吞吐量:你的应用每单位时间能处理的请求数。监控吞吐量有助于识别瓶颈和可扩展性问题。

分析指标

移动应用的分析指标指的是提供用户行为、应用性能和整体成功洞察的数据和度量。通过利用分析工具和平台,应用开发者和营销人员可以跟踪、分析和解读这些指标,从而优化用户体验、增强应用功能,并推动用户参与和留存。

一些移动应用分析的关键指标包括以下内容:

  • 日活跃用户DAU):表示每天与应用互动的独立用户数量。日活跃用户是衡量用户参与度的关键指标。

  • 月活跃用户MAU):MAU 指的是每月与您的应用程序互动的独立用户数量。此指标为应用程序的整体覆盖范围和受欢迎程度提供了见解。

  • 会话时长:这是用户在单次会话中在应用程序内花费的平均时间。较长的会话时长表明更高的用户参与度和满意度。

  • 会话间隔:此指标显示用户会话之间的平均时间,揭示用户多频繁地返回应用程序。较短的间隔通常表示较强的用户留存率。

  • 留存率:留存率表示在特定时期(如几天或几周)后返回应用程序的用户百分比。较高的留存率意味着积极的长期用户参与。

  • 流失率:流失率表示在特定时间内停止使用应用程序的用户百分比。较高的流失率可能突出显示与用户满意度或应用程序功能相关的问题。

  • 用户生命周期价值LTV):LTV 估算用户在整个使用过程中为应用程序带来的收入。了解 LTV 有助于您评估获取和留住用户的价值。

  • 转化率:转化率衡量完成特定期望动作(如购买、注册或订阅)的用户百分比。较高的转化率表示应用程序性能和用户满意度较好。

  • 漏斗分析:漏斗分析可视化用户在应用程序中通过不同步骤或事件的流程,帮助您识别用户流失点以及优化用户旅程的机会。

  • 自定义事件:自定义事件跟踪应用程序中用户的特定互动或里程碑,为用户行为和应用程序使用模式提供有价值的见解。这些事件可以根据应用程序的独特目标和需求进行定制。

实施移动应用程序的持续监控对于确保其性能和整体质量至关重要。持续监控包括定期跟踪和分析应用程序的行为、使用情况和性能指标,从而使开发人员能够及时识别和解决问题。

现在,让我们看看实施移动应用持续监控的推荐实践。

实施移动应用持续监控

持续监控涉及收集和分析有关移动应用程序的性能、使用情况和安全性的数据显示,以识别并解决任何问题或潜在的改进。让我们来看一下它的一些好处:

  • 提高可靠性:持续监控可以帮助在问题影响用户之前识别并修复它们,从而提高应用程序的可靠性并减少停机风险。

  • 更好的性能:通过收集应用程序性能的数据,团队可以识别并解决瓶颈或其他性能问题,从而提高用户体验。

  • 增强的安全性:持续监控有助于识别和解决安全漏洞或其他风险,从而提高应用程序的整体安全性

  • 更快的解决问题:通过不断收集应用程序性能的数据,团队可以快速识别和解决问题,从而缩短问题解决的时间

摘要

监控和可观察性对于移动应用开发至关重要。开发人员可以通过建立有效的实践并使用合适的工具来收集和分析数据,确保应用程序的最佳性能并提供无缝的用户体验。监控使开发人员能够收集应用性能、用户行为和系统交互的数据,从而在问题影响用户之前识别潜在问题。

以下是关于移动应用开发中监控和可观察性的关键学习点:

  • 实现监控和可观察性的好处

  • 监控和可观察性中需要考虑的因素

  • 实施移动应用监控和可观察性的步骤

  • 移动应用的监控、可观察性和分析工具

  • 移动应用监控、分析和可观察性的关键指标

  • 为移动应用实现持续监控

随着我们在移动 DevOps 旅程中的前进,我们将更深入地探讨如何将安全性融入我们的 CI/CD 和移动 DevOps 生命周期中,这是将其加入移动 DevOps 生命周期中的关键一步。在下一章中,我们将讨论移动应用安全的重要性,以及如何将自动化安全测试注入移动 DevOps 和 CI/CD 流水线中。

第八章:保持移动应用和 DevOps 的安全

从前面的章节中,我们已经了解到,移动应用已成为数字时代我们日常生活的重要组成部分,必须不断进行创新和优化。组织越来越多地实施 Mobile DevOps 方法,以实现这一目标,使开发、测试和发布团队能够无缝合作。

然而,快速的开发和发布可能导致移动应用程序的安全漏洞。为了保护您的移动应用和 DevOps 过程,在本章中,我们将探讨移动应用安全的基础知识、安全测试自动化以及 DevSecOps 的基本概念。我们还将探讨在移动应用开发和移动 DevOps 中,安全性重要性的背后原因,内容包括以下主题:

  • 移动开发中的安全性重要性

  • 移动应用安全威胁

  • 架构安全的移动应用

  • 传统的安全测试方法

  • 引入移动 DevSecOps

  • 移动 DevSecOps 的好处

  • 构建安全文化

  • 开始您的 DevSecOps 之旅

  • 通过移动持续自动集成和持续交付(CI/CD)以及 DevOps 自动化移动安全测试

  • 移动 DevOps 安全自动化的技巧

  • 人工智能与移动应用安全

移动开发中的安全性重要性

在数字化转型的时代,安全在生活的各个领域都至关重要。在汽车、医疗、金融、零售和电子商务等行业,以及嵌入式和物联网设备中,我们使用包括电子邮件、地址、信用卡和手机号码等敏感数据,涉及不同的移动应用程序。

移动应用开发在过去十年经历了指数级增长,数百万个应用程序可以在各种平台和应用商店中找到。这些应用程序提供各种服务,从社交网络到在线银行及其他各种服务。随着越来越多的用户依赖移动应用来访问服务并存储敏感数据,移动应用开发中的安全性重要性不容忽视。

移动应用开发中的安全性是开发人员必须优先考虑的关键方面,以保护用户数据、维持强大的声誉并遵守相关法规。通过了解安全性的重要性并实施切实可行的措施,开发人员可以创建提供更安全、更可靠体验的应用程序。

“以牺牲可用性为代价的安全,最终会以安全为代价。”

  • Avi Douglen,OWASP 董事会 成员

因此,确保安全措施到位,以保护用户数据免受未经授权的访问,至关重要。

你知道吗?

通过谷歌的应用安全改进计划(developer.android.com/google/play/asi),开发人员修复了影响超过 30 万个应用、累计安装量约 2500 亿的超过 50 万个安全问题。据谷歌称,2022 年通过改进的安全功能和应用审核流程,有 143 万不良应用未能进入 Play 商店(security.googleblog.com/2023/04/how-we-fought-bad-apps-and-bad-actors.html)。

受到安全问题影响的最重要行业之一是金融科技领域以及在我们日常活动中发挥巨大作用的数字银行应用。金融科技正在成为我们个人和职业生活的重要组成部分。客户始终关注安全问题。如果他们对应用的安全性产生怀疑,他们会立即卸载该应用并切换到其他服务。

大多数数字银行应用都有强大的安全功能,如支付阻止生物识别双因素认证2FA),并且仅允许用户提交复杂的密码。此外,客户数据的保护和处理至关重要,特别是当你在欧盟地区运营时,GDPR规则适用。

什么是 GDPR?

通用数据保护条例(GDPR)gdpr.eu/)是一个全面的数据保护法,于 2018 年 5 月 25 日在欧盟EU)实施。其主要目标是通过规范组织如何收集、处理、存储和共享数据,来保护个人的隐私和个人信息。

GDPR 确立了一系列原则和规定,组织必须遵守这些规定,以确保尊重数据主体(即被收集数据的个人)的权利。不遵守这些规定可能会导致公司面临罚款。因此,GDPR 帮助保护你的个人信息,并确保公司适当处理这些信息。

上述示例仅是许多需要考虑保护自己的行业中的一个。

在移动开发过程中,安全性可以在多个层面上进行集成。首先,应实施强大的身份验证协议,确保只有授权用户才能访问应用。这可以包括生物识别认证指纹扫描基于密码的认证

移动开发人员还应注意第三方库和 API 可能带来的风险。任何添加到应用中的额外代码都应经过彻底审查,以确保其安全并保持最新。

因此,安全性对移动开发至关重要,必须认真对待。按照这里列出的步骤,开发人员可以确保他们的应用是安全的,并为用户提供安全的体验。

移动应用安全威胁

移动应用面临各种安全威胁,这些威胁可能危及用户数据和应用程序的整体完整性。以下是一些常见的移动应用安全威胁:

  • 黑客可以通过逆向工程、代码注入或绕过认证机制来获得未经授权的访问权限,提取敏感的用户信息。

  • 移动应用通常处理个人信息、财务细节或登录凭证。如果未实施适当的安全措施,攻击者可能在数据传输或存储过程中拦截或窃取数据,从而导致数据泄露和隐私侵犯。

  • 移动设备可能通过多种方式受到攻击或感染恶意软件。这些恶意程序可以危害设备的安全、窃取数据或执行未经授权的操作。

  • 如果应用未加密或保护用户数据,攻击者可能通过物理设备的漏洞、文件系统漏洞或不安全的服务器配置来访问用户数据。

  • 弱或无效的认证机制可能导致未经授权的访问用户账户。此外,授权控制不足可能允许攻击者执行超出其权限的操作,如访问敏感功能或篡改用户数据。

  • 应用代码中的不良编码实践或未修复的漏洞可能引入安全弱点。攻击者可以利用这些漏洞执行任意代码、提升权限或获得设备的未经授权访问。

  • 攻击者可以向移动应用服务器发送大量请求,导致服务中断,使应用无法被合法用户访问。

移动应用开发者必须通过遵循安全编码实践、加密敏感数据、实施强大的认证机制,并教育用户有关最佳安全实践,来减轻这些威胁。

移动开发者在架构和开发移动应用时应将安全性放在首位。接下来我们来探讨这一点。

架构安全的移动应用

在如今广泛使用的移动设备环境中,构建安全的移动应用至关重要。忽视移动应用安全可能导致各种错误,从而将用户数据和隐私置于风险之中。为了确保移动应用的安全,开发者应遵循以下最佳实践:

  • 通过考虑保护用户数据、确保安全通信和防止未经授权访问等因素,识别应用的安全目标。评估特定于应用和行业的潜在威胁和漏洞。

  • 实施强加密技术来保护存储在设备上的敏感数据。

  • 采用多因素认证和最新的认证框架,如OAuth 2.0,以安全地管理用户访问。

  • 使用SSL/TLS进行数据传输,并验证证书以建立应用与后端服务器之间的加密通信。

  • 使用最新的加密算法和技术保护敏感数据,例如SHA-256

  • 实施安全方法来存储敏感信息,例如使用环境变量或安全存储解决方案。

  • 在客户端和服务器端验证用户输入,以防止注入攻击和其他安全漏洞。

  • 进行安全测试,包括静态和动态分析、渗透测试和漏洞评估,以识别和解决潜在的安全缺陷。

  • 定期更新第三方库和框架,以避免过时版本中可能存在的漏洞。

  • 在整个开发生命周期中整合安全措施,从设计、编码到测试和部署。

  • 确保开发人员接受安全编码实践的培训,并了解常见的移动应用程序安全风险及其缓解技术。

  • 持续监控应用程序的安全事件,并及时处理任何问题。保持对行业最佳实践和新兴安全发展的更新,以确保持续的保护。

让我们来看一下移动开发和安全团队通常如何进行安全测试,以及为什么这可能不是 Mobile DevOps 的最佳实践。

传统的安全测试方式

传统的安全实践通常是在开发的后期阶段应用安全措施,导致潜在的漏洞可能被忽视,如下图所示。DevSecOps 旨在通过在整个开发过程中嵌入安全性来解决这些问题。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.01_B18113.jpg

图 8.1 – 传统的安全测试过程

通过这些实践,我们通常会具有以下特点:

  • 过程过于缓慢;如图 8.1所示,从 1 到 2 周需要较长时间,甚至可能延长至 1 个月,才能确保应用程序在发布之前的安全性。

  • 团队各自为战,移动开发、测试和安全团队之间缺乏协作。

DevOps 的出现导致了 DevSecOps 的兴起,因为传统的方法已经无法很好地适应变化中的环境。这些因素促使了新方法的需求。

让我们一起探讨 DevSecOps,了解其好处以及如何实施它。

移动 DevSecOps 简介

移动 DevSecOps将软件开发、安全性和运维工程学科结合在一起,以确保移动应用程序的安全性、可靠性和维护性。

DevSecOps 一词指的是*“在开发的早期阶段将安全性注入到移动 CI/CD 管道中。安全性作为跨文化、自动化和平台设计的共享责任,贯穿整个移动 DevOps 生命周期。”*

团队文化的转变是必要的,将安全测试从阻碍变为促进因素。移动 DevSecOps 与 DevOps 结合,重点是持续交付移动应用程序和安全,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.02_B18113.jpg

图 8.2 – DevSecOps 生命周期

移动 DevSecOps 涵盖了许多开发活动,如图 8.2所示,诸如威胁建模代码扫描漏洞扫描安全代码审查和安全编码实践等活动,这些活动确保移动应用程序的安全性、可靠性和可维护性。

以下是移动应用程序的 DevSecOps 原则:

  • DevSecOps 的最根本特点是从移动应用开发过程一开始就集成安全措施。这与传统方法不同,传统方法通常将安全检查作为最后一步。在 DevSecOps 中,安全在开发过程的每个阶段都会被考虑,从规划、编码到测试和发布。

  • 每个人都有责任确保将安全融入软件开发的各个方面,包括开发人员、测试人员、DevOps 工程师、安全专业人员和业务利益相关者。

  • 通过使用工具和技术自动检查在编码过程中潜在的安全漏洞,可以比等待人工审核更快、更高效地识别和解决问题。这可以包括静态应用程序安全测试SAST)、动态应用程序安全测试DAST)和渗透测试等技术。

  • 安全措施不应只是一次性措施。DevSecOps 方法强调持续的安全性,这意味着即使应用程序已经发布,也应持续监控和更新,以应对可能出现的新安全威胁。

  • DevSecOps 鼓励一种文化,在这种文化中,开发人员、安全团队和测试团队共同合作,分享对应用程序安全的责任。这通常被称为shift-left方法,即将安全考虑因素提到开发过程的前沿。

  • 在问题发生之前识别潜在威胁。这可能包括数据泄露、不安全的 API 或移动应用程序的恶意软件攻击。

  • 开发人员应接受安全编码实践的培训。这意味着在编写代码时考虑安全因素。

  • 最后,一个健全的 DevSecOps 方法应包括应对和恢复安全事件的计划。这可能包括补丁管理、灾难恢复计划和专门的事件响应团队。

DevSecOps 是一个结合了 DevOps 和安全原则的过程,旨在确保组织能够更快、更安全地开发和发布移动应用程序。

移动 DevSecOps 的好处

移动 DevSecOps 提供了一种积极主动、协作的移动应用开发方法,确保安全是过程的不可或缺的一部分。它有助于构建更强大、更安全的移动应用,同时降低安全漏洞的风险并提升整体开发效率。

首先,它有助于降低移动应用中安全漏洞的风险。通过在开发过程中实施安全措施,移动 DevSecOps 有助于在问题变得严重之前识别并缓解安全问题。

其次,移动 DevSecOps 有助于加快交付安全、可靠和可维护的移动应用程序。通过自动化流程和实施持续交付,移动 DevSecOps 帮助移动团队更快地交付应用,并提高质量。此外,以下是 DevSecOps 的一些其他好处:

  • DevSecOps 有助于识别并解决可能导致应用程序变慢或不可靠的问题。这有助于确保应用程序持续保持最佳性能。

  • 移动 DevSecOps 通过自动化安全流程,帮助减少与人工安全检查和审计相关的成本。这有助于公司节省开支,将资源集中在开发的其他方面。

  • 移动 DevSecOps 有助于通过确保应用程序的安全性和可靠性来提升整体用户体验。这可以增加用户参与度并提高用户对应用程序的满意度。

对于希望保持竞争优势的企业来说,移动 DevSecOps 是必不可少的。

组织可以通过遵循此处概述的最佳实践来确保其移动 DevOps 流程是安全的。这将有助于保护用户数据,确保安全的移动应用程序开发,并降低恶意攻击的风险。

在实施 DevSecOps 之前,培养安全意识和建立一个信奉安全的团队至关重要。让我们先讨论如何作为第一步建立安全文化。

建立安全文化

为了使 DevSecOps 能够有效运作,团队首先必须建立开发团队与安全团队之间的协作文化。你需要做以下几件事:

  • 实施安全优先的策略

  • 在团队中建立以安全为重点的思维方式

  • 采用 DevSecOps 方法,并将安全左移(开发团队与安全团队的协作),同时使用CI/CD管道,对于防止安全事件的发生至关重要。

  • 确保开发人员拥有合适的工具

  • 将你的安全策略纳入移动测试策略中

  • 提供可信的安全指导(通过 OWASP MASVS 推荐增强你的移动应用安全性)– 我们将在本章稍后讨论这一点。

  • 构建仪表盘以显示移动应用的安全健康状况

  • 培训开发人员和 QA 工程师掌握安全编码实践

  • 让非技术团队成员参与安全意识

  • 如有需要,利用外部资源和合作伙伴的安全专长

让我们深入探讨 DevSecOps 并开始实施。

开始你的 DevSecOps 之旅

正如我们在本书开头所提到的,DevOps 和 DevSecOps 的实施不仅依赖于工具,还涉及必须考虑的多个步骤和其他因素。

以下是将安全融入移动应用 DevOps 过程中的一些步骤。

确定你的目标和目的

开始 DevSecOps 之旅的第一步是确定你的目标和目的。你希望通过 DevSecOps 实现什么?你是否希望提高部署速度?你是否希望减少移动应用中的安全问题?无论你的目标和目的是什么,设置清晰且可衡量的指标,以确保能够追踪和衡量你的成功。但始终确保目标是在不拖慢开发进度交付速度的情况下保持安全。

构建合适的团队

拥有合适的团队对于实现你的 DevSecOps 目标至关重要。你需要拥有一个了解 DevOps 和安全原则、并且有移动开发经验的团队。你还需要确保你的团队配备了合适的工具和流程,以确保 DevSecOps 之旅的成功。

将安全作为共享责任

DevSecOps 宣言 (www.devsecops.org/) 强调了软件开发过程中所有团队成员之间合作的必要性。安全性不应是专门的安全团队的唯一责任;相反,开发人员、运维人员和其他利益相关者必须共同合作,在整个软件生命周期中识别并解决安全问题。

将安全性提前

根据 第五章*,实施强大的移动应用测试策略*,建议将测试提前,以确保在每个 DevOps 周期阶段执行不同类型的测试。同样,DevSecOps 确保在 DevOps 周期的每个阶段都进行安全检查,以确保不存在漏洞或安全问题。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.03_B18113.jpg

图 8.3 – 提前进行安全测试

将安全性提前意味着将安全实践尽早融入开发过程,而不是等到后期再考虑。这个方法使团队能够在安全漏洞在生产环境中变得严重之前识别并解决这些问题。

我们可以通过以下实践将安全性提前,并保持移动 DevOps 的安全:

  • 建立一个安全的开发过程;这一过程应在整个移动 DevOps 团队中得到建立并强制执行。该过程应包括安全编码实践、安全测试以及移动应用的安全部署。

  • 在规划和设计阶段融入安全要求。

  • 在开发过程中实施安全编码实践,并使用安全聚焦的工具。

  • 持续集成CI)过程中进行安全审查和测试,例如静态和动态分析。

  • 这样可以让安全团队与开发和测试团队紧密合作,以便能够快速返回测试结果,并在需要时随时进行测试。

建立安全的开发生命周期

一旦团队到位,建立安全的开发生命周期就是下一步。这涉及到设立流程和程序,确保安全在开发过程的每一个步骤中都得到落实。包括设置自动化测试、代码审查、渗透测试、安全扫描等。以下是建立安全开发生命周期的推荐步骤:

  • 自动化安全测试:将自动化安全测试工具集成到您的 CI/CD 管道中。这包括静态和动态分析工具、依赖性检查器和漏洞扫描器。定期进行安全测试,以便尽早发现漏洞,缩短发现和修复问题之间的时间。

  • 安全代码审查:将以安全为重点的代码审查融入到开发过程中。使用同行评审和自动化工具来识别并解决代码中的潜在安全问题。

  • 威胁建模:在设计阶段进行威胁建模演练,以识别潜在的风险和漏洞,并制定相应的缓解策略。定期更新威胁模型,以应对应用、基础设施或威胁环境的变化。

  • 漏洞管理:建立一个跟踪、优先排序和处理在开发、测试或生产环境中发现的漏洞的流程。创建一个清晰的沟通渠道来报告安全问题,并确保所有团队成员理解这个流程及及时解决漏洞的重要性。

  • 持续监控和审计:监控移动应用的安全事件、性能问题和可疑活动。使用监控工具、日志分析和入侵检测系统实时检测潜在的安全事件或漏洞。

  • 事件响应计划:制定一个事件响应计划,以有效且高效地处理安全事件,例如数据泄露或网络攻击。定期审查和更新该计划,并进行演练,确保所有团队成员在发生事件时都能做好响应准备。

  • 与安全团队合作:鼓励开发、运维和安全团队之间的紧密合作。打破信息孤岛,促进共享安全责任,确保所有团队成员理解在保护应用和用户数据中的角色。

  • 持续改进:定期审查和改进您的安全实践、工具和流程。保持对最新安全趋势和最佳实践的关注,并根据需要更新您的 DevSecOps 策略。

选择合适的安全工具集

安全工具集的选择基于多种因素,包括您的具体安全需求、组织的规模和复杂性、预算限制以及技术栈。

以下是一些通用的考虑因素,帮助您选择合适的安全工具集。

OWASP 安全测试指南(MASTG)

OWASP 移动应用安全 (MAS) (mas.owasp.org/) 项目定义了移动应用安全的行业标准,并为移动应用提供了两个部分的安全标准:

  • OWASP 移动应用安全验证标准 (MASVS) 是确保行业内移动应用安全的首选标准。它对那些想要开发安全移动应用的移动软件架构师和开发人员,以及那些希望确保其测试结果完整和一致的安全测试人员非常有益。

  • OWASP 移动应用安全测试指南 (MASTG) 涵盖了移动应用安全测试中使用的过程、技术和工具,并提供了一套全面的测试用例,使测试人员能够提供一致和完整的测试结果。您可以在github.com/OWASP/owasp-mastg/releases/latest/download/OWASP_MAS_Checklist.xlsx找到检查表。

  • OWASP 移动应用 Top 10 是一个列出移动应用最重要安全风险的清单,开发人员可以使用它来识别和解决关键的安全问题。根据 OWASP 网站(owasp.org/www-project-mobile-top-10/),2023 年版的 Top 10 目前正在开发中,并包括以下风险:

    • M1:不当的平台使用

滥用平台功能,如 Android 意图或 iOS Touch ID,或者未遵循平台的安全最佳实践

  • M2:不安全的数据存储

在用户设备上不安全地存储敏感数据,可能导致未授权访问或数据泄露

  • M3:不安全的通信

未能保护应用与后端服务或第三方 API 之间传输的数据,可能会暴露于拦截或中间人攻击中

  • M4:不安全的身份验证

实现弱或无效的身份验证机制,允许未授权用户访问应用或冒充其他用户

  • M5:加密不足

使用弱或过时的加密算法、密钥或协议,或者错误地实现它们,可能导致敏感数据暴露并被解密

  • M6:不安全的授权

未能在服务器端实现适当的访问控制或授权检查,允许用户执行其不应有权执行的操作或访问数据

  • M7:客户端代码质量

编写不安全或维护不善的代码,可能导致漏洞,如缓冲区溢出或内存泄漏

  • M8:代码篡改

未能保护应用程序免受篡改或修改,可能允许攻击者修改应用程序的行为或注入恶意代码。

  • M9: 逆向工程

未能保护应用程序的源代码或知识产权免受逆向工程或反编译的威胁,可能允许攻击者发现漏洞或提取敏感信息。

  • M10: 多余功能

在应用程序中包含隐藏或未使用的功能,可能引入安全风险或暴露敏感信息。

此外,当团队开始考虑实施安全测试时,他们应当探索不同的方法,包括以下内容:

  • 静态应用程序安全测试 (SAST): 这涉及分析应用程序的源代码,而不执行它以发现漏洞。

  • 动态应用程序安全测试 (DAST): 分析正在运行的应用程序的漏洞,需要实时检查应用程序。

  • 互动应用程序安全 (IAST): 这是一个过程,涉及通过软件仪器监控应用程序的性能,无论是主动的还是被动的。

让我们更详细地研究 SAST 和 DAST。

SAST

SAST扫描应用程序的源代码,以检测任何潜在的安全问题。这是一种主动的方式,可以在问题成为隐患之前识别风险。这使得开发人员能够在问题被利用之前解决它们。

此外,SAST 使开发人员能够避免手动检查每一行代码,这是节省时间和成本的安全测试方法。

通过利用 SAST,开发人员可以降低应用程序在遭受安全漏洞风险时的可能性,从而确保应用程序更加安全可靠。

DAST

DAST分析应用程序的源代码、移动应用程序及其他组件,以识别并报告任何安全漏洞。这种类型的测试通常用于防范恶意攻击、数据泄露和其他形式的恶意活动。它有助于确保应用程序保持安全并及时更新。

DAST 是一个很好的工具,可以帮助减少数据泄露的风险,因为它能够在问题发生之前发现并提醒您潜在的安全漏洞。它还可以帮助您确保应用程序已经更新至最新的安全补丁和更新版本。此外,DAST 可以为您提供应用程序如何与其他应用程序交互的洞察,并帮助您识别更广泛环境中的任何风险或漏洞。

此外,DAST 可以为您的应用程序的安全性和性能提供有价值的洞察,帮助您做出有关改进应用程序安全态势的明智决策。

现在我们已经了解了如何开始使用 DevSecOps 以及静态测试和动态测试之间的区别,接下来让我们探讨如何通过 CI/CD 和移动 DevOps 自动化安全测试。

使用移动 CI/CD 和 DevOps 自动化移动安全测试。

在 CI/CD 和 DevOps 环境中自动化移动安全测试可以帮助提高安全测试流程的效率、速度和可靠性。

以下是你如何在这种设置中自动化移动安全测试的概述:

  1. 研究并选择适合的工具,确保它们能集成到你的 CI/CD 管道中。一些流行的移动安全测试工具包括NowSecureGuardsquareSnykOversecuredMobile Security FrameworkMobSF)。确保所选工具支持自动化,并能够轻松集成到你的开发和部署流程中。

  2. 将移动安全测试过程集成到你的 CI/CD 管道中。通常,这包括在你的管道中添加安全测试阶段,例如预提交钩子、构建阶段和部署后验证。

  3. 利用移动模拟器和仿真器来复制不同设备配置和环境。这样,你可以在多种设备上进行自动化测试,而无需为每个测试都提供物理设备。

  4. 使用静态代码分析工具扫描你的移动应用源代码中的安全漏洞。这些工具可以识别常见的编码缺陷、不安全的编码实践和潜在的安全弱点。将代码分析工具集成到你的 CI/CD 管道中,有助于在开发早期发现安全问题。

  5. 配置你的 CI/CD 管道,在构建和部署阶段执行自动化安全测试。这些测试应在每次提交新代码时、构建过程中以及部署后触发,以确保持续的安全验证。

  6. 配置你的自动化框架,在每个测试周期后生成安全报告。这些报告应提供有关识别到的漏洞、其严重性以及修复建议的详细信息。

让我们来看看一些你可以用来自动化安全测试的工具。

自动化安全测试的工具

有几种工具可以用来自动化安全测试,从而使过程更加高效和全面。请记住,安全工具的生态系统在不断变化,因此可能会有更新的工具出现。

这里是一些流行的安全测试工具。

NowSecure

NowSecurewww.nowsecure.com/)提供了一个强大且易于访问的移动应用安全测试平台。凭借其用户友好的界面、全面的测试功能和广泛的平台支持,它是寻求增强移动应用安全性的组织的理想选择,如以下截图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.04_B18113.jpg

图 8.4 – NowSecure 仪表板

NowSecure 提供以下功能:

  • 它提供了一个简洁直观的用户界面,使得即使是技术经验有限的用户也能轻松使用。该工具提供了逐步指导,帮助用户快速完成测试过程。

  • 它覆盖了广泛的安全测试方面,包括漏洞扫描、行为分析和渗透测试。其强大的功能确保能够有效识别并修补各种安全漏洞。

  • 它支持在多个平台上进行测试,包括 iOS 和 Android,使开发者和安全专家能够评估其应用在不同操作系统上的安全态势,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.05_B18113.jpg

图 8.5 – NowSecure – 包或应用详情

  • 它提供自动化扫描和测试功能,显著减少了识别潜在安全风险所需的时间和精力。对于拥有大量应用组合的组织而言,这一功能尤其有利。

f

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.06_B18113.jpg

图 8.6 – 应用分析

  • 它生成详细的报告,突出显示漏洞,并提供详细的解释和修复建议。这些报告使开发者能够更高效地优先处理和解决安全问题。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.07_B18113.jpg

图 8.7 – NowSecure MASVS 报告

此外,NowSecure 会根据 MASVS 分类提供安全扫描结果,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.08_B18113.jpg

图 8.8 – 基于 MASVS 分类的安全扫描结果

  • 它可以集成到 CI/CD 流水线中,例如 Bitrise。通常,这涉及将安全测试阶段添加到流水线中,例如预提交钩子、构建阶段和部署后验证。你只需要拥有一个 NowSecure 账户、一个访问令牌和一个组 ID:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.09_B18113.jpg

图 8.9 – Bitrise 上的秘密管理

然后,你可以将 NowSecure 集成步骤添加到 CI/CD 工作流程或流水线中,以执行安全测试,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.10_B18113.jpg

图 8.10 – 使用 NowSecure 的 Android 工作流程

NowSecure 集成步骤需要添加 NowSecure API 令牌和组 ID,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.11_B18113.jpg

图 8.11 – NowSecure 配置

NowSecure 还可以与 GitHub Actions 一起运行 (github.com/nowsecure/nowsecure-action),使用以下 YAML 文件 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-8/android.yml)。

此外,NowSecure 支持 GitLab、Azure DevOps 和 CircleCI (www.nowsecure.com/solutions/by-need/mobile-devsecops/)。

Guardsquare

Guardsquare (www.guardsquare.com/) 是一款强大的移动应用保护套件,提供先进的代码混淆和防篡改措施,以保护移动应用免受逆向工程和篡改。凭借其强大的功能集、多平台支持和优化的性能,Guardsquare 是开发者和组织保护应用代码及知识产权的理想选择。

Guardsquare 提供以下功能:

  • 它提供强大的代码混淆技术,将应用程序代码的结构和逻辑进行转换,使得攻击者更难进行逆向工程或理解应用的内部工作原理。这有助于保护知识产权、阻止未经授权的访问,并威慑恶意活动。

  • 它采用防篡改机制,能够检测和防止应用在运行时被修改,防御针对篡改或绕过安全措施的攻击。这些措施确保了应用代码的完整性,并保护免受未经授权的修改。

  • Guardsquare 的代码混淆技术旨在尽量减少对应用性能的影响。优化过程有助于保持应用的功能性和响应性,确保流畅的用户体验。

  • 它支持广泛的平台,包括 Android、iOS 和 Xamarin,使其成为一个多功能的解决方案,能够跨不同操作系统保护移动应用。

以下是 Guardsquare 提供的不同产品:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.12_B18113.jpg

图 8.12 – AppSweep 项目仪表板

它还提供应用发布分析详细信息,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.13_B18113.jpg

图 8.13 – 发布分析

你还可以查看最近构建的详细信息,包括扫描和分析结果,并且可以比较两个构建版本,如以下截图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.14_B18113.jpg

图 8.14 – 最近的构建

AppSweep 的扫描结果已映射到 OWASP MASVS,如以下截图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.15_B18113.jpg

图 8.15 – 扫描结果映射到 OWASP MASVS

它还可以提供应用中发现的安全问题的详细视图,并将其分为不同类别,例如应用安全、不安全通信等,如以下截图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.16_B18113.jpg

图 8.16 – 问题视图

最后,在问题详情部分,你可以找到基于 OWASP 指南的代码修改建议。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.17_B18113.jpg

图 8.17 – 带有推荐的详细问题信息

Snyk

Snyk (snyk.io/learn/application-security/mobile-application-security/) 是一个有价值的移动应用安全平台,特别是在漏洞管理和代码修复领域。凭借其全面的漏洞检测、简便的集成、持续监控、推荐以及对语言/平台的支持,Snyk.io 简化了识别和解决移动应用代码中的安全弱点的过程。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.18_B18113.jpg

图 8.18 – Synk 仪表板

以下是 Snyk 的一些功能:

  • 它提供了一个广泛的漏洞数据库和扫描功能,帮助识别移动应用代码中的安全弱点。它能检测常见漏洞,并提供详细的代码行分析,帮助开发者轻松导入并扫描项目,理解并解决问题,如以下截图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.19_B18113.jpg

图 8.19 – 从 GitHub 导入项目

  • 它与流行的开发工具和工作流无缝集成,包括使用 Snyk CLI (github.com/snyk/cli) 的 CI/CD 管道和源代码仓库。这使得开发者可以将安全检查融入现有的开发流程中,确保在开发生命周期早期发现漏洞,如以下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.20_B18113.jpg

图 8.20 – Snyk CLI

  • 它提供了详细的修复建议和修复指导,帮助开发者解决已识别的漏洞。它提供了可操作的步骤和代码片段,以简化修复安全问题的过程,帮助开发者有效地修复漏洞。

  • 它支持多种编程语言和平台,包括流行的移动应用开发框架,如 iOS 和 Android。这种多样性确保开发者无论选择何种语言或平台,都可以利用该平台,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.21_B18113.jpg

图 8.21 – Snyk 集成

您可以将 Snyk 与现有的工具和工作流无缝集成。此集成将帮助您在开发的各个阶段高效地保障项目安全。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.22_B18113.jpg

图 8.22 – 带有不同扫描选项的应用详情

要在 Android 应用中使用 Snyk,请按照以下一般步骤操作:

  1. 首先,在您的开发机器上安装 Snyk 命令行界面CLI)。您可以在针对您的操作系统的 Snyk 文档中找到安装说明。

  2. 打开终端或命令提示符,并导航到您的 Android 应用项目的根目录。

  3. 在终端中运行 snyk auth Snyk 登录命令,并按照提示进行身份验证,以便将您的应用与 Snyk 帐户关联,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.23_B18113.jpg

图 8.23 – 运行 Snyk 命令

  1. 使用 Snyk test 命令分析您的 Android 应用依赖项中的已知漏洞,如下图所示。在您的项目目录中运行以下命令:snyk test

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.24_B18113.jpg

图 8.24 – snyk 测试和监控命令

Snyk 将扫描您的应用依赖项,并提供任何发现的漏洞报告。它还将建议以下步骤来修复这些问题:

  • 如果 Snyk 发现任何漏洞,它将在扫描报告中提供修复建议。通常,这涉及将受影响的依赖项更新为包含安全补丁的较新版本。

  • 您可以配置 Snyk 作为 CI 流水线的一部分运行(docs.snyk.io/integrations/ci-cd-integrations),或者设置定期扫描。

Oversecured

Oversecured (oversecured.com/) 是一个强大的移动应用安全测试和漏洞修复平台。凭借其先进的安全测试能力、实时反馈、集成修复以及对多个平台的支持,它提供了一种全面的解决方案,能够提升移动应用的安全性,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.25_B18113.jpg

图 8.25 – Oversecured 仪表板

以下是 Oversecured 功能的简要概述:

  • 它提供多种先进的安全测试技术,包括 SAST、DAST 和 IAST。

  • 它在测试过程中提供实时反馈和可操作的指导。它会突出显示漏洞,解释潜在风险,并建议具体的修复步骤,帮助开发者高效地解决安全问题。

  • 它提供集成修复功能,使开发者能够直接在平台内处理已识别的漏洞。这种简化的工作流程有助于加速漏洞修复过程,并确保安全问题得到及时解决。

  • 它支持 Android 和 iOS 等移动平台。这种灵活性使其适用于使用不同技术栈的开发者,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.26_B18113.jpg

图 8.26 – 应用视图

  • 它提供协作功能,允许开发者、安全团队和其他相关人员无缝合作。它还生成包含详细漏洞信息、支持文档和进度跟踪的报告,促进沟通和责任追踪,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.27_B18113.jpg

图 8.27 – 代码视图中的漏洞

Oversecured 支持不同的 CI/CD 工具 (oversecured.com/docs/ci-cd/) 和公开 API。无论你使用哪个 CI/CD 工具,你都需要执行以下操作:

  • 在活动集成列表中获取集成 ID

  • 生成 API 令牌

目前支持以下工具:

  • Bitrise

  • Jenkins

  • CircleCI

  • Travis CI

MobSF

MobSF (github.com/MobSF/Mobile-Security-Framework-MobSF) 是一个开源自动化框架,用于进行渗透测试、恶意软件分析和移动应用(Android/iOS)的安全评估。你只需上传你的 iOS 或 Android 应用,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.28_B18113.jpg

图 8.28 – MobSF 登陆页

接下来,MobSF 将通过扫描 .apk.ipa 文件开始分析过程,如下图所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.29_B18113.jpg

图 8.29 – 正在分析应用

然后,扫描结果和报告将显示,报告包括安全评分和分析结果,截图如下所示。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.30_B18113.jpg

图 8.30 – 扫描结果

以下截图展示了应用内证书分析的示例。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_08.31_B18113.jpg

图 8.31 – 应用中的证书分析视图

你还可以使用 MobSF 和亚马逊 Web 服务在云端运行你的 Android 或 iOS 静态分析测试,并使用 Docker。

你可以通过运行以下命令来安装预构建的 Docker 镜像(更多信息请参见 MobSF 文档:mobsf.github.io/docs/#/docker):

docker pull opensecurity/mobile-security-framework-mobsfdocker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Docker 将开始拉取镜像并构建容器,它将在端口 8000 上运行。

MobSF 是一个开源项目,但一些公司可能会选择使用许可的自动化安全工具。这是因为许可工具通常包括培训、支持和访问安全专家的权限。

GitHub 高级安全

GitHub 高级安全docs.github.com/en/get-started/learning-about-github/about-github-advanced-security)可以帮助解决包括以下在内的各种安全问题和漏洞:

  • 依赖扫描

  • 通过使开发者能够在他们的本地工作流程中修复漏洞,从而实现实时保护代码。

  • 启用来自数百万开发者和研究人员的众包智能。

  • 促进团队成员之间的轻松协作,无论他们身处何地。

  • 以自动化的方式交付安全软件,这种方式能够加速开发,而不是拖慢速度。

识别可能通过利用移动应用的弱点而引发的潜在安全问题至关重要,这突显了在安全团队中负责任和道德行为的重要性。

道德黑客的目的是增强安全性并防止潜在的攻击,而不是造成伤害。始终负责任地行为,遵守法律限制,并坚守道德行为是至关重要的。

让我们考虑一个假设的移动应用示例,该应用在设备的内部存储中以纯文本文件的形式存储用户登录凭证(用户名和密码)。如果攻击者能够物理访问该设备,就可能检索到这些凭证。以下是我们调查并修复此漏洞的步骤:

  1. 定位代码中存储敏感数据(如用户登录凭证)的部分,这些数据存储在设备上。

  2. 验证数据是否确实以不安全的方式存储,例如纯文本文件或未加密的数据库。

  3. 为了解决这个漏洞,敏感数据应该以加密格式存储。

  4. 将安全扫描工具,如 SAST 和 DAST,集成到您的安全流程中,可以大大增强您识别和缓解漏洞的能力。将这些自动化测试集成到您的 CI 管道中。每当有新代码推送到代码库时,运行这些测试,以确保应用在演进过程中保持安全。

  5. 定期将自动化安全测试作为您应用测试计划的一部分。随着应用的安全机制或代码库的任何变化,保持测试计划的最新状态。

  6. 考虑由安全专业人员定期进行手动渗透测试。他们可以提供自动化测试可能遗漏的潜在漏洞的见解。

移动 DevOps 的安全自动化技巧

以下是一些避免在实施 DevSecOps 时由于注入安全检查和扫描导致构建速度变慢并影响开发者生产力的建议:

  • 重要的是,CI 构建不应被拖慢。然而,某些安全工具可能需要时间来扫描移动应用,这可能会影响 CI 构建时间,并导致开发者在一段时间内处于空闲状态。

  • 如果需要,可以将测试拆分,以减少扫描执行时间,特别是在测试耗时较长时。并行在不同的移动设备上运行自动化安全测试可以减少总体执行时间,同时不会影响 CI 构建的运行时间。这一过程可以避免在单一设备上按顺序运行测试。

  • 如果关键漏洞或安全问题可能对最终用户或系统造成伤害,请阻止构建或在进行安全测试后发布(建议优先处理那些优先级高、严重性大的关键问题)。开发和安全团队应合作,决定是否阻止构建或发布,并考虑潜在的影响和风险以及修复的时间框架。

总结

在本章中,我们的重点是保护您的移动应用和 DevOps 流程。我们探讨了移动应用安全的基础,自动化安全测试以及 DevSecOps 的基本知识。

阅读本章后,您将获得宝贵的见解和基本技能,这些将极大地帮助您的移动应用开发之旅,并且您将理解在移动应用开发和移动 DevOps 领域中安全的重要性。

您已经了解了移动 DevSecOps 的介绍及其如何显著增强您的移动应用安全性。理解各种移动应用安全威胁和架构考虑因素,使您能够从零开始构建安全的移动应用。

确保移动应用安全的关键方面是采用全面的测试方法和工具。您现在已经熟悉了静态和动态分析、渗透测试以及 API 安全测试等技术。通过将这些安全措施纳入您的开发管道,您可以高效地在早期阶段发现并缓解漏洞。

你现在的技能已经扩展到在移动 DevOps 过程中自动化安全性。关于 CI/CD、容器化和自动化代码分析的实用技巧使你能够在应用开发生命周期中简化安全实践。

通过理解和实施本章讨论的概念,组织可以确保其移动应用在面对不断演变的威胁时保持安全和具有韧性。

进入下一章,我们将讨论加速整个过程并提高开发者生产力的移动 DevOps 最佳实践。

第九章:移动 DevOps 最佳实践

正如前几章所讨论的那样,采用移动 DevOps 流程对于频繁且快速地开发和发布高质量的移动应用至关重要。通过结合开发者、测试工程师、发布专家和其他相关人员的最佳实践,可以加快移动应用的开发和分发。因此,较短的交付时间也将提高质量和用户体验。

在本章中,我们将探讨一系列关键主题,帮助移动应用开发者和 DevOps 团队实施高效且有效的持续集成/持续交付CI/CD)流水线;我们将深入研究推动成功移动应用开发的基本实践。

本章将涵盖以下主题:

  • 移动应用开发中的 CI/CD 最佳实践

  • 管理移动应用版本和发布

  • 管理移动应用基础设施

  • A/B 测试和功能标记

  • 移动应用的远程与依赖缓存

  • CI 构建和测试并行执行

  • 使用 fastlane 自动化构建、测试和发布

  • 模拟 API

  • 移动 DevOps 协作的 ChatOps

移动应用开发中的 CI/CD 最佳实践

保持移动 DevOps 流程的有效性、高效性,并与您整体的移动应用开发战略对齐,需要您和您的团队定期审查和优化这些流程。没有万灵药,因此我们应根据团队和业务的成长不断优化我们的移动 DevOps 流程。

有许多实践可以添加到移动 DevOps 流程中,以优化 CI/CD 流水线、代码审查流程、开发速度等。

在前几章中,我们讨论了实施 CI/CD 流水线或工作流时的不同阶段。

以下是确保移动应用 CI/CD 流水线成功的一些最佳实践:

  • 尽可能实现自动化: 自动化构建、测试、代码分析、发布和其他任务,以减少人工干预、最小化错误并加速开发过程。

  • 实施测试策略: 采用单元测试、集成测试、UI 测试和端到端测试的组合,以确保高质量代码。使用模拟器或真实设备测试各种设备、屏幕尺寸和操作系统。

  • 优化构建和测试时间: 使用缓存、并行化和增量构建来减少构建时间。并行化测试执行,优先执行关键测试,以加快测试运行速度。

  • 采用明确的分支策略: 在处理大型或复杂代码时,使用如 GitFlow 或基于主干的开发等分支策略非常有帮助。这可以保持清晰的提交历史,并简化集成和部署。

  • 执行良好的提交规范:这包括原子提交、描述性的提交信息和频繁的代码审查,以保持代码质量并确保变更的可追溯性。这有助于确保代码的质量和正确性,并改善团队成员之间的协作。有多种工具可以用来改进和自动化代码审查过程,例如以下工具:

    • What The Diff (whatthediff.ai/):这是一个由 AI 驱动的代码审查助手。它的目的是帮助团队编写更好的拉取请求描述,甚至可以加速审查和合并过程。此外,它还能让非技术团队成员保持信息同步并参与其中。

    • Danger (github.com/danger/danger):这是一个非常棒的工具,可以帮助你的团队自动化代码审查规范。通过在流程中加入一个额外的逻辑步骤,Danger 可以在日常代码审查过程中帮助执行这些常规任务的 lint 检查。

    • MergeQueue (mergequeue.com/):一种更快速的方式来自动化合并工作流程,管理大型团队中的队列,并且再也不用担心构建失败了。

  • 关注关键的 CI/CD 指标:监控 CI/CD 指标非常重要,例如构建时间、测试执行时间、部署频率和代码质量。本章将进一步讨论这些指标,以帮助识别瓶颈和改进领域。

  • 将安全措施纳入 CI/CD 流程:为了确保 CI/CD 流程的安全性,重要的是要加入安全措施。可以通过使用静态和动态代码分析工具,扫描依赖项中的漏洞,以及通过最小权限原则来实施访问控制。

  • 制定明确的回滚策略:在部署过程中遇到任何问题时,拥有一个清晰且明确的回滚计划是非常重要的。这可能需要为移动应用提交一个新的更新到应用商店。

  • 建立清晰的沟通渠道:在团队成员之间建立清晰的沟通渠道,以确保每个人都能了解项目的进展和任何可能出现的问题。

  • 与跨职能团队合作:与跨职能团队合作,确保开发和部署过程的各个方面都得到充分考虑。这涉及与设计师、开发人员、测试人员和运维团队的协作。

此外,随着我们改进移动 DevOps 流程和 CI/CD 实施,我们还应关注 CI 构建和 CI 服务器的整体性能。让我们看看一些要跟踪的 CI/CD 指标。

移动应用开发中需要跟踪的关键 CI/CD 指标

在你的 CI/CD 管道中跟踪关键指标可以帮助你衡量开发和部署过程的有效性,识别瓶颈,并优化管道。

以下是移动应用开发中需要跟踪的一些基本指标:

  • 构建成功率:衡量每次构建所需的时间,包括编译、打包和其他任何与构建相关的任务。跟踪此指标可以帮助你识别低效环节并改进构建性能——例如,你可以选择加入缓存步骤,以减少应用程序构建时间,前提是应用模块没有从上次构建以来发生任何变化。这样可以防止应用程序从头开始构建,并从上次构建中断的地方继续。我们将在本章稍后讨论缓存。

  • 部署频率:跟踪你部署新版本或更新到移动应用的频率。高部署频率表明成熟的 CI/CD 过程,并能更快地将功能和漏洞修复交付给用户。

  • 更改的领先时间:衡量从提交到生产的代码更改所需的时间。较短的领先时间表明管道高效,并能更快地向用户交付价值;我们将在本章稍后讨论帮助代码提交过程的不同工具。

  • 更改失败率:监控导致失败或需要回滚的更改百分比。较低的更改失败率表明你的测试和发布过程有效地在生产前捕捉到了问题。

  • 平均恢复时间MTTR):衡量修复问题或从生产中的故障中恢复所需的平均时间。较短的 MTTR 表明你的团队能够迅速有效地识别和解决问题。

  • 测试执行时间:监控执行测试套件所需的时间。较长的测试执行时间可能会减慢开发进程。识别慢速测试或优化测试并行化可以减少执行时间。我们将在本章稍后讨论并行化。

  • 测试覆盖率:跟踪代码库中被测试覆盖的百分比,以确保你有足够的测试来捕捉问题并保持高代码质量。

  • 测试通过/失败率:监控每次构建中测试的通过或失败百分比。高通过率表明代码库稳定,而高失败率可能表明代码或测试过程存在问题。易波动的测试会产生不一致的结果,在某些运行中通过,在另一些运行中失败,且没有明显原因。尽早解决易波动的测试,以避免虚假的负面结果,并保持对测试套件的信心。以下是 Slack 团队如何在大规模中处理易波动测试的一个例子:slack.engineering/handling-flaky-tests-at-scale-auto-detection-suppression/

  • 代码质量指标:跟踪与代码质量相关的指标,如代码复杂度、代码重复性和遵循编码标准的情况。这些指标可以帮助你保持干净且易于维护的代码库。

在移动应用开发中,跟踪 CI/CD 的关键指标对于评估开发和部署过程的效率至关重要。通过监控这些指标,团队可以识别瓶颈,优化流水线,并确保功能和更新的平稳、可靠交付给用户。

这些指标为 CI/CD 流水线的整体健康和有效性提供了宝贵的见解,使团队能够进行数据驱动的改进,并保持稳定且高质量的代码库。

通过精心监控的 CI/CD 流水线和清晰理解的关键指标,让我们一起探索管理移动应用版本和发布的基本策略。

移动应用版本和发布管理

管理移动应用的版本和发布可能是一个复杂的任务,但有一些最佳实践可以帮助简化这一过程:

  • 遵循语义化版本控制:采用明确且一致的版本编号系统至关重要。语义化版本控制(semver.org/)是开发人员广泛认可的标准。版本号由三个部分组成:主版本.次版本.修订版本主版本的更改表示有破坏性变化,次版本的更改引入新功能,修订版本的更改修复错误和问题。

  • 全面的发布说明:为每个发布提供详细的发布说明,包括新功能、修复的 bug、已知问题以及额外的说明或要求。

  • 简化的分支策略:采用明确且定义良好的分支策略,如GitFlow基于主干的开发,以避免混淆并保持清晰的提交历史。这将有助于确保顺利的集成和部署过程。

现在,让我们一起看一下用于组织和管理版本控制系统中源代码的两种策略:单一仓库多仓库

单一仓库

单一仓库monorepo.tools/)是一个包含多个不同项目并具有明确关系的单一仓库。这种方法旨在通过为项目提供一个统一的代码和资源的源,简化管理和开发大型复杂软件系统的过程。

单体应用单一仓库之间存在差异;一个好的单一仓库与单体应用正好相反,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.1_B18113.jpg

图 9.1 – 单体应用与多仓库与单一仓库的对比

单一仓库为项目开发提供了若干优势:

  • 首先,将所有代码存储在一个单一的仓库中,可以更容易地理解不同系统组件是如何互相配合并依赖于彼此的。这也简化了依赖管理,减少了开发过程的复杂性,并促进了变更的无缝构建和部署。

  • 单一仓库通过提供一个集中存储所有相关代码和资源的位置,增强了开发者之间的协作。这改善了沟通,减少了冲突,并促进了项目上的顺利协作。

然而,单一仓库也有一些挑战:

  • 它们可能变得很大,增加了磁盘空间需求和克隆时间,从而使得克隆和使用仓库变得更加困难。

  • 它们可能更复杂,尤其是对于大型和复杂的项目,因为更改会影响整个仓库。

安全执行也可能带来困难,因为所有代码都存储在一个位置并对多个开发者开放。这对于敏感项目尤其具有挑战性,需要谨慎的授权流程。

多仓库

多仓库是一种开发方法,其中项目的每个组件存储在自己的独立仓库中。它促进了模块化,并允许团队在特定组件上独立工作。虽然它提供了灵活性,但在多个仓库之间协调更改可能具有挑战性。

以下是与多仓库相关的一些特点和挑战:

  • 在多仓库方法中,每个项目、库或模块都有自己独立的仓库。这使得每个项目的代码库保持隔离和独立。

  • 每个仓库都有自己的版本控制历史,允许项目独立版本化。这为管理发布周期和更新提供了灵活性。

  • 项目之间的依赖关系必须显式地进行管理和版本控制,从而增强了对项目间依赖关系的可视性和控制。

  • 每个仓库只包含特定项目的代码,保持仓库的大小较小,可能提高性能。

  • 多仓库方法允许更去中心化的开发过程,因为每个团队可以独立管理自己的仓库。

  • 管理多个仓库之间的依赖关系、版本和配置,比单一仓库更加复杂且耗时。

  • 在多个项目中进行更改可能是具有挑战性的,因为这可能需要在多个仓库之间协调提交和发布。

因此,选择单一仓库(monorepo)和多仓库(multi-repo)之间的决策,取决于团队规模、项目复杂性、开发流程和工具偏好等因素。有些组织偏好单一仓库的简化和统一方式,而另一些则偏爱多仓库设置的独立性和去中心化特性。

由于移动应用依赖于后端服务、数据库和配置管理,因此团队应考虑自动化发布和管理这些服务,以防止出现任何问题。让我们来探讨一下管理移动应用基础设施的概念。

管理移动应用基础设施

管理移动应用基础设施是成功开发和部署应用的关键方面。它涉及监督支撑应用功能和用户体验的底层系统、服务器、数据库和云资源。

高效的基础设施管理确保了可扩展性、可靠性和性能。任务包括配置和部署服务器、设置数据库、监控资源利用率和实施安全措施。采用现代的基础设施即代码IaC)实践,可以让团队自动化基础设施的配置和部署,从而更容易保持一致性并无缝地进行变更部署。

一个良好管理的移动应用基础设施对于提供流畅且可靠的用户体验至关重要,同时能够高效处理日益增长的用户需求并随着应用的扩展进行扩展。让我们讨论一下如何管理移动应用的基础设施。

移动应用的基础设施即代码(IaC)

IaC 是一种强大的方法,它允许你通过代码定义和管理应用的基础设施,带来了可重现性和可扩展性等好处。虽然 IaC 通常与基于服务器的基础设施相关,但它也可以应用于移动应用,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.2_B18113.jpg

图 9.2 – 基础设施即代码 (IaC)

以下是如何更详细地利用 IaC 管理移动应用的说明:

  • IaC 使你能够轻松创建可重现的环境。你可以为不同的环境(如开发、测试、预生产和生产)启动相同的基础设施设置。通过使用相同的基础设施代码,确保环境之间的一致性,减少配置漂移和环境相关问题的可能性。

  • 定义支持移动应用所需的基础设施组件。这可能包括服务器资源、数据库、存储服务、内容分发网络CDN)以及其他必要的资源。确定这些组件之间的配置设置、依赖关系和相互关系。

  • 选择一个支持移动应用基础设施配置的 IaC 工具。常见的选择包括 Terraform 和 AWS CloudFormation。这些工具允许你描述和管理你的 IaC,并支持多种云提供商和服务。

  • 将基础设施代码存储在版本控制系统(如 Git)中,以便跟踪更改、实现协作,并维护基础设施修改的历史记录。

  • 利用 IaC 为移动应用的基础设施定义自动扩展能力。这使得您的应用能够根据需求自动增加或减少资源,从而确保最佳性能和成本效率。在基础设施代码中指定扩展策略和阈值。

  • 借助 IaC,您可以将配置设置和变量作为代码进行管理,使得保持一致性变得更容易,同时避免手动错误。例如,您可以在基础设施代码中定义特定于环境的配置值(例如 API 端点和数据库凭据),并在不同环境中始终如一地使用它们。

  • 借助 IaC,您可以对这些变化进行版本控制和跟踪,确保透明性并简化部署。您无需手动修改资源,而是修改基础设施代码并应用更改,IaC 工具将处理更新。

  • 将测试原则应用于基础设施代码。编写自动化测试以验证基础设施定义的正确性和完整性。这有助于在配置或修改基础设施之前捕捉潜在问题。

  • 将基础设施代码集成到您的 CI/CD 流水线中。这使您能够自动化移动应用基础设施的配置和更新,同时处理应用代码,确保一致性和可靠的部署。

在 IaC 之后,我们来探讨一下移动应用的配置管理以及如何使用它。

移动应用的配置管理

管理不同环境的配置设置和变量,确保一致性并避免手动错误,具体步骤如下:

  • 确定移动应用所需的配置设置和变量。这些可以包括 API 端点、数据库连接字符串、功能标志、日志级别、凭据以及任何可能在不同环境之间变化的值。

  • 将配置设置与应用代码分开。将配置值直接硬编码到代码中,会使在不同环境之间迁移时更新这些配置变得困难。相反,应将配置值抽象到单独的配置文件中,或通过环境变量将其外部化。

  • 使用特定于每个环境的配置文件。例如,您可以为开发、测试、预发布和生产环境分别设置配置文件。这些文件可以是 JSON、XML、YAML 或属性文件。每个文件都包含该环境的相应值。

  • 利用环境变量存储配置值。环境变量在系统级别设置,您的移动应用可以在运行时访问这些变量。此方法提供了灵活性,并且可以轻松更改配置,而无需修改文件。

  • 使用集中式配置管理解决方案来存储和管理您的配置设置。这些解决方案包括 AWS Secrets Manager 的机密、Parameter Store 的参数或 HashiCorp Vault 的配置值。它们允许您为每个环境存储不同的配置,并提供在运行时检索值的 API。

  • 自动化配置设置在不同环境中的部署,作为 CI/CD 管道的一部分。这确保了正确的配置值与移动应用一起部署,减少了在手动更新配置时发生人为错误的风险。

  • 将配置文件或脚本存储在版本控制中,以跟踪变更、维护历史记录并启用协作。这使得在需要时可以恢复到先前的配置,并提供配置修改的审计跟踪。

  • 避免直接将敏感信息存储在配置文件或环境变量中。相反,使用您选择的配置管理解决方案提供的安全存储机制,或在存储之前加密敏感值。

  • 将配置测试纳入自动化测试策略的一部分。编写测试用例,以验证配置设置的正确性和完整性。这有助于在开发早期捕捉到与配置相关的问题,并确保应用在不同环境中按预期行为运行。

  • 为修改配置设置建立变更管理流程。实施审批工作流,确保在将变更应用于生产环境之前,相关利益相关者已对其进行审查和批准。这有助于保持控制并防止未经授权或计划外的变更。

优化构建过程以减少构建时间,因为构建时间过长会拖慢开发周期并增加开发者的等待时间。使用缓存、并行化和增量构建等技术来加速过程。在下一部分中,我们将深入探讨移动应用的远程和依赖缓存,并探索其带来的好处。

远程和依赖缓存

构建和发布移动应用通常需要下载依赖项和资源到 CI 服务器或本地机器上,以便能够构建应用,这可能是耗时且数据密集的。然而,随着远程和依赖缓存解决方案的出现,开发人员现在拥有了一种强大的工具来提高生产力。

移动应用的远程和依赖缓存是指从远程服务器存储和获取常用的依赖项和资源。开发者无需每次构建应用时都下载这些资源,而是可以利用缓存显著减少构建过程中所需的时间和带宽。这种优化技术可以显著简化应用开发工作流程,缩短构建时间,提高迭代周期,并减少数据消耗。

以下是远程和依赖缓存的一些好处:

  • 它消除了重复下载相同资源的需求,使开发人员在构建过程中节省宝贵的时间。当处理依赖项较多的大型项目时,这种加速效果尤为明显。

  • 缓存有助于团队成员之间的协作,确保每个人都能访问相同的依赖和资源。这有助于避免版本冲突,确保团队内一致的开发环境。

  • 开发人员可以快速迭代他们的应用程序,无需等待资源下载,从而加快测试和调试的周期。

  • 一些缓存解决方案提供离线支持,使得开发人员即使在没有互联网连接时也能继续进行项目工作。这个功能对于经常外出的开发人员或在网络连接不稳定的地区特别有用。

但根据选择的缓存解决方案,开发人员可能需要监控和管理缓存,以防止缓存增长过大或堆满过时的资源。有效的缓存管理策略对于保持最佳性能至关重要。

在移动应用的远程和依赖缓存方面,一些工具和平台提供了类似的功能,包括以下内容:

  • Gradle 构建缓存 (docs.gradle.org/current/userguide/build_cache.html):Gradle 是一个流行的构建自动化系统,提供了一个构建缓存功能,可以用来缓存依赖和资源。它与基于 Gradle 的 Android 项目无缝集成,适用于大规模构建。

  • npm 包管理器包括一个缓存机制,可以有效地解析和获取依赖。npm 的缓存显著减少了获取和安装常用包所需的时间。

  • Bazel.build 利用复杂的依赖图和缓存机制,智能地确定需要重新构建的内容,大幅减少构建时间,提高开发人员的生产力。你可以阅读 Reddit 如何在 iOS 应用中使用 Bazel 的例子 (www.reddit.com/r/RedditEng/comments/syz5dw/ios_and_bazel_at_reddit_a_journey/),以及 Square 如何在 Apple Silicon 上使用 Bazel 的例子 (developer.squareup.com/blog/getting-squares-ios-build-ready-for-apple-silicon-with-bazel/)。

  • Tuisttuist.io/):Tuist 是一个命令行工具,使用声明式方法简化 iOS 项目的设置和维护过程。Tuist 缓存(docs.tuist.io/building-at-scale/caching)通过存储和重用先前构建的依赖项、资产和中间构建工件来优化构建时间。这种缓存机制可以大大减少构建和迭代 iOS 项目所需的时间。

  • BuildBuddywww.buildbuddy.io/):BuildBuddy 是一个基于云的构建执行平台,帮助开发人员将构建卸载并分发到远程机器。它提供了一个用户友好的界面、广泛的构建洞察和协作功能,以简化开发工作流。通过使用 BuildBuddy,团队可以减少构建时间,节省基础设施成本,并提高开发人员效率。以下是如何使用 GitHub Actions 进行远程构建执行的示例:www.buildbuddy.io/docs/rbe-github-actions

  • XCRemoteCachegithub.com/spotify/XCRemoteCache):XCRemoteCache 是一个 Xcode 项目的远程缓存工具。它重用在远程机器上生成的目标工件,并通过一个简单的 REST 服务器提供服务。

  • Carthage 缓存:Carthage 是一个 iOS 应用的依赖管理工具,提供缓存功能以加速依赖项的获取和构建时间。它与 Xcode 兼容,并简化了团队成员之间共享依赖项的过程。此外,你还可以使用 Rome(github.com/tmspzz/Rome),这是一个为使用 Carthage 构建的框架提供的共享缓存,允许苹果平台的开发人员使用 Amazon 的 S3、本地文件夹或自定义引擎。

如果在 iOS 应用中使用,你还可以使用 Cocoapods 缓存(cocoapods.org/pods/Cache)或 Swift 包管理器SPM)(github.com/apple/swift-package-manager)缓存。

移动应用的远程和依赖缓存是移动应用开发和移动 DevOps 中的游戏规则改变者,它在节省时间、带宽节约、协作和迭代效率方面提供了实际的好处。

移动 CI/CD 系统使用缓存来在隔离的构建之间传输数据。由于 CI 构建运行在短暂的、隔离的虚拟机中,典型的 CI 工作流必须采取额外的步骤来引导开发人员通常可用的本地环境。

缓存这些操作将使你的 CI 工作流更快,因为安装 CLI 工具和下载第三方依赖项需要时间,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.3_B18113.jpg

图 9.3 – CI 构建机器之间的缓存

虽然初始的设置可能会有一些复杂性,并且需要考虑缓存管理的问题,但总体的优势使得缓存成为任何开发者工具包中的宝贵补充。

这是一个如何使用 GitHub Actions 设置一个简单的 Gradle 缓存管道来加速 Android 应用构建时间的示例:

  1. .github/workflows目录下,创建一个 YAML 文件,例如android_build.yml

  2. 添加以下android_build.yml文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/.github/android_build.yml。该工作流根据 Gradle 文件的内容缓存 Gradle 依赖项。

  3. 根据应用的复杂性和需求,您可能需要添加更多的步骤,例如运行测试、部署构件或与其他服务集成。

让我们来看一个如何在 Bitrise 的 CI/CD 工作流中使用缓存的示例。

Bitrise 提供了缓存拉取步骤缓存推送步骤,这些功能可以基于应用的依赖关系,在构建之间缓存和检索特定的目录或文件。

要为您的 iOS 项目设置缓存,您需要将以下步骤添加到您的 Bitrise 工作流中:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/bitrise.yml

您可以通过以下链接了解更多关于 Bitrise 依赖和缓存的内容:devcenter.bitrise.io/en/dependencies-and-caching.html

最后,通过根据项目的需求对比并选择最合适的缓存解决方案,您可以优化应用开发过程,解锁更高的生产力。

对于你的移动应用和 CI 提供商,始终寻找合适的缓存解决方案是非常重要的。

并行执行 CI 构建和测试

在移动应用开发中利用并行执行进行 CI 构建和测试,可以显著提高开发者生产力,缩短反馈周期,提升整体效率。考虑使用 Fastlane、Firebase Test Lab 以及 CI 工具的能力,以实现最佳并行化并加速您的移动应用开发过程。

移动应用 CI 构建中并行执行的一些好处如下:

  • 更快的反馈:并行执行减少了构建步骤和测试套件所需的时间,提供了更快速的代码更改反馈。这使得开发者能够更快地进行迭代,并在开发周期的早期捕捉到问题。

  • 提高效率:通过利用并行执行,您可以充分利用可用资源,并将工作负载分配到多个代理或设备上。这提高了资源效率,并最大化了 CI 基础设施的利用。

  • 可扩展性:并行执行使您的 CI 流水线能够随着移动应用项目的增长无缝扩展。它使您能够处理更大的代码库、增加的测试套件,并支持多个平台和配置,而不会牺牲速度或性能。

  • 时间和成本节省:通过并行执行来减少构建和测试时间,您节省了宝贵的开发时间,并可能降低与维护 CI 基础设施相关的成本。

大多数 CI/CD 工具支持并行构建,或者将 CI 流水线或工作流拆分成小的补丁或任务,以并行运行,从而节省构建时间。例如,在 GitHub Actions 中,您可以使用 Matrix(docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs)在多种语言版本或多个操作系统上测试您的代码。

使用 Bitrise,您可以使用构建流水线(bitrise.io/why/features/pipeline),它帮助您组织整个移动 CI/CD 构建过程,并允许您设置多个任务和测试的高级配置,可以并行和/或顺序执行。

在并行执行中,多个 UI 测试在不同的设备或模拟器上同时执行,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.4_B18113.jpg

图 9.4 – 并行 UI 测试执行

移动应用 UI 测试的并行执行有助于提高测试过程的速度和质量,从而使您的移动应用更加可靠和健壮。

以下是并行执行在移动应用 UI 测试中的一些好处:

  • 通过并行运行 UI 测试,您可以显著减少整体执行时间。与按顺序执行测试不同,并行执行允许在不同设备或模拟器上并发执行多个测试。这有助于节省时间,并提高测试过程的效率。

  • 通过并行执行,您可以在多个设备或模拟器上同时执行测试。这使得您能够在更短的时间内覆盖更广泛的设备配置、操作系统和屏幕尺寸。它有助于确保您的应用在各种设备上都经过测试,并增加捕捉到设备特定问题的可能性。

  • 并行执行为您的 UI 测试过程提供了可扩展性。随着测试套件的增长,并行执行测试可以让您处理更多的测试,而不会显著增加执行时间。您可以轻松地向测试基础设施中添加更多设备或模拟器,并将测试工作负载分配到它们上。

  • 并行执行充分利用可用资源。通过同时使用多个设备或模拟器,您可以最大化测试基础设施的利用率。这有助于优化资源分配,并确保测试在没有不必要等待时间的情况下执行。

  • 并行执行非常适合集成到 CI/CD 流水线中。通过并行执行测试,你可以实现更快的反馈周期和构建过程。它允许你将 UI 测试无缝集成到 CI/CD 工作流程中,并确保每次代码更改后,应用保持稳定和功能正常。

使用 Flank(flank.github.io/flank/)可以运行并行的 Android 和 iOS 测试,它与 gcloud CLI 兼容。Flank 提供额外的功能来加速速度并提高质量。

移动团队安全快速发布功能的一种有用做法是实现特性标志。让我们讨论一下这一概念及其如何被利用。

A/B 测试与特性标志

A/B 测试和特性标志是移动应用开发中常用的强大技术,用于实验、验证和逐步推出新功能或变体给一部分用户。让我们深入探讨 A/B 测试和特性标志如何为移动应用带来好处以及可用的实施工具。

移动应用的 A/B 测试

A/B 测试涉及向不同用户组展示应用的不同版本或特定功能,以评估其对用户体验、参与度或关键绩效 指标KPI)的影响。

这是它的工作原理:

  1. 实验:A/B 测试工具使开发者能够定义实验,创建不同的变体(A 和 B),并将用户随机分配到每个变体中。例如,你可能会测试不同的应用布局、导航结构或按钮位置。

  2. 衡量:指标和分析对于评估 A/B 测试的成功至关重要。通过监测用户交互、转化率或其他相关 KPI,你可以评估哪个变体表现更好并推动所需的用户行为。

  3. 分析与迭代:分析测试结果帮助你做出数据驱动的决策。你可以根据获得的见解来改进并迭代测试过的功能或版本,从而提升应用的性能和用户体验,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.5_B18113.jpg

图 9.5 – A/B 测试的工作原理

移动应用的特性标志

特性标志(或开关)使开发者能够控制应用程序中特定功能或代码段的可见性和行为。特性标志提供了灵活性,允许开发者逐步推出新功能,在生产环境中进行测试,或动态启用/禁用它们。

这是特性标志的工作原理:

  • 特性标志库或 SDK 被集成到应用程序的代码库中,以实现对功能可用性的运行时控制。标志可以根据预定义条件(如用户群体、设备类型或应用版本)配置为启用或禁用功能。

  • 功能标记使开发者能够通过为特定用户群体选择功能来进行有针对性的测试。这有助于评估功能性能,收集反馈,并在将功能发布给更广泛的受众之前做出数据驱动的决策,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.6_B18113.jpg

图 9.6 – 功能标记的工作原理

以下是一些最受欢迎的移动应用功能标记工具:

  • LaunchDarkly (launchdarkly.com) 是一个功能管理平台,提供强大的功能标记能力。它允许您控制功能的可用性,定位特定的用户群体,并通过基于 Web 的仪表盘轻松管理标记。

  • ConfigCat (configcat.com/) 提供了一个支持移动应用开发的功能标记和配置管理平台。它允许您创建功能标记,控制其可见性,并动态更新配置,无需应用更新。

  • Flagsmith (flagsmith.com/) 是一个开源功能标记和远程配置平台。它提供了一系列功能,包括 A/B 测试、目标规则,并与各种开发框架集成,适用于移动应用实现。

  • Firebase 远程配置 (firebase.google.com/products/remote-config) 是一个基于云的服务,允许开发者动态配置和定制应用程序,无需新发布或应用更新。它使开发者能够远程控制和个性化应用程序的各个方面,如文本、图像、颜色和行为,从而实现有针对性的内容推送和 A/B 测试。

  • Optimizely (www.optimizely.com) 是一个强大的实验和个性化平台,帮助企业做出数据驱动的决策,并提升数字化体验。

以下是 A/B 测试和功能标记在移动应用中的一些好处:

  • 它们帮助您基于真实的用户数据做出明智的决策,提高功能发布和更新成功的机会。

  • 通过逐步推出功能或仅对特定用户群体启用功能,您可以降低与 bug、性能问题或负面用户反应相关的风险。这确保了更平滑、更安全的部署过程。

  • 它们允许根据用户反馈和可衡量的结果快速迭代和优化功能。这个迭代过程增强了开发周期,并加速了功能交付。

  • 功能标记通过根据特定用户群体或个别用户定制应用功能,来提供个性化体验。这种定制化增强了用户的满意度和参与度。

A/B 测试和功能标志为移动应用开发者提供了宝贵的实验、验证和控制发布的技术。可以考虑使用像 Firebase Remote Config、Optimizely、LaunchDarkly、ConfigCat 或 Flagsmith 这样的工具来实现这些策略,并在移动应用开发过程中解锁数据驱动决策和灵活功能管理的好处。

接下来,我们将探讨在移动 UI 测试中使用模拟 API,这可以通过让你在不设置真实 API 或等待网络响应的情况下测试应用 UI,节省时间和精力。它还可以帮助你在不同的场景和条件下测试应用行为,而这些可能是通过真实 API 很难设置的。

模拟 API

模拟 API 在简化移动应用开发中至关重要,它通过解耦后端依赖、加速开发周期并增强可测试性,帮助提升开发效率。

在选择模拟 API 解决方案时,考虑其与开发工作流的集成、定制选项、文档和社区支持。通过利用模拟 API,移动应用开发者可以简化开发流程,提高应用质量,并更高效地进行迭代。

用于移动 UI 测试的模拟 API 是一种模拟的 API,允许你在不连接真实 API 的情况下测试移动应用的 UI。在许多不同的情况下,它都非常有用,例如当真实 API 尚不可用时,当你想要测试应用在不同场景下的行为,而这些场景可能无法通过真实 API 设置,或是你希望在不受网络延迟影响的情况下测试应用性能时。

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.7_B18113.jpg

图 9.7 – 模拟服务器的工作原理

你可以使用多个工具为移动 UI 测试创建模拟 API,例如 WireMockwiremock.org/),这是一款开源工具,允许你通过定义 HTTP 请求和响应来创建模拟 API。它可以作为独立服务器运行,也可以作为 Java 库在你的测试代码中使用。

这是一个设置简单模拟 API 端点返回 JSON 响应的示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/mockTest.kt

这是一个如何将 WireMock 服务器整合到 Android 测试设置中的示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/MyApiTest.kt

运行 Android 测试。对本地模拟服务器上指定 API 端点(例如 http://localhost:8080/api/endpointhttp://mock-server.com/api/endpoint)发出的请求将被 WireMock 拦截,并返回配置的模拟响应。

使用 fastlane 进行构建、测试和发布

fastlane (fastlane.tools/) 是一款功能强大的自动化工具,专门设计用于简化构建、测试和发布移动应用的过程。它提供了多种功能和集成,能够自动化重复任务,从而为移动开发者节省宝贵的时间和精力。

让我们深入了解使用 fastlane 构建、测试和发布移动应用的关键方面:

  • fastlane 简化了构建配置过程。你可以通过 fastlane 的配置文件(Fastfile) (docs.fastlane.tools/advanced/Fastfile/) 以可读的方式定义构建设置,例如代码签名、配置文件和构建风味。这消除了手动配置的需要,并减少了出错的可能性。

  • fastlane 与流行的测试框架(如 XCTest 和 Espresso)集成,允许你在构建过程中运行单元测试、UI 测试以及其他自定义测试。它还可以处理测试报告并生成详细的测试结果报告。

  • fastlane 与流行的 CI/CD 平台(如 GitHub Actions、Codemagic 和 Bitrise)无缝集成。它提供了专门的插件和集成功能,帮助将 fastlane 平滑地融入到 CI 工作流中。这确保了你可以在 CI 流程中持续、自动化地构建、测试和发布移动应用。

  • fastlane 简化了将应用发布到应用商店的过程。通过其 App Store Connect 和 Google Play 插件,你可以自动化整个发布流程,包括版本控制、代码签名、元数据管理,以及上传应用包或 APK 文件。

  • fastlane 的可扩展性允许你通过创建自定义动作或使用许多现有插件来扩展其功能。fastlane 的插件生态系统 (docs.fastlane.tools/plugins/available-plugins/) 提供了大量的预构建插件,这些插件可以与第三方服务如 Slack、Firebase App Distribution、Sentry、BrowserStack 等集成。这些插件使你能够将额外的功能(如崩溃报告、beta 测试或分析)融入到 fastlane 的工作流中。

  • fastlane 拥有一个充满活力和积极参与的社区,社区成员积极贡献开发工作。定期发布更新、新功能和修复漏洞,确保你可以访问到最新的改进和增强功能。

开始使用 fastlane 相对简单。以下是一步一步的指南,帮助你快速上手:

  1. 确保你的系统上已安装 Ruby。你可以通过在终端运行 ruby -v 来检查。如果 Ruby 未安装,你可以使用包管理工具进行安装,例如 Homebrew(适用于 macOS)或 Chocolatey(适用于 Windows)。

  2. 通过在终端运行 gem install fastlane 来安装 fastlane。此命令将获取并安装 fastlane 的最新版本。

  3. 使用终端导航到您的移动应用项目目录。

  4. 在项目目录中运行 fastlane init。此命令初始化 fastlane 并创建一个新的 fastlane 文件夹,其中包含配置文件。

  5. fastlane 使用 Fastfile 来定义和管理自动化任务。使用文本编辑器打开位于 fastlane 目录中的 Fastfile。

  6. fastlane 提供了广泛的内置操作,涵盖了常见任务。例如,您可以使用 scan 操作运行测试,使用 delivery 操作将您的应用上传到 App Store。

  7. fastlane 允许您安全地存储敏感信息,如代码签名证书和 API 密钥。在 fastlane 目录中创建一个新的 .env file,并添加项目所需的环境变量。

  8. 更新位于 fastlane 目录中的 Appfile,添加相关信息,如您的应用的包标识符和 Apple 开发者帐户详细信息。

  9. 要执行特定的 lane,请在终端中运行 fastlane <lane_name>。例如,运行 fastlane beta 将执行您在 Fastfile 中定义的 beta lane。

这是一个 iOS 应用的 Fastfile 示例,包含用于构建、测试和将应用发布到 TestFlight 和 App Store 的 lanes(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/fastlane/Fastfile%20)。

这是一个基本示例,展示了如何使用 fastlane 和 GitHub Actions 自动化您的 iOS 应用部署过程:

  1. 如果 .github/workflows 目录不存在,请在 GitHub 仓库中创建该目录。在该目录下创建一个 YAML 文件(例如,i0S-fastlane.yml)。

  2. 配置一个 GitHub Actions 工作流,例如这个示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/.github/iOS-fastlane.yml

  3. ./path/to/your/project 替换为您的 iOS 项目目录的实际路径,并将 your_lane 替换为您要运行的 fastlane lane(例如,beta、release 等)。

现在,每当您将更改推送到 main 分支时,GitHub Actions 工作流将被触发,并执行定义的步骤,这些步骤包括设置环境、安装依赖项并运行您的 fastlane lane。

这是一个基本示例,您可能需要根据您的项目设置和需求进行调整。

确保查看 fastlane 和 GitHub Actions 文档(docs.fastlane.tools/best-practices/continuous-integration/github/)以了解更多高级配置和选项。

在使用 Bitrise、Codemagic 或任何其他 CI 提供商时,过程类似。您需要将管道步骤替换为 fastlane 命令,并确保在虚拟机上安装了 fastlane 所需的必要先决条件。

记住,fastlane 高度可定制,因此可以根据你的具体项目需求进行调整。不要犹豫,参考官方 fastlane 文档(docs.fastlane.tools)以获取更详细的信息和示例。

下一部分将探讨 ChatOps,以及如何将聊天工具纳入团队对话中,从而加速移动 DevOps 生命周期。

移动 DevOps 协作中的 ChatOps

在当今快节奏的软件开发世界中,有效的协作与沟通是实现无缝移动 DevOps 的关键。随着远程工作和分布式团队的兴起,拥有一个可靠且功能丰富的平台,以促进实时互动变得尤为重要。

ChatOps 是一种协作方法,通过使用聊天平台作为沟通和自动化的核心枢纽,将开发、运维及其他团队结合在一起。它能实现无缝协作并整合各种工具,使得管理软件开发和部署过程变得更加便捷,如下图所示:

https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/mobi-dop-pb/img/Figure_09.8_B18113.jpg

图 9.8 – ChatOps 的工作原理

在移动 DevOps 项目中,实施 ChatOps 可以使协作更加高效和透明。这将改善沟通并加快开发团队的决策过程。

ChatOps 带来的好处如下:

  • 沟通与自动化任务的机器人部署提高了跨职能团队的敏捷性,从而缩短了问题解决的时间。

  • ChatOps 允许我们将不同领域的熟练工人组合成一个团队,而不影响组织结构。

  • 自动化:集成机器人是最重要的成就之一。它们是根据预定命令执行任务的助手。通过这种方式,机器人可以被分配执行如代码搜索、部署和服务器重置等功能,大大减少了处理问题的时间。

让我们一起探索可以帮助实现 ChatOps 的各种工具和服务,以优化我们的移动 DevOps 流程。

Slack

Slack (slack.com/) 是一个因其多功能性和集成能力而广受欢迎的沟通工具。Slack 被证明是移动 DevOps 协作中 ChatOps 的一个强大工具。利用 Slack 进行 DevOps,也被称为SlackOps,是指利用这一流行的团队协作工具 Slack,来简化并增强 DevOps 流程中的沟通、协作和自动化。DevOps 是一种结合软件开发Dev)和 IT运维Ops)的方式,旨在促进协作文化、持续集成/持续交付(CI/CD)以及自动化。SlackOps 利用 Slack 的实时消息、频道、集成和机器人功能,提升 DevOps 团队的效率和效能。以下是使用 Slack 与 DevOps 的一些好处:

  • 它为团队提供了一个集中的空间,便于沟通、分享想法和讨论项目更新。它提供实时消息和语音、视频通话,便于快速高效的协作。

  • Slack 的最大优势之一是其广泛的集成生态系统。它能够与 DevOps 生态系统中使用的各种工具和平台无缝连接,例如 GitHub Actions 用于 CI/CD 管道,GitHub 用于版本控制系统,Jira 用于项目管理工具以及监控服务。这种集成能力可以实现自动化通知和更新,减少在不同应用程序之间切换的需要。

  • Slack 的移动应用提供流畅的用户体验,使团队成员能够保持联系和参与。它提供推送通知、直观的导航和访问所有基本功能,确保无论身处何地都能持续协作。

移动 DevOps 团队可以使用 Slack 简化工作流程、自动化发布过程、共享测试结果,并保持高效。

AWS Chatbot

AWS Chatbot (aws.amazon.com/chatbot/) 是 亚马逊网络服务AWS)提供的一个服务,旨在通过将其与流行的聊天平台集成来简化这些过程。它可以与流行的消息服务集成,如 Slack、Microsoft Teams 和 Amazon Chime。你需要选择你想使用的消息服务并将 AWS Chatbot 连接到它。这将使你能够在消息服务中接收来自 AWS 服务的通知和警报。

首先,重要的是要在你的 AWS 账户中创建一个 AWS Chatbot。这可以通过访问 AWS 管理控制台并选择 AWS Chatbot 服务来轻松完成。然后,你可以创建一个新的聊天机器人,并根据需要自定义其设置。请记住,AWS Chatbot 提供了多个优势,包括以下几点:

  • 与流行的聊天平台如 Slack、Microsoft Teams 和 Amazon Chime 无缝集成。这种集成使团队能够直接在他们首选的聊天环境中接收实时通知、警报和更新,减少上下文切换,让每个人保持信息同步。

  • 团队可以为 ChatOps 定义自定义工作流程,自动化重复任务并促进协作。通过使用聊天命令,团队成员可以对 AWS 资源执行操作、检索信息、启动部署并执行预定义脚本。这种能力使团队能够高效管理基础设施,无需离开聊天环境。

总之,采用移动 DevOps 最佳实践是实现高效、高质量移动应用开发的关键一步。通过结合开发人员、测试工程师、发布专家和其他利益相关者的专业知识,组织可以加速开发和部署过程,从而缩短交付时间并改善用户体验。

摘要

在本章中,我们重点讨论了移动 DevOps 的最佳实践,旨在加速高质量移动应用的开发与发布过程。通过结合开发人员、测试工程师、发布专家及其他利益相关者的专业知识,组织可以优化移动应用开发流程,并向客户提供频繁的更新,从而提高速度和质量。

在本章中,你掌握了 CI/CD 最佳实践、移动应用版本管理、基础设施即代码(IaC)、配置管理、A/B 测试、远程与依赖缓存、并行 CI 构建、fastlane 自动化、API 模拟和 ChatOps 协作等关键技能。这些技能将帮助你在移动应用开发中脱颖而出,并有效地优化你的流程。

在下一章,我们将讨论平台工程和开发者体验DevX)如何提高生产力。

第四部分:超越移动 DevOps 与 DevOps 的未来

移动 DevOps 的未来可能会继续专注于提升移动应用开发的速度和质量。这可能涉及使用更新的技术和实践,以帮助提高移动应用开发的速度和质量。

本部分包含以下章节:

  • 第十章*,通过开发者体验与平台工程提高生产力*

  • 第十一章*,预测移动 DevOps 的未来*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值