美文网首页iOSiOS点点滴滴iOS Developer
Cocopods组件化之podspec文件解析

Cocopods组件化之podspec文件解析

作者: 骨古 | 来源:发表于2017-07-17 20:16 被阅读485次

写这篇文章的目的,是在项目组件化中,pod文件目录下的文件夹多级(A>>B>>C)分组遇到的一些问题和解决思路

podSpec的一些属性

Pod::Spec.new do |s|
  # 项目名
  s.name             = 'SYBaseKit'
  # 版本号
  s.version          = '0.1.9'
  # 简单描述
  s.summary          = 'SYBaseKit.'
  # 详细描述
  s.description      = <<-DESC
SYBaseKit框架
                       DESC
# 项目的主页
  s.homepage         = 'http://git.oschina.net/qq2350199075/SYBaseKit'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  # 项目遵守的协议
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  # 作者的邮箱
  s.author           = { 'jixiedaheng@163.com' => '2350199075@qq.com' }
# git仓库的https地址
  s.source           = { :git => 'https://git.oschina.net/qq2350199075/SYBaseKit.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
# 项目的最低版本支持
  s.ios.deployment_target = '8.0'
# 表示源文件的路径,这个路径是相对podspec文件而言的。(这属性下面单独讨论)
  s.source_files = 'SYBaseKit/Classes/**/*'


#c.source_files = 'SYBaseKit/Classes/**/*'


  # s.resource_bundles = {
  #   'SYBaseKit' => ['SYBaseKit/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
   # s.dependency 'AFNetworking', '~> 3.1.0'
end

感兴趣的同学可以去cocopods关于podspec的介绍 看下介绍
我在组件中遇到的问题是 pod完成到本地项目中 只能显示两级文件夹
就拿AFNetWorking举例吧 上图

Snip20170717_5.png

我查询了其他关于组件化的文章,对于pod后的文件夹只显示两级关系,什么意思,就是AFNetwork>>UIKIt,值显示到这里,而我想要的是AFNetWork>>UIKit>>UIButton,或者AFNetWork>UIKit>UILab这些细分的文件夹
在这期间也查阅了YYkit框架 也是只有两级

Snip20170717_6.png

不懂这些框架为什么不分的详细一些,也有可能都是在一个分类下吧
我想要的是这种样式 来来 上图

Snip20170717_9.png

OK 结果都展示完了 下面讲一下思路
关于文件显示 都在podSpec文件里的一个属性控制
source_files是需要编译文件的文件目录,注意是文件目录而不是工程目录
subspec相当于把项目划分成几个子模块,需要那部分功能,就引入对应的组件,比如AFNetworking的podspec 在终端上搜索AFNetWorking 你会发现分成几个小模块,比如你需要检测网络时,就只需要引用AFNetworking/Reachability即可

Snip20170717_10.png

我自己的私有库是这样的 多了一级文件(A>>B>>C)

Snip20170717_11.png

下面是关于subspec的一些写法



Pod::Spec.new do |s|
  # 项目名
  s.name             = 'SYBaseKit'
  # 版本号
  s.version          = '0.1.9'
  # 简单描述
  s.summary          = 'SYBaseKit.'
  # 详细描述
  s.description      = <<-DESC
SYBaseKit框架
                       DESC
# 项目的主页
  s.homepage         = 'http://git.oschina.net/qq2350199075/SYBaseKit'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  # 项目遵守的协议
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  # 作者的邮箱
  s.author           = { 'jixiedaheng@163.com' => '2350199075@qq.com' }
# git仓库的https地址
  s.source           = { :git => 'https://git.oschina.net/qq2350199075/SYBaseKit.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
# 项目的最低版本支持
  s.ios.deployment_target = '8.0'
# 表示源文件的路径,这个路径是相对podspec文件而言的。(这属性下面单独讨论)
  # s.source_files = 'SYBaseKit/Classes/**/*'
  
        #第三层文件夹
       c.subspec 'NSDictionary' do |nsd|
      nsd.source_files = 'SYBaseKit/Classes/Category/NSDictionary/**/*'
      end

      c.subspec 'NSObject' do |nso|
      nso.source_files = 'SYBaseKit/Classes/Category/NSObject/**/*'
      end

      c.subspec 'NSString' do |nss|
      nss.source_files = 'SYBaseKit/Classes/Category/NSString/**/*'
      end

      c.subspec 'UIView' do |uiv|
      uiv.source_files = 'SYBaseKit/Classes/Category/UIView/**/*'
      end

 end


    s.subspec 'Tool' do |t|
        # t.source_files = 'SYBaseKit/Classes/Tool/**/*'
      
      t.subspec 'Define' do |defi|
        defi.source_files = 'SYBaseKit/SYBaseKit/Classes/Tool/Define/**/*'
        end

      t.subspec 'NetWork' do |net|
        net.source_files = 'SYBaseKit/SYBaseKit/Classes/Tool/NetWork/**/*'
        end
    end


#c.source_files = 'SYBaseKit/Classes/**/*'


  # s.resource_bundles = {
  #   'SYBaseKit' => ['SYBaseKit/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
   # s.dependency 'AFNetworking', '~> 3.1.0'
end

下面是重要的
下面是重要的
下面是重要的
在描述subspec时 一定要指定对应的source_files
如果source_files定义错误就会报错误

 file patterns: The `source_files` pattern did not match any file.

这个是在指定共享的类库时, 文件路径不对, 也就是设置 s.source_files 字段时, 发生了错误, 这里的路径是相对于SYBaseKit.podspec文件的, 如果是与SYBaseKit.podspec同级的文件夹, 直接写文件夹名称即可

Snip20170717_13.png

在定义subspec

 s.subspec 'Tool' do |t|
    t.source_files = 'SYBaseKit/Classes/Tool/**/*'
 end

如果Tool文件下还有一个子目录,比如Tool>>NetWork
那么需要这样定义

 s.subspec 'Tool' do |t|
        # t.source_files = 'SYBaseKit/Classes/Tool/**/*' 
#子文件夹的写法(一定要把父文件夹的source_files给注释掉)
   t.subspec 'Define' do |defi|
          defi.source_files = 'SYBaseKit/SYBaseKit/Classes/Tool/Define/**/*'
    end

 end

一定要把父文件的source_files注释掉
一定要把父文件的source_files注释掉
一定要把父文件的source_files注释掉
否则是没有效果的,本人亲测。
参考文献如下
Cocopods Guide
使用Cocoapods创建私有podspec
谈谈CocoaPods组件二进制化方案
cocopods进阶

相关文章

  • Cocopods组件化之podspec文件解析

    写这篇文章的目的,是在项目组件化中,pod文件目录下的文件夹多级(A>>B>>C)分组遇到的一些问题和解决思路 p...

  • 组件化之podspec文件

    如何创建podspec 创建podspec文件只需要一行命令,在你自己的三方库的根目录下输入下面的命令: pods...

  • 组件化博客

    iOS组件化组件化-动态库实战Cocoapods整理(三)——编写podspec文件CocoaPods制作第三方代...

  • iOS-热更新/组件化/跨平台开发

    一、组件化 组件化步骤 1.每创建一个组件都会带有一个xxx.podspec的索引文件。专门用来存放这些索引文件的...

  • iOS XXX not found 错误

    1.若是使用模块化,查看组件 xxx.podspec 文件是否添加依赖 s.dependency 'XXXXKit'

  • 2021-02-01

    cocopods使用的记录 方便查看 几年前进行过组件化,使用cocopods管理,但是几年后又开始组件化一个项目...

  • podspec文件解析

    //可选属性 s.source_files 文件层次 后续步骤 关于Podfile文件编辑时,第三方库版本号的各种...

  • 用pods管理组件(本地私有库)

    本地私有库 1. 对组件进行git管理 2. 添加podspec文件 添加之后打开podspec文件,把s.sou...

  • iOS自建Specs组件仓库

    tips: 最近在搞组件化,记录一下常用命令。 新建项目(或者新建Podspec文件): pod lib crea...

  • 组件化遇到的问题Your configuration speci

    组件化向Spec Repo提交podspec时:报错: Your configuration specifies ...

网友评论

  • 呵呵哈哈嘿嘿:你好,组件依赖多个三方库,spec文件内的dependency该怎么写?
    小千:@呵呵哈哈嘿嘿 我也是私有库的引用啊,你是不是在Podfile 头部没有配置多私有库的source?!
    呵呵哈哈嘿嘿:@小千 我引用的是自己写的库,且自己的库在SVN上放着,改怎么写,直接写会报一个
    Unable to find a specification for `xxxx` depended upon by `xxxxx`的错
    小千:多写几个dependency啊,如
    s.dependency 'xxx', '~> 1.0.0'
    s.dependency 'yyy', '~> 1.0.0'
  • 呵呵哈哈嘿嘿:subspec 之间如何设置依赖?
    呵呵哈哈嘿嘿:@骨古 多谢:smiley:
    骨古:@呵呵哈哈嘿嘿 直接依赖就可以了 这是我的一个私有库依赖另一个私有库 实例代码
    c.subspec 'NSObject' do |nso|
    nso.source_files = 'SYBaseKit/Classes/Category/NSObject/**/*'
    nso.dependency 'SYBaseKit/Category/NSString'
    end
  • d9557f883fd8:能把你的podspec发我一份看看么。。。我这一直报文件找不到。。然后看到找不到的路径是
    s.name/s.subspec 实在找不到是为啥会有这个路径
    d9557f883fd8:@骨古 我仔细看了你的podspec和我的写法是一样的。。。我现在报的文件找不到是s.name/subspec/subspec 这个路径。。但是我看你的文件里也是s.name/subspec/subspec的路径下肯定是没文件吧。。因为你还有一个classes文件夹的。。。。不知道是我工程的问题还是啥
    骨古:@zhnnnnn 已发 你可以把你的podspec文件 放出来 应该是路径的问题
    d9557f883fd8:如果可以的话发我邮箱里475816908@qq.com

本文标题:Cocopods组件化之podspec文件解析

本文链接:https://www.haomeiwen.com/subject/safqkxtx.html