如何贡献

<开发工作流程

CocoaPods 的标准开发如下所示

<选择问题

问题分类

  • 缺陷:这些是已知的错误。该问题还应包含重现步骤。随时修复这些问题并提交 pull 请求。
  • 增强:这些是尚未选取的计划增强功能。如果您想处理其中一项,请添加一条评论说明您正在这样做。
  • 讨论:这些问题可能是非问题,包括最佳实践或未来计划。
  • 快速:这些是小问题,应该能够快速修复。通常,这些问题不会存在很长时间。
  • 要检查:这些问题可能无法重现,或者尚未得到团队成员的审查。
  • 已知解决方法:这些问题已讨论了解决方案,但尚未实施。
  • 简单的第一步这些问题是开始使用的绝佳问题。它们往往会持续一段时间。我们希望人们觉得总有可以开始的地方。

进行 Pull 请求

在提交 pull 请求之前,请执行以下操作

  1. 运行 rake spec 并确保所有测试都通过。如果你正在添加新命令或功能,它们必须包含测试。如果你正在更改功能,请在需要时更新测试。
  2. CHANGELOG 中添加一个注释,描述你更改的内容。
  3. 提交你的请求。如果它与某个问题相关,请在描述中添加一个指向该问题的链接。

<代码风格

CocoaPods 惯例是支持小方法和许多类。建议方法尽可能小,既便于代码重用,又便于阅读。

install! 中获取 CocoaPods gemInstaller

def install!
  resolve_dependencies
  download_dependencies
  generate_pods_project
  integrate_user_project if config.integrate_targets?
  perform_post_install_actions
end

几乎所有类都是命名空间的。例如,Installer 调用 Installer::TargetInstallerInstaller::PodSourceInstaller 来完成其工作。这些类的源文件应驻留在命名的文件夹中。

方法和变量命名应非常明确。例如,PodSourceInstaller#download_source 负责下载源。请避免使用通用方法和变量名称,即 vara 等,除非在块中使用。

所有方法都应按文档部分中说明进行记录和分组。

<测试

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'
#