<开发工作流程
CocoaPods 的标准开发如下所示
- 使用 Rainforest 设置您的开发环境。
- Fork
CocoaPods/CocoaPods
- 选择一个 问题。请参阅 下面说明的 问题分类
- 检查 CONTRIBUTING 要求。
- 创建一个 pull 请求。
<选择问题
问题分类
- 缺陷:这些是已知的错误。该问题还应包含重现步骤。随时修复这些问题并提交 pull 请求。
- 增强:这些是尚未选取的计划增强功能。如果您想处理其中一项,请添加一条评论说明您正在这样做。
- 讨论:这些问题可能是非问题,包括最佳实践或未来计划。
- 快速:这些是小问题,应该能够快速修复。通常,这些问题不会存在很长时间。
- 要检查:这些问题可能无法重现,或者尚未得到团队成员的审查。
- 已知解决方法:这些问题已讨论了解决方案,但尚未实施。
- 简单的第一步这些问题是开始使用的绝佳问题。它们往往会持续一段时间。我们希望人们觉得总有可以开始的地方。
进行 Pull 请求
在提交 pull 请求之前,请执行以下操作
- 运行
rake spec
并确保所有测试都通过。如果你正在添加新命令或功能,它们必须包含测试。如果你正在更改功能,请在需要时更新测试。 - 在
CHANGELOG
中添加一个注释,描述你更改的内容。 - 提交你的请求。如果它与某个问题相关,请在描述中添加一个指向该问题的链接。
<代码风格
CocoaPods 惯例是支持小方法和许多类。建议方法尽可能小,既便于代码重用,又便于阅读。
从
install!
中获取 CocoaPods gem 的Installer
类
def install!
resolve_dependencies
download_dependencies
generate_pods_project
integrate_user_project if config.integrate_targets?
perform_post_install_actions
end
几乎所有类都是命名空间的。例如,Installer
调用 Installer::TargetInstaller
和 Installer::PodSourceInstaller
来完成其工作。这些类的源文件应驻留在命名的文件夹中。
方法和变量命名应非常明确。例如,PodSourceInstaller#download_source
负责下载源。请避免使用通用方法和变量名称,即 var
、a
等,除非在块中使用。
所有方法都应按文档部分中说明进行记录和分组。
<测试
CocoaPods 具有广泛的测试套件。在测试未通过的情况下,不接受任何代码提交到 master
。所有测试文件都可以在 spec
文件夹中找到。
CocoaPods 的测试是用 Bacon 编写的,并分为单元、集成和功能测试。
要运行完整的测试套件
$ bundle exec rake
# Or to run a single test suite:
$ bundle exec rake spec:functional
有时,用于功能测试的固定装置需要重建。当 Pods 目录的文件结构发生更改时,尤其如此。
要更新这些固定装置
$ bundle exec rake spec:rebuild_integration_fixtures
<文档
所有方法和属性都必须记录。作为 CocoaPods 发布过程的一部分,文档是从源代码生成并在线发布的。 YARD 用于生成此文档。
文档应简短,但有解释性。所有参数和返回值都需要解释。鼓励提供注释和示例,但不是必需的。看看 Project 类的这个方法
# @return [Pathname] Returns the relative path from the project root.
#
# @param [Pathname] path
# The path that needs to be converted to the relative format.
#
# @note If the two absolute paths don't share the same root directory an
# extra `../` is added to the result of
# {Pathname#relative_path_from}.
#
# @example
#
# path = Pathname.new('/Users/dir')
# @sandbox.root #=> Pathname('/tmp/CocoaPods/Lint/Pods')
#
# @sandbox.relativize(path) #=> '../../../../Users/dir'
# @sandbox.relativize(path) #=> '../../../../../Users/dir'
#