【发布时间】: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