
注意事項(xiàng):本文針對的是已經(jīng)對pods私有庫的流程有所了解或想了解這塊內(nèi)容的人群
有想了解pods私有庫搭建相關(guān)的,可以點(diǎn)擊下面鏈接
pods私有庫搭建
一、文件顯示層級
cocoaPods創(chuàng)建私有庫的時候,如果私有庫中的文件很多,想做到和項(xiàng)目中的文件夾分層,就需要在podSpec文件里面用到s.subspec 'xxx' do |ss|語句來配置。
先看一個文件層級

如圖所示,現(xiàn)在我們要把 Login這個文件夾搭建私有庫。
我們一般在用pod lib create Login創(chuàng)建完項(xiàng)目后,會生成相應(yīng)的目錄,只要把需要做成私有庫的文件夾代碼文件放到 classes里面就可以了。
首先先不考慮文件分層的寫法,這樣podspec文件里面是這樣的

在圖中可以看出,就是普通的寫法,按照圖中這么寫的話,會導(dǎo)致私有庫搭建完成并pod導(dǎo)入后,所有的.h .m .xib .png等文件都在一個文件夾里面,并沒有我們本地那樣的文件夾Api、View等文件夾了。
這樣的pod私有庫雖然在正常的使用中并沒有任何問題,但是看起來很亂,這個時候我們就需要進(jìn)行文件分層了。把UIView類都放在View里面,把Model類都放在Model里面。這里我們基于沒有文件分層的基礎(chǔ)上進(jìn)行修改,需要使用到下面的語句
s.subspec 'View' do |ss|
ss.source_files = ''
end
下面我們參照圖一給出的文件層級寫相關(guān)的 subspec
在classes文件夾下面,只有文件夾,并沒有其他的.h .m等文件,這個時候,podspec文件里面的source_files就可以不用寫了。
首先 classes下面有Api、Targets、View、ViewController、ViewModel文件夾,要實(shí)現(xiàn)搭建的私有庫顯示這樣的文件夾層級,就需要分別將這個五個文件夾全部寫錯 subspec的形式。
- Api文件夾
s.subspec 'Api' do |ss|
ss.source_files = 'Login/Classes/Api/*.{h,m}'
end
- ViewModel 文件夾
ViewModel里面的.m文件會引用到Api里面文件的頭文件,所以要寫在Api下面,并且要添加依賴
s.subspec 'ViewModel' do |ss|
ss.source_files = 'Login/Classes/ViewModel/*.{h,m}'
ss.dependency 'Login/Api'
end
- View文件夾
View文件夾中的文件會引用到Api和ViewModel里面文件的頭文件,所以要寫在它們的subspec下面并添加依賴
s.subspec 'View' do |ss|
ss.source_files = 'Login/Classes/View/*.{h,m}'
ss.dependency 'Login/Api'
ss.dependency 'Login/ViewModel'
end
- ViewController文件夾
ViewController下的文件會引用到View里面文件的頭文件,所以寫在View的subspec下面并添加依賴
s.subspec 'ViewController' do |ss|
ss.source_files = 'Login/Classes/ViewController/*.{h,m}'
ss.dependency 'Login/View'
end
- Targets文件夾
Targets下的文件會引用到ViewController里面文件的頭文件,所以寫在ViewController的subspec下面并添加依賴
s.subspec 'Targets' do |ss|
ss.source_files = 'Login/Classes/Targets/*.{h,m}'
ss.dependency 'Login/ViewController'
end
這里需要注意的幾個問題:
一個就是如果有
A subspec需要使用到其他的B subspec,就需要在A subspec下面添加對B subspec的依賴,這個依賴是針對subspec的,不需要寫本地文件路勁。依賴其他第三方公開pod庫的話,可以寫在使用到的
subspec里面,也可以寫在總的依賴?yán)铩?/p>如果
A subspec里面有使用到B subspec下的文件,B subspec又引用到A subspec下的文件,這樣的話,分層實(shí)現(xiàn)起來比較困難,解決的思路可以在classes下面創(chuàng)建一個.h的頭文件,引用各個頭文件,并設(shè)置s.souce_files = 'Login/Classes/Login.h'
二、資源文件使用
pods私有庫有時候會用到圖片資源或者其他資源,這些資源應(yīng)該怎么配置和獲取使用呢?
在我們使用pod lib creat Login的時候,會在Classes同級目錄下面生成一個Assets的文件夾,這個文件夾就是用來放資源文件的,如圖:

將資源文件放到這個里面的時候,接下來要去設(shè)置Login.podspec文件,主要就是將原先下面這段注釋的代碼接觸注釋就好了:
s.resource_bundles = {
'Login' => ['Login/Assets/*.png']
}
接下來怎么使用呢?
因?yàn)?code>s.resource_bundles生成的資源文件,會生成一個bundle文件,使用的時候就是要先獲取到這個bundle,然后獲取到里面的資源。
- 獲取bundle
calssType是指當(dāng)前使用圖片的控件所在的類
+ (instancetype)mineBundle:(id)classType{
static NSBundle *mine = nil;
if (mine == nil) {
classType = [classType isKindOfClass:NSString.class] ? NSClassFromString(classType) : classType;
NSString * path = [[NSBundle bundleForClass:classType] pathForResource:@"Mine" ofType:@"bundle"];
mine = [NSBundle bundleWithPath:path];
}
return mine;
}
- 根據(jù)圖片名獲取圖片
target是指使用圖片的控件所在的類
+(UIImage *)configImg:(id)target imageName:(NSString *)imageName{
UIImage *img = nil;
if (img == nil) {
img = [UIImage imageNamed:imageName inBundle:[self mineBundle:target] compatibleWithTraitCollection:nil];
}
return img;
}
還有一種資源文件上傳的方式就是設(shè)置resources,如下圖:
# 設(shè)置資源文件路徑
s.resources = 'HGGridView/Classes/resource/*.png'
這樣寫的話,文件格式展示出來的就是:

這種方式添加的資源文件,使用起來就簡單了,直接就可以用:
UIImage *image = [UIImage imageNamed:@"back"];
資源文件如果不多的話,使用第二種比較方便,如果資源文件多的話,就需要使用bundle來管理了。