寫這篇文章的目的匙头,是在項(xiàng)目組件化中赘风,pod文件目錄下的文件夾多級(A>>B>>C)分組遇到的一些問題和解決思路
podSpec的一些屬性
Pod::Spec.new do |s|
# 項(xiàng)目名
s.name = 'SYBaseKit'
# 版本號
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è)路徑是相對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)目中 只能顯示兩級文件夾
就拿AFNetWorking舉例吧 上圖
我查詢了其他關(guān)于組件化的文章,對于pod后的文件夾只顯示兩級關(guān)系,什么意思造成,就是AFNetwork>>UIKIt,值顯示到這里,而我想要的是AFNetWork>>UIKit>>UIButton,或者AFNetWork>UIKit>UILab這些細(xì)分的文件夾
在這期間也查閱了YYkit框架 也是只有兩級
不懂這些框架為什么不分的詳細(xì)一些雄嚣,也有可能都是在一個(gè)分類下吧
我想要的是這種樣式 來來 上圖
OK 結(jié)果都展示完了 下面講一下思路
關(guān)于文件顯示 都在podSpec文件里的一個(gè)屬性控制
source_files是需要編譯文件的文件目錄晒屎,注意是文件目錄而不是工程目錄
subspec相當(dāng)于把項(xiàng)目劃分成幾個(gè)子模塊,需要那部分功能缓升,就引入對應(yīng)的組件鼓鲁,比如AFNetworking的podspec 在終端上搜索AFNetWorking 你會發(fā)現(xiàn)分成幾個(gè)小模塊,比如你需要檢測網(wǎng)絡(luò)時(shí)港谊,就只需要引用AFNetworking/Reachability即可
我自己的私有庫是這樣的 多了一級文件(A>>B>>C)
下面是關(guān)于subspec的一些寫法
Pod::Spec.new do |s|
# 項(xiàng)目名
s.name = 'SYBaseKit'
# 版本號
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è)路徑是相對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í) 一定要指定對應(yīng)的source_files
如果source_files定義錯(cuò)誤就會報(bào)錯(cuò)誤
file patterns: The `source_files` pattern did not match any file.
這個(gè)是在指定共享的類庫時(shí), 文件路徑不對, 也就是設(shè)置 s.source_files 字段時(shí), 發(fā)生了錯(cuò)誤, 這里的路徑是相對于SYBaseKit.podspec文件的, 如果是與SYBaseKit.podspec同級的文件夾, 直接寫文件夾名稱即可
在定義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注釋掉
否則是沒有效果的绵跷,本人親測。
參考文獻(xiàn)如下
Cocopods Guide
使用Cocoapods創(chuàng)建私有podspec
談?wù)凜ocoaPods組件二進(jìn)制化方案
cocopods進(jìn)階