CocoaPods 统计

多年来,人们一直在询问有关其库下载次数的反馈。我们也思考了这个问题很长时间,最终询问 Segment 是否可以为该项目提供后端。

但等等,还有更多...

仅仅提供下载计数还不够。我们花费大量时间来解决 Xcode 的项目文件错综复杂的问题,但在这种情况下,它为我们提供了一个非常好的功能的基础。CocoaPods 统计将能够跟踪应用/手表应用/扩展/单元测试中的唯一安装数。

这意味着,即使服务器每次都运行 pod install,使用持续集成的开发者也只会被注册为 1 次安装,从而区分总安装数和实际下载数。

好的,稍等

让我们了解一下我们如何检查哪些 pod 被发送用于分析,以及我们如何执行唯一安装。 CocoaPods-Stats 是一个插件,从 0.38 版开始与 CocoaPods 捆绑在一起。它 注册 为一个安装后插件,并在每次 pod installpod update 时运行。

检测公共 Pod

我们对将 Pod 发送到我们的 统计服务器 非常悲观。我们确保您已将 CocoaPods/Specs 存储库设置为您的主存储库,然后确保每个要发送的 pod 都在该存储库中,然后再将其接受为公共域 pod。

发送的数据

首先,我们不想了解任何有关您的应用程序的信息。因此,为了了解唯一目标,我们使用项目的 target UUID 作为标识符。这些是 MAC 地址、Xcode 进程 ID 和目标创建时间的 哈希(但我们只知道 UUID/哈希,因此我们不知道您的 MAC 地址)。这些 UUID 在项目的生命周期中永不更改(与捆绑标识符相反)。我们对其进行双重哈希,以确保超级安全。

  # Grab the project and the type of target
  uuid = target.user_target_uuids.first
  project_target = project.objects_by_uuid[uuid]

  # Send in a digested'd UUID anyway, a second layer
  # of misdirection can't hurt
  {
    :uuid => Digest::SHA256.hexdigest(uuid),
    :type => project_target.product_type,
    :pods => pods
  }

然后,我们还将用于生成此安装的 CocoaPods 版本发送过去。理想情况下,在发布之前,我们还将能够提供有关有多少人对您的库使用 pod try [pod] 的统计信息。

它是如何工作的?

我第一次尝试统计架构是基于 npm 如何进行统计,大致来说,他们将所有日志发送到 S3,在那里每天将其映射缩减为单个包指标。对于一家有全职人员负责正常运行时间和稳定性的 公司 来说,这是一个优雅的解决方案。作为一名希望构建 iOS 应用程序而不是在业余时间维护 更多 基础设施的人,我想避免这种情况。

我们在 Artsy 中使用 Segment,我们的分析团队对他们的 Redshift 基础设施赞不绝口。因此,我联系了他们,让他们为 CocoaPods 托管统计基础设施。他们提供了许多有关数据建模的宝贵建议,我们很快就启动并运行了。因此,您已经了解了 CocoaPods 插件,但从那里它会将您的匿名 Pod 统计信息发送到 stats.cocoapods.org。它充当 管道,将分析事件发送到 Segment。网站上触发了 每日任务,这会针对 Redshift 实例发出 SQL 请求,然后将其导入到 metrics.cocoapods.org

常见问题解答

我作为 CocoaPods 用户可以退出吗?

当然可以。您可以在 shell 中将 环境变量 COCOAPODS_DISABLE_STATS 设置为 true,则不会从您的机器发送统计信息。

这会影响每个 pod 吗?

是的,每个 pod 都将获得下载统计信息。

它会是实时统计信息吗?

不会,它们每天生成一次。

推出策略是什么?

我们计划最初将其作为单独的 CocoaPods 插件,您可以通过 [sudo] gem install cocoapods-stats 可选地进行安装,它将发送数据。在一到两个版本中,我们将此捆绑到 CocoaPods 中,并且它将默认安装给所有向前发展的用户。

我现在可以使用它吗?

当然,更新到最新的 CocoaPods [sudo] gem install cocoapods 或下载最新的 CocoaPods.app

这会如何影响质量指数/排序?

理想情况下,我们可以减少 GitHub 星标对质量指数的影响,并用基于下载/安装的新指标替换一些值。

此命令在哪些命令上运行?

它在 pod installpod update 结束时运行。

我在 Pods 目录中检查,这会如何影响我使用的 Pods 的统计数据?

在 Pods 目录中进行检查意味着很少会影响所用 Pods 的下载计数,但安装将完全相同。它们只在每个项目中注册一次,因此在同一项目上运行 pod install 的多个开发人员不会增加此数字。