cocoapods私有庫文件分層和資源文件上傳

注意事項(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下面有ApiTargets、ViewViewController、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文件夾中的文件會引用到ApiViewModel里面文件的頭文件,所以要寫在它們的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里面文件的頭文件,所以寫在Viewsubspec下面并添加依賴
s.subspec 'ViewController' do |ss|
      ss.source_files = 'Login/Classes/ViewController/*.{h,m}'
      ss.dependency 'Login/View'
  end
  • Targets文件夾 Targets下的文件會引用到ViewController里面文件的頭文件,所以寫在ViewControllersubspec下面并添加依賴
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'

這樣寫的話,文件格式展示出來的就是:


image.png

這種方式添加的資源文件,使用起來就簡單了,直接就可以用:

UIImage *image = [UIImage imageNamed:@"back"];

資源文件如果不多的話,使用第二種比較方便,如果資源文件多的話,就需要使用bundle來管理了。

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

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

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,171評論 3 119
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • Cocoapods是非常好用的一個iOS依賴管理工具,使用它可以方便的管理和更新項(xiàng)目中所使用到的第三方庫,以及將自...
    Nash33閱讀 2,182評論 0 50
  • 我提著生日蛋糕剛進(jìn)門,母親就回頭朝我做個“噓”的手勢。只見外婆半躺在搖椅上,身上圍裹著米色羊絨刺繡披肩,她的側(cè)臉被...
    月亮河418閱讀 899評論 25 13
  • 今天逛街買衣服,再次光顧了 本澀,看中一件藍(lán)白花朵相間的連衣裙,搭配了白色外套。又看中一件銀色閃亮的短袖,搭配...
    Redchen閱讀 124評論 0 0

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