2015 年 3 月 16 日
关注 @ortaTL;DR: CocoaPods.org 2.1 版本已发布,支持内联深度搜索结果和 Pod 页面。
背景故事。
CocoaPods 网站是一个有趣的野兽。2013 年 10 月,我们开始重写CocoaPods 网页。我们集中整理了文档,创建了一个博客并重新设计了所有内容。
我们决定使用中间人页面和 jekyll 的组合。鉴于当时 CocoaPods 没有中心数据库,因此尝试将其作为静态网站以提高速度和可维护性是有意义的。一旦CocoaDocs v2于 2014 年 5 月发布,我便将目光投向了尝试让 cocoapods.org 稍微更接近我对网站提供的功能的宏大愿景。
在理想情况下,你应该能够仅使用 CocoaPods.org 的主页找到一个符合你限制的库。通常有多个库,这就是事情变得有点复杂的地方。在网站的先前版本中,为了在多个库之间进行选择,你需要在单独的标签页中在 GitHub 上打开它们并进行比较。现在,你不需要了。🎉
以下是它的工作原理
让我们随机选一个 Pod。 MiniFuture。以下是 Pod 发布后的情况
- 将新的 Podspec 版本添加到Trunk
- 来自 Trunk 的 webhook 触发搜索引擎中 Pod 的重新索引,该搜索引擎使用生成的元数据对 Pod 结果进行排序和显示。
- 另一个 webhook 发送到 CocoaDocs,触发文档构建
- 文档构建使用Jazzy(或appledoc,适用于 Objective-C 项目)生成文档。
- 然后 CocoaDocs 开始生成元数据。这为我们提供了一个丰富的数据集,可以开始提供一些有用的统计信息。这集中在metrics.cocoapods.org中,我们目前也在其中保留了最新的 GitHub 指标。
// http://metrics.cocoapods.org/api/v1/pods/MiniFuture
{
"cocoadocs": {
"created_at": "2015-03-08 16:48:25 UTC",
"doc_percent": 22,
"dominant_language": "Swift",
"download_size": 416,
"initial_commit_date": "2015-03-01 12:03:09 UTC",
"license_canonical_url": "http://opensource.org/licenses/MIT",
"license_short_name": "MIT",
"notability": 0,
"quality_estimate": 50,
"readme_complexity": 72,
"rendered_readme_url": "http://cocoadocs.org/docsets/MiniFuture/0.1.0/README.html",
"total_comments": 8,
"total_files": 4,
"total_lines_of_code": 327,
"total_test_expectations": 204,
"updated_at": "2015-03-08 16:48:25 UTC"
},
"github": {
"contributors": 1,
"created_at": "2015-03-01 10:09:08 UTC",
"forks": 0,
"language": "Swift",
"open_issues": 0,
"open_pull_requests": 0,
"stargazers": 8,
"subscribers": 2,
"updated_at": "2015-03-05 01:01:44 UTC"
}
}
为库生成了预览图像,用于社交媒体、聊天或任何真正支持开放图预览的内容。 以下是我们确定措辞的方式。
然后,我们为库生成一个估计的质量数字。这是基于一系列单个指标,这些指标应用于生成的指标数据。它们采用一个库,并根据规则是否适用于该库来增加或减少分数。这些指标范围从库的流行度、总测试期望/代码行到文件,以及库中每个文件的平均代码行。
// https://cocoadocs-api-cocoapods-org.herokuapp.com/pods/MiniFuture/stats
[
{
"applies_for_pod": false,
"description": "Testing a library shows that the developers care about long term quality on a project as internalized logic is made explicit via testing.",
"modifier": -20,
"title": "Test Expectations / Line of Code"
},
{
"applies_for_pod": false,
"description": "Too big of a library can impact startup time, and add redundant assets.",
"modifier": -10,
"title": "Download size"
},
{
"applies_for_pod": false,
"description": "Smaller, more composeable classes tend to be easier to understand.",
"modifier": -8,
"title": "Lines of Code / File"
},
[...]
{
"applies_for_pod": true,
"description": "A popular library means there can be a community to help improve and maintain a project.",
"modifier": 5,
"title": "Is popular"
}
]
这提供了足够的元数据来开始创建一个页面,该页面用特定于我们社区的上下文来表示库。在很多方面,它可能比 GitHub 存储库的前页更好。
它是如何组合在一起的
我们在搜索中使用质量指标对结果进行排序。现在有许多不同的排序选项,因此我们可能会考虑在那里提供选择。
我们已经开始在 Pod 的个人资料页面和内联结果中公开大量信息,但并非全部。关于我们如何公开更多信息存在有趣的问题。
展望未来
我们使用的 API 都可供任何人构建其上的内容。这些数据非常可靠,API 路由不会改变,并且正在进行工作以提高其准确性。我们只会从这里扩展。
它并不完美,但网站不是 iOS 应用程序,我们可以每天部署。我们重新编写了主页,使其直接从新数据库运行,并且极大地简化了开发过程。因此,任何人都可以轻松地做出贡献并提供帮助。在稳定之前,我们将在其上进行迭代,因此我们希望在问题或 Twitter 上获得反馈。
也需要很多人
虽然我在过去 8 个月中一直支持此功能,但我得到了很多帮助
- Florian Hanke、Samuel Giddins、Hugo Tunis在指标、搜索和 CocoaDocs API 方面提供帮助。
- Kyle Fuller在无数的 CocoaDocs 改进和维护方面提供帮助
- David Grandinetti、Mike Lazer-Walker、Phil Tang、Brian Gesiak和Danny Hertz在质量/流行度指标方面提供帮助