Cocoapods规范中的依赖关系无法正常工作

50

在这个spec文件中,我遇到了一个语法错误:

Pod::Spec.new do |s|

s.name         = "BSImageLoader"

s.version      = "0.1.3"

s.summary      = "The image loading framework for PicPoc"

s.homepage     = "https://bitbucket.org/boolalsofware/bsimageloader"

s.license      = 'MIT'

s.author       = { "Spencer Comerford" => "Spencevail@gmail.com" }

s.source       = { :git => "git@bitbucket.org:boolalsofware/bsimageloader.git", :tag => "0.1.3" }

s.source_files = 'Classes/*.{h,m}', 'Classes/PublicHeaders/*'

s.public_header_files = 'Classes/PublicHeaders/*.h'

s.dependency = 'BSTiledImageView', :git => 'git@bitbucket.org:boolalsofware/bstiledimageview.git'

s.frameworks = 'QuartzCore', 'AssetsLibrary', 'UIKit'

s.requires_arc = true

end

问题出在依赖项指向的 Bitbucket 存储库上。我已经使用本地依赖项让它工作了,但由于某些原因,在 Git 存储库中它却不能正常工作。感谢任何帮助!

2个回答

86

我曾经遇到相同的问题,发现有另一种解决旧方式的方法(感谢@eliperkins)。

假设您有一个名为 Downloader 的主项目,它使用较小的项目 Player,该项目依赖于微型项目 FFMpegPlayer。因此,您想要在 Player.podspec 中添加一个依赖项,看起来像这样:

s.dependency = 'FFMpegPlayer', :git => '...FFMpegPlayer.git' or 
s.dependency = 'FFMpegPlayer', :local => '../FFMpegPlayer'
s.dependency = 'FFMpegPlayer', :path => '../FFMpegPlayer'
s.dependency = 'FFMpegPlayer', :podspec => '../FFMpegPlayer/FFMpegPlayer.podspec'

但所有这些都将无法使用在最新版本的Pods中,原来的:local只是一个副作用,在v0.17.1之前能够起作用。

从现在开始,您可以在Player.podspec中指定干净的依赖项:

s.dependency = 'FFMpegPlayer' (its ok if that spec does not exist in public)
Downloader(主项目)的Podfile中,您只需要在Player pod之前指定FFMpegPlayer即可。
pod 'FFMpegPlayer', :path => '../FFMpegPlayer' (micro project)
pod 'Player', :path => '../Player' (small project which depends on FFMpegPlayer)

所以基本上,你所有的子模块现在都列在主Podfile中,这可以保证不会发生pod版本之间的冲突。


重要的是在本地Pod之前应用:path约束...! - fatuhoku
这个新的Pod规范需要推送到GitHub吗?如果是的话,所有依赖的Pod规范(文件)也会被一起推送到GitHub吗?我问这个问题是因为我不想直接或间接地将任何依赖文件推送到GitHub上。 - Saty
嘿,Roman,你有关于我的问题的任何想法吗?问题链接:http://stackoverflow.com/questions/44047240/podspec-with-dependency-to-another-ios-framework-project - Husein Behboudi Rad
2
感谢您的好回答, 在这种情况下,s.dependency = 'FFMpegPlayer' 真的需要吗? - Mohammad Zaid Pathan
2
对于CocoaPods 1.6.1,请使用s.dependency 'FFMpegPlayer' - Fitsyu
2
那么,如果文件仅通过外部应用程序的Podfile拉取,Pod项目如何构建?难道pod构建目标是独立工作的吗? - Hari Honor

33

podspec领域的dependency指令仅支持依赖项的名称和任何可选的版本要求,不支持:git选项。您可以在Podfile中使用它,或者您可能想除主存储库外还使用自定义私有存储库。


谢谢!这个问题困扰了我很久。我记得以前可以使用 :git,而且我知道我以前在我的 pod specs 中使用 :local。看起来这在 CocoaPods 的最近几个版本中已经改变了。类似的,你知道是否可以在 pod spec 中有一个依赖关系而没有 pod file 吗?或者你可以制作一个没有 .xcodeproj 的 pod file 吗?再次感谢你的帮助! - LunaCodeGirl
现在你不能再在podspec中使用:git,只能在Podfile中使用。虽然以前可以用,但这只是一种实现细节,而不是一个旨在提供的功能。我不确定为什么它不是设计的一部分。我也很喜欢这个功能。至于:local,你可以使用:path来完成以前使用:local的功能。 - Alex Nauda
2
我不认为您可以在podspec中有一个依赖关系,而没有该依赖项具有podspec。(并且它必须在cocoapods知道的规范存储库中。如果由于某种原因您不想将podspec发布到主要规范存储库中,则可以创建私有规范存储库来实现这一点。)我认为您可以制作一个不带Xcode项目的cocoapod。 在podspec中,请确保使用类似s.source_files = '**/*.{h,m}'的内容包含文件。 - Alex Nauda
注意:正确的语法已更改为s.dependency Foo(没有等号)。 - phatmann
7
我不明白为什么它不是podspec文件的一部分……我真的不明白。 - fatuhoku

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