2015

CocoaPods 只是一个依赖关系管理器,就像 Apple 是一个手机制造商一样,它只是 Apple 众多项目中的一个。

-- Ash Furrow - 建立在线社区

去年,大约在这个时候,我为 CocoaPods 开始了一篇 年度总结。一个拥有 10 位相对活跃的开发者和许多非常受欢迎的临时贡献者的项目,会发生很多事情。

统计数据

好吧,让我们从一个爆炸性的开始!以下是 TLDR 有趣的数字

  • 每分钟 24 次搜索。
  • 每分钟 45 次 pod 安装。
  • 100,000 个唯一应用目标。
  • 网站 100,000 个唯一访问者。
  • 每月 500,000 次页面浏览。
  • CocoaPods 的 250 万个 gem 下载量。
  • 通过 pod install / pod update 集成的 660 万个目标。
  • CocoaPods 已集成 3000 万个 pod。

贡献

我们以所有权变更开始了这一年。负责该项目五年之久的 Eloy Durán 宣布由于成为父亲,他将退居幕后。

现在,我们有四个人在围绕 CocoaPods 做出许多重大决策:Boris BüglingMarius Rackwitz我自己Samuel Giddins。在日常工作中,我们得到了 其他开发人员 的帮助。

今年,我们看到 Samuel Giddins 由 Capital One 赞助,以便帮助他专注于在大学学习期间构建 CocoaPods。我想深入了解一下 Samuel 去年所做的工作。在 上次总结中,我提到了他正在从事的一个项目

第二个,Samuel Giddins,主要一直在为 CocoaPods 和 Bundler(Ruby 的 CocoaPods)开发一个迭代依赖关系解析器。

这个项目变成了一个名为 Molinillo 的库 gem,请参阅 公告,它是对 CocoaPods 影响最大的项目。Molinillo 现在同时用于 BundlerRubyGems!这太棒了,因为它为大量的 ruby 基础设施提供了支持,但很快 CocoaPods 的代码将随 OS X 的每个副本一起发布。太酷了。

社区

今年,许多大公司开始使用 CocoaPods 作为其 SDK 的传输方法。我们在一些年度主题演讲中得到了推荐

Apple 甚至 合并了一个 Podspec 到其第一次涉足开源库 ResearchKit 中。

我们今年最大型的在线/离线活动是 CocoaPods 测试干扰。它在 7 个城市举行,帮助很多人用测试和回馈开源社区的方式进行引导。组织和参与活动都非常棒。

我们发现跟踪所有 pod 开始成为一个问题,例如昨天有 18 个新 pod 添加到 trunk。我们想找到一种替代方式来跟踪新 pod,所以 我们创建@CremeDeLaPods 作为跟踪最高质量 pod 的一种方式。

为了进行实验并鼓励 CocoaPods 团队中的新声音,我们与 Rails Girls Summer of Code 合作。我们与 Karla Sandoval 和 Emma Koszinowski 合作,她们组成了团队 CocoaGems。在 GitHub 网络团队的建议下,她们

  • 创建了一个插件来 注释一个 Podfile
  • 将 CocoaPods 的用户界面部分转换为一个名为 Cork 的 gem。
  • 将 CocoaPods 的命令行搜索工具拆分为一个新 gem,CocoaPods-Search

网络属性

一个让我揪心不已的问题是可发现性。我们希望降低每个人参与 OSS 的进入门槛,让人们的项目易于发现是其中重要的一部分。

在过去的一年中,CocoaPods 网络形象投入了大量工作,最明显的是我们现在为一个 pod 提供了单独的页面。这些 pod 页面提取了 pod 周围几乎所有有趣的元数据,这使得浏览和比较 pod 变得容易得多。

我们推出了一个我们已经开发了一年多的项目,CocoaPods 质量指数 (QI),对软件质量进行定义的一种不断演进的尝试。这些 QI 在整个网络属性中用于提供反馈和对 pod 进行排序。

QIs 提供了一个积极的反馈循环,向你展示了你可以通过改善你的库来玩转系统的方法。我希望通过专注于向你展示改善的方法,而不是惩罚令人沮丧的行为,我们可以继续培养一个热情和支持的社区。

为了进一步扩展并让人们更好地了解其库的状态,我们创建了 Pod 作者页面。以下是一个来自 Andrea Mazzini 的精彩示例,它让人们非常容易地了解他对社区的影响。

我们今年发布的另一个多年项目是 CocoaPods Stats。Stats 提供了一种方法来了解一个 pod 有多少下载量,更有趣的是它已经与多少个目标集成。这是我在其他依赖项管理器中没有找到的东西,因为它是一个非常难以解决的问题。我们无法单独发布此功能,因此非常感谢 Segment 赞助了这里的大量基础设施。

虽然通过 CocoaPods 可用的 pod 数量在去年有所增加,但我们用于搜索的服务器数量却没有增加。Florian Hanke 从一开始就与我们合作,他继续拒绝向我们的搜索服务器投入更多资金。他的工作使我们能够处理搜索流量翻倍、支持更多元数据、添加不同的排序类型,并允许将范围缩小到 Apple 持续发布的所有新平台。

CocoaDocs,CocoaPods 文档服务今年通过 Jazzy 开始支持 Swift 代码,并且在该领域的前景一片光明,因为 Jazzy 现在支持 Objective-C 项目,并且总有一天将支持混合语言项目。我们明年可能会迁移 CocoaDocs 以仅使用 Jazzy。CocoaDocs 在扩展方面遇到了问题,因为今年发布了大量新 pod 版本。我们通过与 Button 合作来解决这个问题,让一台高端 Mac Mini 来完成这项工作,而不是 共享 VPS

最后,我们通过一个名为 Strata 的元仓库,让通过网络基础设施进行引导变得更加容易。

因此,为了总结一下,我查看了 CocoaPods 网页属性的 Google Analytics。我最喜欢的古怪统计数据是:我们从 Windows 设备获得的用户会话比从 iOS 设备获得的更多。也许移动设备只是一时风尚?

CocoaPods

因此,从 Apple 发布的角度来看,今年是疯狂的一年。

在过去 3 个月中,Swift 是半数新 Pod 的主要语言。去年这个时候,我们才刚刚开始发布支持框架的测试版,让那些足够勇敢的早期采用者能够使用 Swift。现在,Swift 库已跻身下载量排名前十的 Pod,并且有数万个应用程序使用带有 Swift 框架的 CocoaPods。我们开始看到该语言真正被主流采用。

Apple 还通过引入 2 个新平台让我们保持警惕。watchOS 最初作为 iOS 扩展,但后来通过 watchOS2 迁移到其自己的真实平台。tvOS 在年底问世。这意味着 CocoaPods 现在支持 4 个独立平台。

我们添加了确定性 UUID 生成,如果您在 Pods 目录中签入,这非常重要。这意味着运行 pod install 将为其生成的文件生成相同的 UUID,并且您不会看到 Pods.xcodeproj 的差异。

CocoaPods 插件 API 通过 pre-installpost-install 钩子变得更加强大。第三方对插件的采用非常棒,并且我们已将大量非核心 CocoaPods 代码移入插件。例如;trunk、stats、search 和 try 都是插件。

我们通过默认情况下将文件设为只读,让您更难意外编辑 Pods 文件。

最后,Molinillo 的引入使 CocoaPods 的依赖项解析成为一流。这意味着 pod install 现在将始终与生成 Podfile.lockpod install 完全相同。此外,说真的,它在 RubyGems + Bundler 中,太酷了。

CocoaPods.app

我们一直在努力的最后一个重大项目,并且已经偷偷发布了一些版本,那就是 CocoaPods.app。在我们不断努力降低构建应用程序的进入门槛的过程中,我们已经开始解决最后一英里。我们如何改进和简化 CocoaPods 的安装和更新?

实现这一目标的最佳方法是让 CocoaPods 就像 Cocoa 开发人员每天使用的其他工具一样。因此,我们一直在开发一款 CocoaPods.app,您可以将其拖到 /Applications 中,它将为您处理 CocoaPods。

我想说抱歉,如果仅仅为了这个而使用终端让您感觉像个精英黑客,但我会错的。CocoaPods.app 包含 pod 命令的完全托管副本(以及它依赖的所有工具:svn、hg、bar、git 等),您可以从终端使用它。

下一个 CocoaPods 版本将是我们提供此版本作为安装 CocoaPods 的默认方式的第一个版本。我认为这是我们可以为使用 Pods 的人提供的最佳体验。目前,我们将其隐藏在 cocoapods.org/app 上。我们的目标是类似于此的内容

1.0

我在上一篇博文中谈到了 1.0 的样子,因此今年的结尾也以 1.0 作为结尾似乎很合适。我们的 1.0 里程碑即将到来,Podfile 语法中最后一次重大破坏性更改也取得了进展。如果运气好的话,今年可能最终会成为 CocoaPods 1.0 年。

赞美的推文