移动构建的稳定技术?

Stabilization techniques for mobile builds?

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


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

这会导致应用在生产环境中自发崩溃。但它揭示了引擎盖下一个更严重的问题:决定将你的构建固定在特定依赖项上(plugins/libraries/etc。)版本 总是拉入 latest/stable 个版本!

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

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

但是,当iOS/Android 确实 发布了重大更改或错误(或任何提示 library/plugin 维护者会疯狂地发布他们自己的新版本),因为我已经将我以前的构建固定到特定版本的依赖项,我实际上可能 运行 在非常旧的依赖项版本上,现在它将是一个巨大的让我的应用程序再次针对所有最新版本构建令人头疼。

选项 2:始终使用 latest/stable 版本

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

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

有没有tools/strategies/techniques/etc。移动社区利用它来稳定构建并进行构建,以便我可以拥有更一致、可重复的构建?

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

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

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

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

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

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

应用程序在新的 OS 版本上崩溃并不是一个灾难性的问题,它很常见并且有它的解决方案,Google 并且 Apple 不会向用户发布新的 OS 版本只是这样,开发人员会获得 OS 和新 API 的预览版本,开发人员通常有超过 2 个月的时间来采用他们的应用程序进行新的更改,甚至使用新的 API功能。

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

干杯