寫(xiě)在前面
一個(gè)私有pod庫(kù)是由代碼庫(kù)和索引組成的腿堤,代碼庫(kù)就是具體的實(shí)現(xiàn),存放代碼用的如暖,索引是為了pod install
時(shí)cocoapods可以找到代碼庫(kù)笆檀,索引即是 xx.podspec 文件,主要用來(lái)配置庫(kù)的主頁(yè)盒至,倉(cāng)庫(kù)地址酗洒,license士修,文件路徑,依賴關(guān)系等樱衷。
1.創(chuàng)建本地索引庫(kù)棋嘲,并關(guān)聯(lián)遠(yuǎn)程索引庫(kù)
在終端執(zhí)行命令
# pod repo add [本地索引庫(kù)名稱(最好與遠(yuǎn)端索引庫(kù)庫(kù)名稱保持一致)] [遠(yuǎn)程索引庫(kù)地址]
# example 創(chuàng)建一個(gè)名為XYAPP的索引庫(kù),用于存放XYAPP所用到的所有私有庫(kù)的索引文件
pod repo add XYAPP http://gitlab/ios/XYAPP.git
一個(gè)索引庫(kù)可以存放多個(gè)索引文件
2.創(chuàng)建組件本地代碼庫(kù)
為了方便理解矩桂,創(chuàng)建一個(gè)名為 XYBase
的pod庫(kù)
在終端中cd到某一路徑下沸移,執(zhí)行命令
pod lib create XYBase
后,pod會(huì)詢問(wèn)pod庫(kù)的屬性侄榴,根據(jù)提示輸入即可
3.組件項(xiàng)目開(kāi)發(fā)
3.1 在~/XYBase/XYBase/Classes
路徑下放入源代碼文件雹锣,cd到~/XYBase/Example
路徑下后執(zhí)行pod install
命令
3.2 在 XYBase.podspec
文件中編寫(xiě)pod文件路徑,依賴的pod庫(kù)
# pod文件子模塊配置
s.subspec 'XYBaseModel' do |ybm|
# 路徑配置
ybm.source_files = 'XYBase/Classes/XYBaseModel/*'
# 資源文件配置
ybm.resource = 'XYBase/Assets/文件名'
# 頭文件配置
ybm.prefix_header_file = 'XYBase/Classes/XYBaseModel/頭文件名.h'
# 依賴配置
ybm.dependency '私有pod庫(kù)'
ybm.dependency 'Masonry' #公開(kāi)pod庫(kù)
ybm.dependency 'XYBase/XYBaseNet' #依賴其它子模塊
end
當(dāng)依賴私有pod庫(kù)時(shí)癞蚕,需要在podfile中導(dǎo)入該庫(kù)的索引地址
source 'https://github.com/CocoaPods/Specs.git'
source '私有索引庫(kù)git地址'
上述操作完畢后蕊爵,在終端執(zhí)行pod install
命令
4.開(kāi)發(fā)完畢后推送到遠(yuǎn)端
4.1 創(chuàng)建遠(yuǎn)端代碼倉(cāng)庫(kù)
4.2 修改 XYBase.podspec 文件中的s.version
,s.homepage= '遠(yuǎn)端代碼倉(cāng)庫(kù)主頁(yè)地址'
,s.source = { :git => '遠(yuǎn)端代碼倉(cāng)庫(kù)', :tag => s.version.to_s }
配置;并執(zhí)行pod install
命令
4.3 將本地代碼推送到遠(yuǎn)程代碼庫(kù)桦山,打tag后推送tag
4.4 cd到組件根路徑攒射,執(zhí)行校驗(yàn)命令
pod spec lint XYBase.podspec --allow-warnings --use-libraries --sources='https://github.com/CocoaPods/Specs.git'
# --sources:如果依賴私有庫(kù),需要加上該私有庫(kù)的索引路徑恒水,中間以 ‘,’ 逗號(hào)隔開(kāi)
# example
pod spec lint XYBase.podspec --allow-warnings --use-libraries --sources='http://gitlab/ios/XYAPP.git, https://github.com/CocoaPods/Specs.git'
# 在后面可添加 --verbose 選項(xiàng)会放,可輸出更詳細(xì)的驗(yàn)證情況
如果校驗(yàn)失敗,可檢查version寇窑、tag鸦概、子模塊依賴箩张、文件路徑等
4.5 推送代碼到pod庫(kù)甩骏,執(zhí)行命令
# push 后 [本地索引庫(kù)名稱][組件podspec文件名稱]
pod repo push XYAPP XYBase.podspec --allow-warnings --use-libraries --sources='https://github.com/CocoaPods/Specs.git'
# --sources:如果依賴私有庫(kù),需要加上該私有庫(kù)的索引路徑先慷,中間以 ‘,’ 逗號(hào)隔開(kāi)
# example
pod repo push XYAPP XYBase.podspec --allow-warnings --use-libraries --sources='http://gitlab/ios/XYAPP.git, https://github.com/CocoaPods/Specs.git'
# 在后面可添加 --verbose 選項(xiàng)饮笛,可輸出更詳細(xì)的驗(yàn)證情況
如果校驗(yàn)失敗,可檢查version论熙、tag福青、子模塊依賴、文件路徑等
5.使用
5.1 在podfile中書(shū)寫(xiě)索引文件路徑,并書(shū)寫(xiě) pod命令
source 'https://github.com/CocoaPods/Specs.git'
source 'http://gitlab/ios/XYAPP.git'
pod 'XYBase'
5.2 執(zhí)行pod install
命令
6.資源文件引入
6.1 resource_bundle & resource_bundles
允許定義當(dāng)前 Pod 庫(kù)的資源包的名稱和文件脓诡。用 hash 的形式來(lái)聲明无午,key 是 bundle 的名稱,value 是需要包括的文件的通配 patterns祝谚。
CocoaPods 官方推薦使用 resource_bundles
宪迟,因?yàn)橛?key-value 可以避免相同名稱資源的名稱沖突。
同時(shí)建議 bundle 的名稱至少應(yīng)該包括 Pod 庫(kù)的名稱交惯,可以盡量減少同名沖突次泽。
s.resource_bundle = { 'XYBase' => 'XYBase/Assets/*.{png,storyboard,xib,xcassets,mp4}'}
#或
s.resource_bundles = {
'XYBase' => ['XYBase/Assets/*.{png,storyboard,xib,xcassets,mp4}']
}
# 'XYBase'對(duì)應(yīng)在ipa包中生成XYBase.bundle文件
//此處baseBundle其實(shí)是mainBundle
NSBundle * baseBundle = [NSBundle bundleForClass:NSClassFromString(@"XYBase")];
//獲取XYBase組件生成的bundle
NSBundle * assetBundle = [NSBundle bundleWithPath:[baseBundle pathForResource:@"XYBase" ofType:@"bundle"]];
//根據(jù)bundle獲取圖片穿仪;xib,sb意荤,視頻等同理
UIImage *img = [UIImage imageNamed:@"imageName" assetBundle compatibleWithTraitCollection:nil];
如果手動(dòng)導(dǎo)入的第三方庫(kù)就是使用的bundle文件啊片,且其在內(nèi)部的是通過(guò)mainBundle
去獲取ThirdFrameWork.bundle
,此時(shí)如果使用resource_bundles
配置路徑,ThirdFrameWork.bundle
則會(huì)被打包進(jìn)XYBase.bundle
中玖像,則取不到所需的圖片等資源文件紫谷,所以需要使用下面??的方法
6.2 resource & resources
使用resources
來(lái)指定資源,被指定的資源只會(huì)簡(jiǎn)單的被copy
到目標(biāo)工程中(mainBundle)御铃。
s.resources = [
'XYBase/Assets/ThirdFrameWork.bundle'
]
#ipa包的文件結(jié)構(gòu)碴里,即`mainBundle`的文件結(jié)構(gòu)
.
├── AppIcon
├── Assets.car
├── Base.lproj
├── Info.plist
├── LaunchScreen.storyboardc
├── ThirdFrameWork.bundle
├── XYBase.bundle
│ ├── Assets.car
│ ├── Info.plist
│ ├── XYBaseView.nib
│ └── XYBaseVideo.mp4
├── _CodeSignature
│ └── CodeResources
├── embedded.mobileprovision
└── XYAPP
ps.其它一些命令
# 查看本地索引庫(kù)
pod repo list
# 刪除本地索引庫(kù)
pod repo remove xx
# 本地校驗(yàn)pod配置
pod lib lint xx.podspec