iOS-factor 的灵感来自于著名的 12-factor应用框架——用于编写高质量 web 服务的方法论。iOS-factor 使用与其相同的结构和类似的原则,重写后应用于 iOS 应用程序的开发流程上。

背景

过去 10 年里,iOS 应用的开发流程发生了剧烈的变化:

  • 以前仅需支持单一设备;而现在需要支持使用 iOS 系统的大量机型,如各种 iPhone 和 iPad,以及多个平台,如 tvOS 和 watchOS;
  • 以前手动集成 git 中的模块;而现在使用第三方库的依赖管理器;
  • 以前 iOS 应用大多仅运行在本地;而现在 iOS 应用则需要大量依赖后端服务;
  • 以前 iOS 应用的审核时间需要 2 周以上;而现在最短仅需不到 1 天;
  • 以前使用 iTunes 在手机上安装应用;而现在使用官方的 TestFlight 发布应用;
  • 以前向 iTunes Connect 上传时,每种语言仅需 5 张屏幕截图;而现在每种语言需要上传 110 张,同时还需要上传应用预览;
  • 以前开发者使用的编程语言只是 Objective-C 和 C++;而现在是多语言混合,包括 JavaScript;
  • 以前是慢节奏发布;而现在每周都要发布;
  • 以前发布完整版本;而现在要进行 A/B 测试,新功能要慢慢推出,还要自动化回归检测。

什么是 iOS-factor?

iOS-factor 是一个从2018年5月开始的试验性项目。它的目标在于为构建高质量 iOS 应用提供一套最佳实践方案。每个主题就是一个 factor,它描述了在 iOS 开发过程中某个方面的理想状态。

由于一些限制(例如 Xcode 只能在 macOS 上运行),并非所有的要求都能被满足。这个项目旨在明确目标,同时针对我们目前面临的挑战提出最佳实践。

iOS-factor 是关于开发 iOS 应用时的架构决策,且不会涵盖任何与特定编程语言有关的问题。

这个项目目前由 iOS 开发社区维护。你可以在 GitHub 上找到完整的源码,并对其进行更新或者添加新的 factors。


The iOS factors

I. 依赖

显式声明及分离依赖

II. 配置

配置不要写在代码中,使用默认配置发布并允许 OTA 升级配置

III. 开发环境和生产环境等价

尽可能保证开发,预发布,线上环境相同

IV. 部署

自动化部署,这样在任何机器上都能快速完成部署。

V. 本地大于远程

iOS 应用尽可能不要依赖后台

VI. 接口的后向兼容性

并不是每个用户都会升级到最新版本

VII. 应用版本管理

通过自动化保证编译号和版本号的一致性

VIII. Rollbacks

Reverting a build that causes issues

IX. 数据持久化

数据的存储请参考苹果官方文档