cocoapods私有库文件分层和资源文件上传

注意事项:本文针对的是已经对pods私有库的流程有所了解或想了解这块内容的人群
有想了解pods私有库搭建相关的,可以点击下面链接
pods私有库搭建

一、文件显示层级

cocoaPods创建私有库的时候,如果私有库中的文件很多,想做到和项目中的文件夹分层,就需要在podSpec文件里面用到s.subspec 'xxx' do |ss|语句来配置。

先看一个文件层级


文件层级

如图所示,现在我们要把 Login这个文件夹搭建私有库。

我们一般在用pod lib create Login创建完项目后,会生成相应的目录,只要把需要做成私有库的文件夹代码文件放到 classes里面就可以了。

首先先不考虑文件分层的写法,这样podspec文件里面是这样的

不考虑文件分层

在图中可以看出,就是普通的写法,按照图中这么写的话,会导致私有库搭建完成并pod导入后,所有的.h .m .xib .png等文件都在一个文件夹里面,并没有我们本地那样的文件夹Api、View等文件夹了。

这样的pod私有库虽然在正常的使用中并没有任何问题,但是看起来很乱,这个时候我们就需要进行文件分层了。把UIView类都放在View里面,把Model类都放在Model里面。这里我们基于没有文件分层的基础上进行修改,需要使用到下面的语句

s.subspec 'View' do |ss|
ss.source_files = ''
end

下面我们参照图一给出的文件层级写相关的 subspec
classes文件夹下面,只有文件夹,并没有其他的.h .m等文件,这个时候,podspec文件里面的source_files就可以不用写了。

首先 classes下面有ApiTargetsViewViewControllerViewModel文件夹,要实现搭建的私有库显示这样的文件夹层级,就需要分别将这个五个文件夹全部写错 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里面,也可以写在总的依赖里。

  • 如果A subspec里面有使用到B subspec下的文件,B subspec又引用到A subspec下的文件,这样的话,分层实现起来比较困难,解决的思路可以在classes下面创建一个.h的头文件,引用各个头文件,并设置 s.souce_files = 'Login/Classes/Login.h'

二、资源文件使用

pods私有库有时候会用到图片资源或者其他资源,这些资源应该怎么配置和获取使用呢?

在我们使用pod lib creat Login的时候,会在Classes同级目录下面生成一个Assets的文件夹,这个文件夹就是用来放资源文件的,如图:

资源文件夹

将资源文件放到这个里面的时候,接下来要去设置Login.podspec文件,主要就是将原先下面这段注释的代码接触注释就好了:

s.resource_bundles = {
    'Login' => ['Login/Assets/*.png']
  }

接下来怎么使用呢?

因为s.resource_bundles生成的资源文件,会生成一个bundle文件,使用的时候就是要先获取到这个bundle,然后获取到里面的资源。

  • 获取bundle calssType是指当前使用图片的控件所在的类
+ (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;
}
  • 根据图片名获取图片 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;
}

还有一种资源文件上传的方式就是设置resources,如下图:

# 设置资源文件路径
  s.resources = 'HGGridView/Classes/resource/*.png'

这样写的话,文件格式展示出来的就是:


image.png

这种方式添加的资源文件,使用起来就简单了,直接就可以用:

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

资源文件如果不多的话,使用第二种比较方便,如果资源文件多的话,就需要使用bundle来管理了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_x阅读 15,968评论 3 119
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,520评论 25 707
  • Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自...
    Nash33阅读 2,079评论 0 50
  • 我提着生日蛋糕刚进门,母亲就回头朝我做个“嘘”的手势。只见外婆半躺在摇椅上,身上围裹着米色羊绒刺绣披肩,她的侧脸被...
    月亮河418阅读 827评论 25 13
  • 今天逛街买衣服,再次光顾了 本涩,看中一件蓝白花朵相间的连衣裙,搭配了白色外套。又看中一件银色闪亮的短袖,搭配...
    Redchen阅读 95评论 0 0