组件化

2018-03-10  本文已影响18人  MRNAN_

cocoapod

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

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

image.png

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

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

那么操作如下:

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

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

2. 创建工程

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就可以了

加载资源的时候:

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
上一篇下一篇

猜你喜欢

热点阅读