本文章用到的demo的下載地址
關(guān)于組件化前幾篇文章請查看這里
iOS組件化(上篇)- 拆分基礎(chǔ)組件
iOS組件化(中篇)-拆分業(yè)務(wù)組件
iOS組件化(下篇)-加載XIB缠导、圖片資源
我們創(chuàng)建了一個(gè)基礎(chǔ)組件庫FFBaseKit,假如它里面包含了Category分類帕胆、Tool工具庫荆永、APIs網(wǎng)絡(luò)庫三個(gè)功能废亭,目錄結(jié)構(gòu)如下圖所示。
此時(shí)具钥,我們在項(xiàng)目里pod FFBaseKit
基礎(chǔ)庫時(shí)豆村,需要把它里面包含的三個(gè)功能都pod下來。有時(shí)候骂删,我們可能僅僅只用到了其中一個(gè)功能掌动,但是又不想全部都pod下來四啰,那么此時(shí)就涉及到子庫的制作。
最初粗恢,我們的podspec索引文件是這樣的
#
# Be sure to run `pod lib lint FFBaseKit.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'FFBaseKit'
s.version = '1'
s.summary = 'A short description of FFBaseKit.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/FFComponent/FFBaseKit'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'JiaJung' => 'jiajung@aliyun.com' }
s.source = { :git => 'https://github.com/FFComponent/FFBaseKit.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'FFBaseKit/Classes/**/*'
# s.resource_bundles = {
# 'FFBaseKit' => ['FFBaseKit/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
s.dependency 'AFNetworking'
s.dependency 'FMDB'
s.dependency 'MBProgressHUD'
end
接著柑晒,我們需要修改podspec文件,因?yàn)橐O(shè)置subspec子庫眷射,所以需要注釋掉之前的 s.source_files
和原來的依賴庫, 然后設(shè)置子庫的subspec 和子庫依賴庫
# s.source_files = 'FFBaseKit/Classes/**/*'
# s.dependency 'AFNetworking'
# s.dependency 'FMDB'
# s.dependency 'MBProgressHUD'
s.subspec 'Category' do |category|
category.source_files = 'FFBaseKit/Classes/Category/**/*'
end
s.subspec 'Tools' do |tools|
tools.source_files = 'FFBaseKit/Classes/Tools/**/*'
tools.dependency 'MBProgressHUD'
end
s.subspec 'APIs' do |apis|
apis.source_files = 'FFBaseKit/Classes/APIs/**/*'
apis.dependency 'AFNetworking'
apis.dependency 'FMDB'
end
- s.subspec后面是我們文件目錄對應(yīng)名稱
- do后面是起的一個(gè)別名
- 別名.source_files是文件路徑 (注意路徑別寫錯(cuò))
- 別名. dependency后面是子庫的依賴庫
接著驗(yàn)證podspec文件通過后 pod repo push
命令提交索引文件匙赞,如果不知道怎么提交請參看我之前的這篇文章。
然后就可以回到FlowerField_Component項(xiàng)目
中通過下面幾種方式使用pod庫了
- pod 'FFBaseKit' 引入pod庫中所有模塊
- pod 'FFBaseKit/Category' 只引入Category模塊
- pod 'FFBaseKit', :subspecs => ['Category', 'Tools']
修改FlowerField_Component項(xiàng)目的podspec文件:
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/FFComponent/FFSpecs.git'
use_frameworks!
platform :ios, '8.0'
target ‘FlowerField’ do
pod 'MBProgressHUD'
pod 'AFNetworking'
pod 'Masonry'
pod 'YYWebImage'
pod 'FMDB'
pod 'ReactiveCocoa', '~> 2.5'
pod 'FFBaseKit/Category' //剛才設(shè)置好的庫
end
pod install之后別忘了刪除FlowerField_Component項(xiàng)目項(xiàng)目里Other下的category文件妖碉,不然會(huì)報(bào)重復(fù)沖突的
pod之后發(fā)現(xiàn)我們的FFBaseKit下就只有Category一個(gè)功能模塊了
如果想pod APIs 或者 Tools模塊功能涌庭,需要注釋掉原來podspec文件下的pod,并刪除Other下對應(yīng)的文件夾即可
#pod 'MBProgressHUD'
#pod 'AFNetworking'
#pod 'FMDB'