CocoaPods.org 二次发布

TL;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 个月中一直支持此功能,但我得到了很多帮助