什么:submodules => CocoaPod Podspec中的真实含义?

时间:2014-02-14 21:11:11

标签: ios ruby cocoapods

TL; DR:

如果您将CocoaPods:submodules的一部分)设置为spec.sourcetrue会做什么?

完整版:

我以前的项目结构看起来像

Project
Linked To --> Core static library (submodule added as a subproject)
            --> Linked To --> several dependent submodules (files added within subproject)

我现在正在转换到CocoaPods进行依赖关系管理。

我的新(过渡)结构看起来像

Project
--> Depends on Core CocoaPod and few other CocoaPods
     --> Core depends on several open-source libraries
     --> Core also depends on a few submodules (in process of converting these)

我已经看到其他项目(例如AFNetworking)指定了他们的source

s.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => "2.1.0", :submodules => true }

如果您将CocoaPods作为:submodules传递,则true会做什么?这是这个用例的正确设置吗?

我似乎无法在CocoaPods.org的任何地方找到此文档。

2 个答案:

答案 0 :(得分:1)

这与具有子模块(See Git Submodules for more information on them)的git存储库有关。通常,当您克隆git存储库时,您需要执行以下操作:

git submodule init 
git submodule update

下拉git存储库所依赖的子模块(例如,如果git库有另一个git库的引用,它可以将它添加为子模块,而不是将文件添加到自己的版本中 - 这意味着子模块可以更新和git库可以自动访问最新版本

我不确切知道cocoapods作为git clone进程的一部分做了什么,但我想它会在克隆存储库后运行这两个命令,以确保所有子模块的依赖性都是有效的。

FYI这个命令可以实现并更新所有子模块和它们所依赖的任何子模块 - 所以它可能是cocoapods使用的

git submodule update --init --recursive

此更改在0.12.0中引入:(请参阅changelog

希望它有所帮助!

答案 1 :(得分:0)

这意味着pod包含git子模块,但是如果您通过Podfile中的git url使用pod,则它无效。在这种情况下,您再次需要在Podfile中指定:submodules => true

如果AFNetworking指定了这个参数,但实际上没有git子模块,那么它只是一个错误。

如果您依赖其他pod,请改用依赖项参数。