博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组件化开发 ——— 私有库上传更新遇到的问题及对图片资源的引用
阅读量:6313 次
发布时间:2019-06-22

本文共 3422 字,大约阅读时间需要 11 分钟。

组件化开发 ——— 私有库上传更新遇到的问题及对图片资源的引用

上篇文章说了制作私有库的流程,这里接着说私有库上传更新遇到的问题,及对图片资源的引用。

私有库上传更新遇到的问题

1.组件里按功能“分组”显示

比如我们项目里的WMBaseComponent,就是个功能组合件,像自定义刷新加载,网络,图片选择器等… , 在组件里面按功能分组显示比较直观,也比较符合目前项目阶段的要求。

设置分组的话,需要在放文件的Classes里面 分组对应相应的功能文件,然后在podSpec里这样设置:

#s.source_files = 'WMBaseComponent/Classes/**/*'    #子文件夹在此设置    s.subspec 'PopupUtil' do |ss|    ss.source_files = 'WMBaseComponent/Classes/PopupUtil/**/*'    ss.public_header_files = 'WMBaseComponent/Classes/PopupUtil/**/*.{h}'    end复制代码

2.组件里引用第三方库,及组件之间引用

当某个组件或小的功能组件里需要引用第三方库时,

比如WMBaseComponent 这个大功能组件库,引用基础库时:

s.dependency 'AFNetWorking'     //引用第三方库s.dependency 'WMCategoryKit', '~> 0.4' //引用私有组件库复制代码

当组件里的功能文件引用时:

s.subspec 'WMImagePickerHandle' do |ss|    ss.source_files = 'WMBaseComponent/Classes/WMImagePickerHandle/**/*'    ss.public_header_files = 'WMBaseComponent/Classes/WMImagePickerHandle/**/*.{h}'    ss.dependency 'TZImagePickerController', '~> 2.2.3' //引用第三方库    ss.dependency 'WMBaseComponent/PopupUtil' //引用私有组件库    end复制代码

3.在pod spec lint 验证时 出现Error提示:

ERROR | [iOS] file patterns: The 'source_files' pattern did not match any file复制代码

此错误的原因是没有找到匹配的文件。

这个是在指定共享的类库时, 文件路径不对, 也就是设置s.source_files 字段时, 发生了错误。

注意是否有多级文件夹,ss.source_files 对应的路径是否正确。

查看后要是对应的是正确的,但运行还是出现这个错误的话,解决方案:

手动创建文件,具体操作方法如下

open /Users/climbwang/Library/Caches/CocoaPods/Pods/External/
<组件名>
复制代码

open后,查看组件里面是否对应,若没有,在里面添加功能组件文件。

4.在组件引用基础组件时,pod spec lint 出现Error提示:

Encountered an unknown error 是因为校验podspec文件时默认只会到官方specs库()去校验,如果引用了其他组件,就需要同时指定自己创建的远程索引库地址库校验。

解决方案:

需要执行如下

pod spec lint WMBaseComponent.podspec --sources='git@192.168.1.209:WMComponent/WMSpecs.git,https://github.com/CocoaPods/Specs.git' --verbose --allow-warnings复制代码

5.当example项目运行正常,但验证时提示:

- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code复制代码

这是组件里有的可能用到framework,而lint在执行的时候因为静态库无法通过验证。

解决方案 在命令后面追加:

--use-libraries复制代码

6.验证成功后,pod repo push 后面也加上上述所说

pod repo push WMSpecs WMBaseComponent.podspec --sources='git@192.168.1.209:WMComponent/WMSpecs.git,https://github.com/CocoaPods/Specs.git' --verbose --allow-warnings --use-libraries复制代码

说到这里,基本上上传 更新时遇到的问题都能解决了。

再添一个,删除tag的代码:

git tag   //查看已有tag git tag -d 0.1    //删除本地tag git push origin :0.1 //删除远程tag复制代码

图片资源的引用

在WMBaseComponetn功能组件库里,我添加了WMRefresh自定义刷新加载图片,而这个组件里面 刷新加载是有图片显示的,为了脱离壳工程耦合,我就把图片相应组件需要的图片资源都放在相应的组件里,成为真正意义的独立。

组件里和Classes平级的是Assets,这个就是存放资源文件的位置。

把图片资源拖入Assets文件夹,需要修改.podspec文件,添加资源的加载路径:

s.resource_bundles = {     'WMBaseComponent' => ['WMBaseComponent/Assets/*.png']   }复制代码

然后执行pod install。然后会发现多了一个Resource的资源文件夹,你所放进Assets里的图片资源都会在这里能看到。

运行Example 却发现图片任然未显示,这是因为项目中是通过[UIImage imageNamed:@“图片名"]方式加载本地图片,而这种方式默认是从mainBundle中去加载图片,这样会找不到图片。

而组件都会有个自己的bundle,比如WMBaseComponent就是WMBaseComponent.bundle, 而添加的图片资源都在这里面能看到,但引用的却是壳工程的mainBundle,所以引用不到。

**所以:**必须指明图片的全名和图片所在bundle的包名.

还有,因为涉及到@2x,@3x图片这里不能写成固定的,应该按照scale来设置,所以组件里设置图片的代码是:

// scale判断是几倍图NSInteger scale = [[UIScreen mainScreen] scale];// 指明图片所在bundle的包名NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];// 获取图片的全名NSString *imageName = [NSString stringWithFormat:@"refresh_%ld@%zdx.png",(unsigned long)i,scale];// 获取图片 NSString *path = [currentBundle pathForResource:imageName ofType:nil inDirectory:@"WMBaseComponent.bundle"];UIImage *image = [UIImage imageWithContentsOfFile:path];复制代码

再运行,发现图片可以正常显示了,有没有很激动~~~

到这里,上传时遇到的问题,加载图片资源也差不多完成了,WMBaseComponent也在持续更新中,项目里组件化使用也会越来越完善,下一篇会说——Mediator:组件之间跳转

To Be Continue ...

转载地址:http://vbexa.baihongyu.com/

你可能感兴趣的文章
剑指offer第二版-1.赋值运算符函数
查看>>
javascript 对象
查看>>
Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
查看>>
Echart:前端很好的数据图表展现工具+demo
查看>>
CATransform3D iOS动画特效详解
查看>>
Linux VNC黑屏(转)
查看>>
Java反射简介
查看>>
react脚手架应用以及iview安装
查看>>
shell学习之用户管理和文件属性
查看>>
day8--socket网络编程进阶
查看>>
node mysql模块写入中文字符时的乱码问题
查看>>
仍需"敬请期待"的微信沃卡
查看>>
分析Ajax爬取今日头条街拍美图
查看>>
内存分布简视图
查看>>
POJ 2918 求解数独
查看>>
如何学习虚拟现实技术vr? vr初级入门教程开始
查看>>
第4 章序列的应用
查看>>
Mysql explain
查看>>
初识闭包
查看>>
java tcp socket实例
查看>>