【问题标题】:Cocoapods dependency in pod spec not workingpod规范中的Cocoapods依赖项不起作用
【发布时间】:2013-05-30 02:21:19
【问题描述】:

我收到此规范文件的语法错误:

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 repo。感谢您的帮助!

【问题讨论】:

    标签: ios xcode cocoapods


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这简直要了我的命。我觉得你曾经能够使用 :git 并且我知道我曾经在我的 pod 规范中使用 :local 。似乎这在最近几个版本的 CocoaPods 中发生了变化。类似地,您知道是否可以在没有 pod 文件的情况下在 pod 规范中有依赖项?或者你可以制作一个没有 .xcodeproj 的 pod 文件吗?再次感谢您的帮助!
    • 你不能再在 podspec 中使用 :git 了,只能在 Podfile 中使用。它曾经可以工作,但它是一个实现细节,而不是预期的功能。我不确定为什么它不是设计的一部分。我也喜欢这个功能。至于 :local,你可以用 :path 做你以前用 :local 做的事情。
    • 我认为如果没有 podspec 的依赖关系,你就不能在 podspec 中有依赖关系。 (并且它必须在 cocoapods 知道的规范存储库中。如果由于某种原因您不想在主 Specs 存储库中发布 podspec,您可以create a private spec repo 来实现这一点。)我认为您可以制作一个没有 Xcode 项目的 cocoapod。在 podspec 中,确保包含 s.source_files = '**/*.{h,m}' 之类的文件
    • 请注意,正确的语法已更改为s.dependency Foo(无等号)。
    • ...我不明白为什么它不是 podspec 文件的一部分...我真的不知道。
    【解决方案2】:

    我遇到了同样的问题,发现有another way to solve this problem in old manner(感谢@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 中,您只需指定FFMpegPlayer 之前 Player pod:

    pod 'FFMpegPlayer', :path => '../FFMpegPlayer' (micro project)
    pod 'Player', :path => '../Player' (small project which depends on FFMpegPlayer)
    

    因此,基本上,您的所有子 Pod 现在都列在主 Podfile 中,这保证了 Pod 版本之间没有冲突。

    【讨论】:

    • 在本地 pod 之前应用 :path 约束是关键...!
    • 这个新的 pod 规范是否必须推送到 github 上?如果是,那么所有依赖项 pod spec(files) 也会被推送到 github 吗?我问这个是因为我不想直接或间接地将我的任何依赖文件推送到 github?
    • 感谢您的精彩回答,在这种情况下真的需要s.dependency = 'FFMpegPlayer' 吗?
    • 对于 cocoapod 1.6.1 使用 s.dependecny 'FFMpegPlayer
    • 如果文件仅通过外部应用程序的 podfile 拉取,那么 Pod 项目如何能够构建? pod build 目标不是独立工作的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多