Cocopods組件化之podspec文件解析

寫這篇文章的目的,是在項目組件化中,pod文件目錄下的文件夾多級(A>>B>>C)分組遇到的一些問題和解決思路

podSpec的一些屬性

Pod::Spec.new do |s|
  # 項目名
  s.name             = 'SYBaseKit'
  # 版本號
  s.version          = '0.1.9'
  # 簡單描述
  s.summary          = 'SYBaseKit.'
  # 詳細(xì)描述
  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'
  # 項目遵守的協(xié)議
  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

感興趣的同學(xué)可以去cocopods關(guān)于podspec的介紹 看下介紹
我在組件中遇到的問題是 pod完成到本地項目中 只能顯示兩級文件夾
就拿AFNetWorking舉例吧 上圖

Snip20170717_5.png

我查詢了其他關(guān)于組件化的文章,對于pod后的文件夾只顯示兩級關(guān)系,什么意思,就是AFNetwork>>UIKIt,值顯示到這里,而我想要的是AFNetWork>>UIKit>>UIButton,或者AFNetWork>UIKit>UILab這些細(xì)分的文件夾
在這期間也查閱了YYkit框架 也是只有兩級

Snip20170717_6.png

不懂這些框架為什么不分的詳細(xì)一些,也有可能都是在一個分類下吧
我想要的是這種樣式 來來 上圖

Snip20170717_9.png

OK 結(jié)果都展示完了 下面講一下思路
關(guān)于文件顯示 都在podSpec文件里的一個屬性控制
source_files是需要編譯文件的文件目錄,注意是文件目錄而不是工程目錄
subspec相當(dāng)于把項目劃分成幾個子模塊,需要那部分功能,就引入對應(yīng)的組件,比如AFNetworking的podspec 在終端上搜索AFNetWorking 你會發(fā)現(xiàn)分成幾個小模塊,比如你需要檢測網(wǎng)絡(luò)時,就只需要引用AFNetworking/Reachability即可

Snip20170717_10.png

我自己的私有庫是這樣的 多了一級文件(A>>B>>C)

Snip20170717_11.png

下面是關(guān)于subspec的一些寫法



Pod::Spec.new do |s|
  # 項目名
  s.name             = 'SYBaseKit'
  # 版本號
  s.version          = '0.1.9'
  # 簡單描述
  s.summary          = 'SYBaseKit.'
  # 詳細(xì)描述
  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'
  # 項目遵守的協(xié)議
  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時 一定要指定對應(yīng)的source_files
如果source_files定義錯誤就會報錯誤

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

這個是在指定共享的類庫時, 文件路徑不對, 也就是設(shè)置 s.source_files 字段時, 發(fā)生了錯誤, 這里的路徑是相對于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注釋掉
否則是沒有效果的,本人親測。
參考文獻(xiàn)如下
Cocopods Guide
使用Cocoapods創(chuàng)建私有podspec
談?wù)凜ocoaPods組件二進(jìn)制化方案
cocopods進(jìn)階

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容