如何判断(在运行时)库是否使用 cocoapods 链接?

How to tell (at runtime) if a library was linked using cocoapods or not?

我知道这可能是不可能的,但是 cocoapods 是否留下任何足迹可以指出(在运行时)库是否是使用 cocoapods 安装的?

我目前能够通过获取 classes 名称列表然后查找带有 PodsDummy_Pods_ 前缀的 class 来确定是否使用了 CocoaPods。但是我无法知道给定的库是否使用 CocoaPods 进行了链接。

编辑

作为澄清:我可以访问库源代码,但我无法控制最终项目。该库以二进制(静态库)的形式分发,我们想知道用户是否使用 CocoaPods 安装了它。

我想这主要取决于你是否拥有图书馆的控制权。

如果你不这样做,不,不是真的。那些 PodsDummy- 类 存在于目标级别,因此它们仅表示 CocoaPods 已被使用 。但是,它不会告诉您特定库是否使用了 CocoaPods。

对于源代码库,CocoaPods 可以添加额外的构建标志,这些标志可以公开额外的 API 或字符串,您可以用相同的方式查找它们。已经添加了 "COCOAPODS" 构建标志,因此它可以使用它。

对于二进制库,这是可能的,但有点棘手。理论上:您可以向可以在运行时发现的 lib/framework 添加一个符号,然后在可以删除的 Podspec 的 prepare_command 中添加一个符号。我不知道什么命令会这样做,但也许 arstriplipo.

可能的解决方案之一是将所有 Pods 库放入单独的包中。您的项目可能有多个包。结果你可以在运行时 Bundle(for: type(of: self)) in Swift 或者 [NSBundle bundleForClass:[self class]] 在 ObjC

似乎无法自动检测到这个,所以我们解决了这个问题:我们在 Podfile 中添加了一个自定义 resource_bundle,然后我们只是在运行时检查它是否存在,如果它是我们确定该库是使用 CocoaPods 安装的。