Cocopods组件化之podspec文件解析

写这篇文章的目的,是在项目组件化中,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进阶

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 文章目录 简书的目录跳转还在研究中... 什么是CocoaPods?CocoaPods的核心组件 podspec文...
    Mccc_阅读 3,803评论 5 20
  • Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自...
    Nash33阅读 2,078评论 0 50
  • 前言 本篇主要讲解组件化架构思想,从零教你如何组件化一个项目。 如果喜欢我的文章,可以关注我微博:袁峥Seemyg...
    袁峥阅读 21,123评论 41 338
  • iOS的组件化,一直都是一个理念,很多大公司一直在强调却没有具体可行的或简单可行的方案。所以分享下大概思路。 框架...
    蝴蝶之梦天使阅读 5,316评论 14 34
  • 年前调研了关于组件化的一些实施方案,最终确定将项目进行分层和业务拆分成独立工程,为了便于管理,业务组件和业务库采用...
    花椒不麻牙阅读 477评论 0 0