是否可以排除 Cocoapods 中的依赖关系?

Posted

技术标签:

【中文标题】是否可以排除 Cocoapods 中的依赖关系?【英文标题】:Is it possible to exclude dependency in Cocoapods? 【发布时间】:2016-11-17 15:47:42 【问题描述】:

Firebase/Messaging 依赖于:

Using Firebase
Using FirebaseAnalytics
Using FirebaseCore
Using FirebaseInstanceID
Using FirebaseMessaging
Using GoogleInterchangeUtilities
Using GoogleSymbolUtilities
Using GoogleToolboxForMac

我想知道是否可以排除GoogleToolboxForMac?问题是我有一个静态库,它已经使用GoogleToolboxForMac 没有 cocoapods。

所以只想知道有没有可能?

【问题讨论】:

【参考方案1】:

排除依赖项的更好解决方案是在原始文件的顶部使用像这样构建的本地 pod 规范文件。

pod 'Firebase/Messaging', :podspec => 'FirebaseMessaging.podspec.json'

:: 例如用法 :: 1) 访问 >https://cocoapods.org/pods/FirebaseMessaging

2) 点击“查看 Podspec”(您将被重定向到 github 上的现有规范)

3) 点击“Raw”,然后点击“Save File As”下载此文件。

4) 将此文件放在与 xcode 项目的 podfile 相同的目录中

5) 编辑此文件并删除您不感兴趣的依赖项。

6) 仅此而已。执行与您更相关的 pod install 或 pod update 并且不再安装依赖项。

注意:如果 FirebaseMessaging pod 将来更新,您必须自己保持本地 pod 文件同步。

【讨论】:

当我尝试这样做时,我收到此错误“与外部源的依赖关系可能未指定版本要求”。因此,请确保删除您可能指定的任何版本,它应该可以工作。 你成就了我的一天。谢谢【参考方案2】:

Pod 的依赖关系在其 podspec 文件中定义。

理论上:您可以 fork/clone pod 的 repo,编辑 podspec 以删除依赖项,并将新的 git repo/fork 添加为 Podfile 中的源。不过,之后您必须编辑 pods 项目目标的搜索路径,以便它可以找到它需要构建的库,并且您已将其删除。预计会出现更多问题,因为该库位于您的主项目中,而 pods 项目是一个单独的项目。我肯定不会为您的情况推荐这个,只是理论上说。更新也会带来更多开销。

此外,据我所知,Firebase/Messaging 存储库不是公开的(对此不确定),这甚至会使这个选项变得不可能。

【讨论】:

是的,它不是公共回购,所以有什么解决方法吗?我以不同的格式提出问题here,所以如果您有任何建议,我想听听【参考方案3】:

假设您的 GoogleToolboxForMac 版本是最新的,足以满足 Firebase/Messaging 的要求,您可以执行以下操作:

查找每个构建方案的 xcconfig 文件:find 。 | grep xcconfig 编辑它们并删除以下三个字符串: “$PODS_CONFIGURATION_BUILD_DIR/GoogleToolboxForMac” -iquote "$PODS_CONFIGURATION_BUILD_DIR/GoogleToolboxForMac/GoogleToolboxForMac.framework/Headers" -框架“GoogleToolboxForMac”

每当您 更新 pod

时,您都可能需要重做

但是,正如@Valentin 所说,不建议这样做。从现有静态库中删除 GoogleToolboxForMac 构建并依赖 Cocoapod 来满足所有 GoogleToolboxForMac 依赖项可能会更好。

【讨论】:

谢谢,但如果我无权更改我正在使用的那些静态库,是否有解决方案? 这就是我回答的第一部分。

以上是关于是否可以排除 Cocoapods 中的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

项目和子项目的 Cocoapods

Cocoapods 停留在“分析依赖关系”上

Maven中的可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

Maven传递依懒

使用 Cocoapods 管理多个目标的依赖关系

Xcode:了解 CocoaPods 的依赖关系