《WWDC 2019 :优秀的开发习惯》

1. 组织(Organize)

  • 利用 Group 来组织你的项目,与文件系统结构相对应。
  • 利用 Reference 拆分过大的 Storyboard。
  • 确保项目文件是最新的:及时更新项目设置到最新的格式,并及时处理 issue navigator 出现警告;确保你的项目使用新的构建系统 New Build System。
  • 清除废弃、旧的代码:即使移除无用的代码,使用版本管理工具管理历史代码,删除无用的代码而不是单纯的注释掉。
  • 出现警告时就找到并解决引起它的根本原因:坚持使用零警告的实践,包含警告的代码不要引入,像对待错误一样对待警告,尽快地修复它们。

2. 追踪(Track)

  • 使用代码管理工具进行源码管理:
  • 使用更小粒度的递交,保持小增量更新。
  • 编写有用的 commit message。
  • 利用分支的帮助进行管理和隔离因修复bug或添加新功能引起的代码变更。

3. 文档(Document)

  • 摒弃代码是自记录(self-documenting)想法,注释需要关注的是代码起初写在这里的原因和支撑这么做的理由。
  • 使用 option + command + /组合键 快捷创建注释文档。
  • 尽量为函数、属性、结构体和枚举都添加上说明文档。

4. 测试(Test)

  • 编写单元测试;
  • 在每次递交前运行单元测试;
  • 将单元测试集合到 CI 中。

5. 分析(Analyze)

  • 使用 Network link Conditioner 工具进行网络环境模拟和测试;
  • 使用 Address Sanitizer 配置监视类似内存错误和缓冲区溢出的问题;
  • 使用 Thread Sanitizer 配置帮助发现多线程数据竞争问题;
  • 使用 Undefined Behavior Sanitizer 可以帮助捕获诸如除零错误、浮点数的转换超出范围或溢出、以及未对齐指针等 bug;
  • 使用 Main Thread Checker 帮助确保没有在后台线程中对 AppKit 和 UIKit 的 API 的无效调用;
  • 使用 Xcode - Debug Naviagtor 中的调试仪表盘查看整个App生命周期的CPU、内存、磁盘和网络利用率,快速了解你的App是否通过网络正在连接未知的服务器或者不断地轮询某个端点,消耗大量的带宽和电量;
  • 通过Profile中的Instruments按钮进行进一步的深入分析,比如通过 Time Profiler 查明代码的哪些段落占用了最多的周期,并且允许我们缩小那段也许应该变成异步或者被不可扩展的方式实现的代码的范围。

6. 评估(Evaluate)

  • 坚持代码评审(Code Review);
  • 理解每一行变更的代码
  • 构建项目并跑起来看看
  • 运行测试,检查测试是否通过
  • 阅读注释和文档,寻找是否有拼写和语法错误。

7. 解耦(Decouple)

高内聚,低耦合:

  • 使用依赖包进行模块拆分解耦;
  • 尝试为代码分享社区做些贡献。

8. 管理(Manage)

  • 搞清楚所使用的 Swift 包、框架和其他库的作用以及给你的项目带来的好处和风险。
  • 搞清楚依赖包内部的依赖项。
  • 确保依赖包没有收集不必要的指标或设备信息,确保它没有把数据从你的设备发送出去。
  • 考虑清楚并制定计划以应对依赖包不维护的情况。