【问题标题】:Stabilization techniques for mobile builds?移动构建的稳定技术?
【发布时间】:2018-08-30 20:45:31
【问题描述】:

请注意:虽然我在这里特别提到了 AngularJS、Ionic 和 Cordova,但我真正谈论的是任何移动应用程序(混合和原生),它们可以为以下应用程序生成二进制文件iOS 和 Android 平台。因此,我相信任何有移动开发经验的人都应该能够解决这个问题!


我正在使用 AngularJS、Ionic 和 Cordova 为 iOS 和 Android 构建一个移动应用程序。我担心的是 iOS 和 Android 一直在发布更新,有些可能是错误的,或者可能只是彻底的破坏性更改,并且突然变得与我正在使用的插件/库版本不兼容。

这会导致应用在生产环境中自发崩溃。但它揭示了一个更棘手的问题:决定将您的构建与特定依赖项(插件/库/等)版本始终拉入最新/稳定版本他们!

选项 1:固定您的依赖版本

在这里,我们指定要使用的所有依赖项的确切版本。然后我们使用 Ionic 构建来构建应用程序,但现在可以开始了。我可以预期,如果我不更改任何代码,那么针对完全相同的依赖版本的应用程序的每个后续构建都将始终成功构建。

然而,当 iOS/Android确实 发布重大更改或错误(或任何促使库/插件维护者疯狂并发布新版本的他们自己),因为我已经将我以前的构建固定到特定版本的依赖项,我实际上可能在非常旧的依赖项版本上运行,现在让我的应用程序针对所有最新版本再次构建将是一件非常头疼的事情。

选项 2:始终使用最新/稳定版本

如果我指定依赖版本(只是让构建始终使用最新和最好的),那么我可以热心地工作以构建我的应用程序,然后等待几天(而不是更改我自己的任何代码)然后尝试再次构建它,编译/构建可能会失败!这是因为在这几天之间,一些项目升级了自身和/或它自己的依赖项并引入了构建中断的更改。

然而,当 iOS/Android 发布需要我升级到最新依赖项的重大更改时,头痛可能会比选项 1 少得多,因为我将使用相对更新的版本我所有的依赖项。

是否有任何工具/策略/技术/等。移动社区利用它来稳定构建并制作它,以便我可以拥有更一致、可重复的构建?

【问题讨论】:

  • 为什么是DV?这是一个主题,显示研究,而不是欺骗......
  • 您熟悉持续集成吗?
  • 感谢@JoeriShoeby,我对 CI 非常非常熟悉!你建议我如何利用 CI 来解决这个问题?
  • 还有@JoeriShoeby——我不认为 CI 是 iOS 的可能解决方案,因为 iOS 必须 在需要 Mac 硬件的 Xcode 内部编译。除非您建议将本地 Mac 服务器用于 CI 目的...
  • 使用 Jenkins 进行 CI 不需要 MAC 服务器。您只需要一台 Mac 机器,它将充当您的主 Jenkins 服务器(可以在 Windows 上运行)的 Slave。你的 mac 机器只会为 iOS 构建为了实现构建稳定性,你需要有良好的仪器和单元测试覆盖率。对于 Android,您可以使 targetSdkVersion 可配置。每次 Google 发布新的预览版时,您都可以在 CI 上更改此值并运行测试。它使您可以及早发现问题并确保稳定性。 iOS 也可以这样做

标签: android ios build mobile-development


【解决方案1】:

建议使用特定版本的依赖项,您可以考虑在次要补丁级别 X.Y.* 上使用概念 * 以获得最新的错误修复。

您的构建应该是自动且一致的,有些产品可以为您做到这一点,例如 BuddyBuild 和 Buddy 同时支持 Android 和 IOS。

成功的构建并不是全部,应用程序应该在发布前通过所有功能和 QA 测试。因此,您需要编写尽可能多的 UnitTests 和 FunctionalTest 来涵盖质量检查。还有其他 QC 工具可以进一步保证,例如静态代码分析工具可以帮助您发现潜在的错误和故障,测试覆盖率工具可以让您知道您的代码的哪些部分尚未经过测试。

这是一个简单的 CI/CD 工作流程

Code -> Push -> CI Test -> CD Publish Release

您可以设置一个作业,每周在 CI 服务器上构建您的项目,并仅在通过所有质量检查时发布一个版本

应用程序在新的操作系统版本上崩溃并不是一个灾难性的问题,它很常见并且有它的解决方案,谷歌和苹果不会像那样向用户发布新的操作系统版本,开发人员提供了操作系统的预览版本和新的API,开发者通常有两个多月的时间来采用他们的应用程序进行新的更改,甚至使用新的 API 功能。

顺便说一下,您可以使用 Fabric.io 和 Firebase 等崩溃报告工具,帮助您发现生产中的问题。

干杯

【讨论】:

  • +1 用于预览构建建议,绝对是在官方操作系统更新之前及早发现错误的 gd 策略
  • 谢谢@M.Reza (+1),我喜欢你在这里的建议,我从我的移动开发人员那里听到了两个主要的反对意见:(1)虽然 Android/iOS 为其新版本提供“预览模式”,但当他们需要在没有警告的情况下发布紧急修复/安全补丁时,这并不适用。 您能否谈谈这种情况发生的频率以及您的上述解决方案如何适应这些未宣布的/紧急修复?
  • (2) 我的移动开发人员告诉我,有时某些平台工具(尤其是 Xcode)会强制开发人员升级到最新的依赖项。 根据您的经验,这是真的吗?如果是这样,您的上述解决方案如何处理这个问题?再次非常感谢!!!
  • @smeeb 紧急修复通常用于安全补丁,每个大型科技公司都知道他们是否引入了重大更改,即使它是次要修复,也必须在主要更新下发布。所以它经历了与开发人员相同的修改过程,即使是在公开发布之前的短时间内。并且不要被新版本吓到,新版本在几个月内都不会触及 1% 的 Android 用户,不过你在 IOS 上的时间更少了。
  • @smeeb (2) 只有当你想为新的操作系统版本构建或者你有一个非常旧的实例时,它才会强制你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2018-08-04
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多