移动构建的稳定技术?



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


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

这将导致应用在生产中自发崩溃。但它揭示了一个更令人讨厌的问题:决定将构建固定在特定依赖项(插件/库/等)版本上,或者总是拉入它们的最新/稳定版本!

选项 1:固定依赖项版本

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

但是,当 iOS/Android确实发布了重大更改或错误(或任何促使库/插件维护者进入狂热并发布自己的新版本的内容)时,因为我已将以前的构建固定到特定版本的依赖项,我实际上可能正在运行非常旧的依赖项版本,现在让我的应用程序针对所有最新版本再次构建将是一个巨大的头痛。

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

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

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

移动社区是否有任何工具/策略/技术/等来稳定构建并使其能够使我能够拥有更一致、可重复的构建?

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

您的构建应该是自动且一致的,有些产品可以为您执行此操作,例如BuddyBuild和Buddy同时支持Android和IOS。

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

下面是一个简单的 CI/CD 工作流

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

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

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

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

干杯

最新更新