iOS組件化 - subspec子庫的制作

本文章用到的demo的下載地址

關(guān)于組件化前幾篇文章請查看這里
iOS組件化(上篇)- 拆分基礎(chǔ)組件
iOS組件化(中篇)-拆分業(yè)務(wù)組件
iOS組件化(下篇)-加載XIB、圖片資源

我們創(chuàng)建了一個基礎(chǔ)組件庫FFBaseKit,假如它里面包含了Category分類、Tool工具庫、APIs網(wǎng)絡(luò)庫三個功能,目錄結(jié)構(gòu)如下圖所示。

image.png

此時,我們在項目里pod FFBaseKit基礎(chǔ)庫時,需要把它里面包含的三個功能都pod下來。有時候,我們可能僅僅只用到了其中一個功能,但是又不想全部都pod下來,那么此時就涉及到子庫的制作。

最初,我們的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文件,因為要設(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后面是起的一個別名
  • 別名.source_files是文件路徑 (注意路徑別寫錯)
  • 別名. dependency后面是子庫的依賴庫

接著驗證podspec文件通過后 pod repo push命令提交索引文件,如果不知道怎么提交請參看我之前的這篇文章。

然后就可以回到FlowerField_Component項目
中通過下面幾種方式使用pod庫了

  • pod 'FFBaseKit' 引入pod庫中所有模塊
  • pod 'FFBaseKit/Category' 只引入Category模塊
  • pod 'FFBaseKit', :subspecs => ['Category', 'Tools']

修改FlowerField_Component項目的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項目項目里Other下的category文件,不然會報重復(fù)沖突的

pod之后發(fā)現(xiàn)我們的FFBaseKit下就只有Category一個功能模塊了

image.png

如果想pod APIs 或者 Tools模塊功能,需要注釋掉原來podspec文件下的pod,并刪除Other下對應(yīng)的文件夾即可

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

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

  • 要解除循環(huán)依賴,引入包管理技術(shù)cocoapods會讓我們更有效率。pod不允許組件間有循環(huán)依賴,若有pod ins...
    cs_mark閱讀 2,224評論 0 1
  • 最近在學(xué)習(xí)vue.js的時候發(fā)現(xiàn),vue的組件化的思想對于編寫代碼是一個非常有用的事情。 首先為什么需要組件化? ...
    拂曉的云閱讀 7,356評論 6 23
  • 在一個單位工作,不要想到二十年、三十年之后會是什么樣子,如果這樣想,那么人生就失去了意義,也就失去了努力和準備。 ...
    當?shù)?/span>閱讀 473評論 0 0
  • 萬一,我病了,并不是無藥可治,拯救需要你傾家蕩產(chǎn),但我也病怏怏一生,你是否依然愿意陪我明滅這段時光…… 頭發(fā)偷偷掉...
    心匠與匠心閱讀 541評論 0 1
  • 笨鳥已經(jīng)先飛了好幾年,聰明的鳥兒想要迎頭趕上,只有來一次鳳凰涅槃。 大賓是我兒時的鄰居和小學(xué)同學(xué),小時候的他比較內(nèi)...
    擺靈閱讀 2,919評論 24 77

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