Cocopods組件化之podspec文件解析

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

podSpec的一些屬性

Pod::Spec.new do |s|
  # 項(xiàng)目名
  s.name             = 'SYBaseKit'
  # 版本號(hào)
  s.version          = '0.1.9'
  # 簡單描述
  s.summary          = 'SYBaseKit.'
  # 詳細(xì)描述
  s.description      = <<-DESC
SYBaseKit框架
                       DESC
# 項(xiàng)目的主頁
  s.homepage         = 'http://git.oschina.net/qq2350199075/SYBaseKit'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  # 項(xiàng)目遵守的協(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>'
# 項(xiàng)目的最低版本支持
  s.ios.deployment_target = '8.0'
# 表示源文件的路徑,這個(gè)路徑是相對(duì)podspec文件而言的。(這屬性下面單獨(dú)討論)
  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完成到本地項(xiàng)目中 只能顯示兩級(jí)文件夾
就拿AFNetWorking舉例吧 上圖

Snip20170717_5.png

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

Snip20170717_6.png

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

Snip20170717_9.png

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

Snip20170717_10.png

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

Snip20170717_11.png

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



Pod::Spec.new do |s|
  # 項(xiàng)目名
  s.name             = 'SYBaseKit'
  # 版本號(hào)
  s.version          = '0.1.9'
  # 簡單描述
  s.summary          = 'SYBaseKit.'
  # 詳細(xì)描述
  s.description      = <<-DESC
SYBaseKit框架
                       DESC
# 項(xiàng)目的主頁
  s.homepage         = 'http://git.oschina.net/qq2350199075/SYBaseKit'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  # 項(xiàng)目遵守的協(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>'
# 項(xiàng)目的最低版本支持
  s.ios.deployment_target = '8.0'
# 表示源文件的路徑,這個(gè)路徑是相對(duì)podspec文件而言的。(這屬性下面單獨(dú)討論)
  # 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時(shí) 一定要指定對(duì)應(yīng)的source_files
如果source_files定義錯(cuò)誤就會(huì)報(bào)錯(cuò)誤

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

這個(gè)是在指定共享的類庫時(shí), 文件路徑不對(duì), 也就是設(shè)置 s.source_files 字段時(shí), 發(fā)生了錯(cuò)誤, 這里的路徑是相對(duì)于SYBaseKit.podspec文件的, 如果是與SYBaseKit.podspec同級(jí)的文件夾, 直接寫文件夾名稱即可

Snip20170717_13.png

在定義subspec

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

如果Tool文件下還有一個(gè)子目錄,比如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注釋掉
否則是沒有效果的,本人親測(cè)。
參考文獻(xiàn)如下
Cocopods Guide
使用Cocoapods創(chuàng)建私有podspec
談?wù)凜ocoaPods組件二進(jìn)制化方案
cocopods進(jìn)階

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章目錄 簡書的目錄跳轉(zhuǎn)還在研究中... 什么是CocoaPods?CocoaPods的核心組件 podspec文...
    Mccc_閱讀 4,199評(píng)論 5 21
  • Cocoapods是非常好用的一個(gè)iOS依賴管理工具,使用它可以方便的管理和更新項(xiàng)目中所使用到的第三方庫,以及將自...
    Nash33閱讀 2,182評(píng)論 0 50
  • 前言 本篇主要講解組件化架構(gòu)思想,從零教你如何組件化一個(gè)項(xiàng)目。 如果喜歡我的文章,可以關(guān)注我微博:袁崢Seemyg...
    袁崢閱讀 21,436評(píng)論 41 339
  • iOS的組件化,一直都是一個(gè)理念,很多大公司一直在強(qiáng)調(diào)卻沒有具體可行的或簡單可行的方案。所以分享下大概思路。 框架...
    蝴蝶之夢(mèng)天使閱讀 5,464評(píng)論 14 34
  • 年前調(diào)研了關(guān)于組件化的一些實(shí)施方案,最終確定將項(xiàng)目進(jìn)行分層和業(yè)務(wù)拆分成獨(dú)立工程,為了便于管理,業(yè)務(wù)組件和業(yè)務(wù)庫采用...
    花椒不麻牙閱讀 547評(píng)論 0 0

友情鏈接更多精彩內(nèi)容