如何创建一个带有嵌套Git子模块的CocoaPod?

37

我正在尝试创建一个带有嵌套 git 子模块的 CocoaPod。我可以创建 pod,但是我无法完全安装它。

当我运行 pod install --verbose 时,我可以看到运行了 git submodule update --init 而不是 git submodule update --init --recursive,这不会拉取嵌套子模块。

CocoaPods 是否支持嵌套子模块,还是不支持?我已经搜索网络以寻找潜在线索,但仍未找到任何信息!

我还应该提到的是,使用 pod lib lint 可以通过 lint,但使用 pod spec lint 无法通过。 pod spec lint 抱怨在嵌套子模块中找不到头文件。我不确定这是否与上述问题有关。

(还要注意,我正在开发的这个特定 Pod 只是一个概念验证。我将创建一个更复杂的 Pod,该 Pod 依赖于 socket.IO-objc。不幸的是,socket.IO-objc 不可用作 Pod,并且依赖于 SocketRocket 作为子模块。)

以下是我的 PodSpec:

Pod::Spec.new do |s|
  s.name             = "DebugTools"
  s.version          = "0.1.0"
  s.summary          = "Awesome tools for debugging iOS apps."
  s.homepage         = "https://github.com/robertcrabtree/DebugTools"
  s.license          = 'MIT'
  s.author           = { "Robert Crabtree" => "me@gmail.com" }
  s.source           = { :git => "https://github.com/robertcrabtree/DebugTools.git", :tag => s.version.to_s, :submodules => true }

  s.platform     = :ios, '7.0'
  s.requires_arc = true

  s.source_files = 'Pod/Classes/**/*', 'Pod/Submodules/LogMaster/LogMaster/*.{h,m}', 'Pod/Submodules/LogMaster/LogMaster/LogCore/*.h'
  s.resource_bundles = {
    'DebugTools' => ['Pod/Assets/*.png']
  }
end

这是我的Podfile:

pod "DebugTools", :git => "https://github.com/robertcrabtree/DebugTools.git", :submodules => true
1个回答

1
我相信CocoaPods的创建正是为了避免使用GIT子模块。以下是一个很棒的解释:https://roadfiresoftware.com/2013/05/a-case-for-switching-to-cocoapods-from-git-submodules/ 假设你的项目依赖于AFNetworking,你将其作为GIT子模块添加到项目中,但某一天,由于某种原因(或者仅仅是因为作者想这么做),AFNetworking从GitHub上消失了,所有的代码都消失了。现在当有人克隆你的项目库时,他们运行git submodule update --init,但是它却失败了。所以现在他们无法构建该项目,而且你也要小心,因为如果你失去了AFNetworking源代码,你也无法构建项目...
现在我们使用CocoaPods,我们将每个依赖项的源代码推送到我们的中央库。现在当有人git克隆库时,他们获得了所有所需的代码,他们可以很好地构建项目。他们甚至不需要CocoaPods来构建应用程序——它只是工作。
所以,让CocoaPods来完成它的工作。 CocoaPods管理Xcode项目的依赖关系。(c) https://github.com/CocoaPods/CocoaPods

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接