【问题标题】:Cocoapods install pod with subspec did not workCocoapods 使用 subspec 安装 pod 不起作用
【发布时间】:2014-06-09 19:39:24
【问题描述】:

您好,我正在为我的私有库创建 podspec,效果很好,但是当我创建带有子规范的 podspec 时,使用 $ pod spec lint [podname].podspec 将成功

但是当我添加这个 pod 并说 $ pod install 时

我总是得到这个错误:

错误

ArgumentError - Malformed version number string Loader
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-0.32.1/lib/cocoapods-core/vendor/version.rb:191:in `initialize'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-0.32.1/lib/cocoapods-core/version.rb:60:in `initialize'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-0.32.1/lib/cocoapods-core/source/file_system_data_provider.rb:61:in `new'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-0.32.1/lib/cocoapods-core/source/file_system_data_provider.rb:61:in `block in versions'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-0.32.1/lib/cocoapods-core/source/file_system_data_provider.rb:59:in `map'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-0.32.1/lib/cocoapods-core/source/file_system_data_provider.rb:59:in `versions'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-0.32.1/lib/cocoapods-core/source.rb:90:in `versions'

我的 podspec 看起来像这样:

sp.dependency 'Globals','~> 0.0.1' 和 sp.dependency 'Extensions','~> 0.0.1' 是私有 pod,它们可以正常工作。

Pod::Spec.new do |s|
  s.name         = "Networking"
  s.version      = "0.0.2"
  s.summary      = "Networking for Handling Network"

  s.description  = "Networking handling Network and blabla"
  s.homepage     = "http://www.myhp.at"

  # ―――  Spec License  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  s.license = { :type => 'MIT', :text => <<-LICENSE
                   Copyright 2014 blabla
                 LICENSE
               }

  # ――― Author Metadata  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  s.author             = { "MyName" => "me@me.at" }

  # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  s.platform     = :ios, "5.0"

  # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  s.source       = { :git => "https://myurl/myrepo.git", :tag => "0.0.2" }

  # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  # s.source_files  = "Networking/"
  # s.exclude_files = "Classes/Exclude"
  # s.public_header_files = "Classes/**/*.h"

  s.subspec 'Loader' do |sp|
        sp.source_files = 'Networking/Loader' 
        sp.dependency 'ASIHTTPRequest', '~> 1.8'
        sp.dependency 'Globals','~> 0.0.1'
        sp.dependency 'Extensions','~> 0.0.1'
  end

  s.subspec 'L1DataFeed' do |sp|
        sp.source_files = 'Networking/DataFeed'     
        sp.frameworks   = 'CoreData'
        sp.dependency 'ASIHTTPRequest', '~> 1.8'
        sp.dependency 'Globals','~> 0.0.1'
        sp.dependency 'Extensions','~> 0.0.1'
  end

  s.subspec 'L1NetworkManager' do |sp|
        sp.source_files = 'Networking/NetworkManager'       
        sp.dependency 'Networking/DataFeed'
        sp.dependency 'ASIHTTPRequest', '~> 1.8'
        sp.dependency 'Globals','~> 0.0.1'
        sp.dependency 'Extensions','~> 0.0.1' 
  end

  # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  # s.resource  = "icon.png"
  # s.resources = "Resources/*.png"

  # s.preserve_paths = "FilesToSave", "MoreFilesToSave"

  # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  # s.framework  = "SomeFramework"
  # s.frameworks = "SomeFramework", "AnotherFramework"

  # s.library   = "iconv"
  # s.libraries = "iconv", "xml2"

  # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

  s.requires_arc = true

  # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
  #s.dependency 'ASIHTTPRequest', '~> 1.8', '>= 1.8.2'
  #s.dependency 'Globals','~> 0.0.1'
  #s.dependency 'Extensions','~> 0.0.1'

end

文件夹结构如下所示:

根:

  • 网络
  • --> 加载器
  • --> 数据源
  • --> 网络管理器

那么有人可以帮我解决这个问题吗?

我尝试制作另一个具有相同问题的子规范的 podspec。

【问题讨论】:

  • 您可以发布您在 podspec 中使用的文件夹结构吗?
  • 您好,文件夹结构看起来如此 ../Networking/Loader 和 ../Networking/DataFeed 和 ../Networking/NetworkManager

标签: objective-c ruby-on-rails xcode dependency-management cocoapods


【解决方案1】:

异常回溯似乎表明从磁盘读取规范时会发生这种情况。会不会是您在规范目录中有一个 Loader 目录,该目录通常应该包含一个版本目录?

例如此包含版本目录:

$ ls -l ~/.cocoapods/repos/master/AFNetworking/ drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.0.0 drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.0.0-RC1 drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.0.0-RC2 drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.0.0-RC3 drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.0.1 drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.0.2 drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.0.3 drwxr-xr-x 3 eloy staff 102 Feb 2 14:14 2.1.0 drwxr-xr-x 3 eloy staff 102 Mar 3 17:42 2.2.0 drwxr-xr-x 3 eloy staff 102 Mar 15 13:05 2.2.1 drwxr-xr-x 3 eloy staff 102 Apr 16 13:33 2.2.2

【讨论】:

  • 是的,我在 Networking 文件夹中有子文件夹 Loader、DataFeed 和 NetworkManager。这不好吗?我必须为 Loader 创建自己的规范吗?
  • 不不,我在问你是否在你的 podspec 存储库的版本目录中有一个加载器,不是你的代码存储库。您能否扩展您的问题以准确显示您如何在 Podfile 中包含 podspec?
  • 我已使用 $ pod repo add lib Networking.podspec 将此 podspec 添加到我的私人仓库中。然后我用 pod 'L1Networking','~> 0.0.2' 将它包含在我的 pod 文件中
  • 所以当我删除 Networking 文件夹中的所有子文件夹时,它会正常工作。有没有办法用子文件夹处理这个问题?像 ASIHTTPRequest.podspec github.com/pokeb/asi-http-request/tree/master/Classes 有子文件夹 S3, ...
  • 这就是问题所在,规范存储库应该只包含 pod 规范,正如我在上面的 AFNetworking 示例中展示的那样。它应该包含您的库存储库。有关更多信息,请参阅私有规范回购指南:guides.cocoapods.org/making/private-cocoapods.html
猜你喜欢
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多