组件化

cocoapod

pod install是按照 Podfile.lock里面的版本去安装,pod update如果Podfile里面没有指定版本号的话,是按照最新的版本去安装的。

创建自己的cocoapod仓库和spec描述文件

image.png

1.创建私有远程索引仓库

  • 创建私有索引库 托管平台。
    例如:在码云上建立了一个私有索引库

    image.png

  • 本地添加私有远程索引库。

pod repo add `私有索引库的名字` `私有索引库的地址`

那么操作如下:

pod repo add NXStudySpecs https://gitee.com/Nsir/NXStudySpecs.git

通过 pod repo可以查看当前有几个库

2. 创建工程

  • 创建远程私有代码库
    • 还是在码云上创建私有项目。
  • 创建本地项目
    • 方式一:
      1.直接创建工程,把组件代码放在Class中,只要spec描述好,就会自动加载Class中组件代码
      2.生成仓库的spec描述文件,指定加载组件工程的组件代码在哪。
      命令:pod spec create spec文件名

    • 方式二: 使用cocoapods命令:pod lib create 组件代码名称

      1. 这个命令会自动生成一套组件代码工程测试代码,并且有Git管理
      2. 还会生成podspec,描述好组件代码在哪就好.
      3. 如何使用自动生成的组件工程代码?
1. 需要把自己的组件代码放在Class中对应文件,还不够,发现根本没法引入组件代码.h文件.
2. 需要重新pod install,因为不重新pod install,Example工程根本不知道Pod更新了,pod install的作用:重新让pod库与所依赖的工程文件产生关联。
middleCycle.gif

配置podspec文件

image.png

可以使用命令pod lib lint检查本地是否配置正确

pod lib lint = local, pod spec lint = local/remote

提交到远程私有代码仓库。

别忘了要打上标签

image.png

把本地tag推送到远程

git push --tags

删除本地tag

git tag -d tag名
image.png

删除远程tag

git push origin --delete tag tag名 或者 :git push origin : refs/tags/tag名
image.png
image.png

3. 把自己私有代码库的索引添加到自己私有库中:pod repo push NXStudySpecs NXStudyCategory.podspec --allow-warnings,本地索引库就会有自己的私有库,并且远程也会有,pod repo push会帮我们推送到远程索引库.

image.png

此时再去远程代码私有库刷新一下就可以看到了


image.png

4.划分子组件:

上面我们的私有在引用的时候会发现一些问题,如下:


image.png

在左边我们编写组件的时候分了文件夹,但是在右边测试工程引用的时候发现并没有按照我们组件的文件夹目录去分类。如果以后组件内部代码好多的时候,全都显示出来感觉就会很乱。
而且还有一个问题就是我们有时候项目只是想使用一下这个组件内部的 frame 里面的东西,不需要全部导入进来。所以这时候就需要使用subspec(子组件)去优化。

编辑podspec文件


image.png

然后更新一下索引库和代码
宿主工程使用pod update使用最新的组件代码

pod update --no-repo-update

有时候pod search 搜不到添加的组件,解决办法如下:
输入:

rm ~/Library/Caches/CocoaPods/search_index.json
后在一次输入:pod search xxxx

skip:

组件库中含有xib文件的时候,直接引用编译会出现如下问题:


image.png

原因:

用pod导入自己创建的私有库时,如果没有添加 use_frameworks ,在编译的时候就会报 “Unable to run command 'StripNIB xx.nib' - this target might include its own product” 这个错误
需要在宿主工程添加:


然后再pod install就可以了

加载资源的时候:

  • 之前获取都是在主bundle中:NSBundle mainBundle,但是组件资源代码,不是在主bundle中,是在自己框架的bundle中
  • 获取自己bundle,[NSBundle bundleForClass:self],self:表示当前类,当前方法获取当前类所在的bundle


    image.png

    按照上图的格式修改私有组件的podspec配置文件如下,

image.png

然后进入Example工程重新pod install之后,工程的目录就会如下:

image.png

这时候加载xib就不能按照之前的格式来了
之前格式

// 注册Cell
    [self.tableView registerNib:[UINib nibWithNibName:@"XMGHomeRecommendCell" bundle:nil] forCellReuseIdentifier:ID];

修改之后

 // 注册Cell
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    
    NSString *bundleName = bundle.infoDictionary[@"CFBundleName"];
    
    NSString *nibName = [NSString stringWithFormat:@"%@.bundle/%@",bundleName,@"XMGHomeRecommendCell"];
    
    [self.tableView registerNib:[UINib nibWithNibName:nibName bundle:bundle] forCellReuseIdentifier:ID];

此时的xib文件加载图片的名字前面也得加上bundle名字:


image.png

参考链接

教你从 0 到 1 如何实现组件化架构
iOS组件化开发2 · 组件开发必备知识
Git & CocoaPods & 私有化,你不得不知的组件化基础!
远程私有库的资源依赖和图片使用


Tip:

项目在导入ijkplayer 等编译的时候会出现如下的错误:


image.png

解决办法,导入如下的两个库:


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

推荐阅读更多精彩内容