[干货分享]让自己的框架支持cocoapods汇总

这两天一直琢磨着想让自己的一个照片多选框架支持cocoapods下载安装,就搜了好多资料,但是搜到的资料大多都是最基本的,并没有解决我遇到的问题,问题如下:

  • 当自己的框架中用到了xib及图片资源的话,怎么解决在cocoapods下载安装后xib初始化失败及图片资源不显示的问题。

那么我们从第一步开始,一步一步来使自己的框架支持cocoapods安装(关于如何在自己的电脑上安装cocoapods的,就请自行搜索,教程很多)。

首先概括一个大概的步骤

  • 代码上传到github
  • 创建podspec文件
  • 在github上创建release版本
  • 注册cocoapods账号
  • 上传代码到cocoapods
  • 检验是否上传成功
  • 更新框架版本

重点

  • 解决cocoapods下载框架中xib初始化crash的问题
  • 解决cocoapods下载框架中图片无法正常显示的问题

代码上传到github

代码上传github的步骤就不说了,相信有github账号的人几乎都会上传,而且现在代码上传github也不需要繁琐的终端操作了,使用Github Desktop客户端即可。


Github Desktop

我们还可以观察到,支持cocoapods的代码下载下来之后,都会有*.podspec、LICENSE和.gitignore(该文件为隐藏文件),那么先说LICENSE和.gitignore文件,这个可以再github上创建工作目录时候便勾选出来,如下图

creat repository
result

但是通过Github Desktop客户端推上去的工作目录是没有的,怎么再去创建这两个文件,笔者暂时没摸索到,我是直接把这两个文件copy了一份放到了自己的工作目录的。

创建podspec文件

这个简单,首先你需要打开终端进入自己的工作目录的根目录,输入以下命令

touch name.podspec

name便是你最终确定上传到cocoapods上的命名
编辑命令如下

vi name.podspec

英文输入法下,点击"i"进入编辑模式,编辑完毕之后首先点击"esc",然后快捷键"shift+zz"(双击z键)即可
我的ZLPhotoBrowser.podspec文件如下,涉及到更多的cocoapods命令,请自行搜索

ZLPhotoBrowser.podspec

在github上创建release版本

创建release版本

点进去之后步骤很简单,填上版本号,标题和简单的描述即可,需要注意的是版本号需要与你的 podspec文件中的 s.version 相同

注册cocoapods账号

打开终端,在终端中输入如下命令

pod trunk register 邮箱地址 '用户名' --description='描述信息'

然后根据终端显示信息,如果成功的话会提示让你去邮箱里确认进行激活

输入如下命令可查看个人cocoapods账号信息

pod trunk me

上传代码到cocoapods

  • 在上传cocoapods之前你需要做一件事,便是验证自己的podspec文件格式的有效性,终端命令如下
pod spec lint

如果podspec文件格式不合法,终端内会报出相应的提示

如果通过,终端显示信息如下


podspec

那么接下来便是把自己的框架推到cocoapods了,终端命令如下

long:ZLPhotoBrowser long$ pod trunk push ZLPhotoBrowser.podspec --allow-warnings

当然你这里如果不是在podspec文件目录下,也可以指定podspec文件的绝对路径,这里请注意最后使用了"--allow-warnings",为忽略警告的意思,如果不加该关键字的话,如果在执行"pod spec lint"时候报出了警告,那么这里上传框架代码肯定是不成功的。成功的话,会有如下显示


push success

检验是否上传成功

终端输入如下命令搜索你的框架吧

pod search ZLPhotoBrowser

如果成功的话,终端显示信息如下


ZLPhotoBrowser

更新框架版本

框架上传后,避免不了版本的更新,更新版本也简单,上传最新的代码,在github上创建新的release版本(再次提醒注意版本号与podspec文件的s.version保持一致),然后再次执行命令即可

long:ZLPhotoBrowser long$ pod trunk push ZLPhotoBrowser.podspec --allow-warnings

解决cocoapods下载框架中xib初始化crash的问题

由于框架中使用到了UITableView及UICollectionView等UI,所以有存在对应的cell的xib文件。
我们通过cocoapods去下载我们的框架,如果存在xib,那么我们平常初始化xib的代码(如下)便不能正常工作了。

[[[NSBundle mainBundle] loadNibNamed:@"xibName" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"xibName" bundle:nil] forCellWithReuseIdentifier:@"ZLCollectionCell"];

因为通过mainBundle不能获取到我们的xib了,解决方法如下

#define kZLPhotoBrowserBundle [NSBundle bundleForClass:[self class]]

[[kZLPhotoBrowserBundle loadNibNamed:@"ZLPhotoActionSheet" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"ZLCollectionCell" bundle:kZLPhotoBrowserBundle] forCellWithReuseIdentifier:@"ZLCollectionCell"];

这样之后,无论是通过copy文件夹方式还是cocoapods下载安装的方式,都能正常使用xib进行初始化了

解决cocoapods下载框架中图片无法正常显示的问题

解决完了xib的初始化问题,图片资源不显示又是一个令人头痛的问题。我在测试期间,得出如下结果:

  • 通过cocoapods下载安装,如果xib中直接填写好的图片,则图片资源能直接显示,如果通过代码"[UIImage imageNamed:@""]"去设置的话,则图片资源根本显示不了

最终解决方法:

  • 创建bundle资源目录
command+N -> Resource -> Settings Bundle

删除bundle携带的无用文件,把图片资源添加到bundle资源内,

  • 改变代码图片路径
// 图片路径
#define kZLPhotoBrowserSrcName(file) [@"ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
#define kZLPhotoBrowserFrameworkSrcName(file) [@"Frameworks/ZLPhotoBrowser.framework/ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
  • kZLPhotoBrowserSrcName(file) 为通过copy文件夹方式获取图片路径的宏
  • kZLPhotoBrowserFrameworkSrcName(file) 为通过cocoapods下载安装获取图片路径的宏

之后修改代码中设置图片的方式如下

UIImage *img = [UIImage imageNamed:kZLPhotoBrowserSrcName(@"img.png")]?:[UIImage imageNamed:kZLPhotoBrowserFrameworkSrcName(@"img.png")];

到了这一步,ok,很好,问题已经解决。

结束语

感谢参考的两篇文章
让代码支持CocoaPods
iOS为自己的库添加CocoaPods支持
同时也感谢下小码哥(MJ李明杰老师),解决图片不显示的方式是通过查找各大框架的podspec的等相关才最终在MJRefresh中找到以bundle资源目录的方式解决的。

最后发几张框架部分功能效果图

选择

forceTouch预览

编辑视频功能

编辑图片功能

横屏

滑动选择

拖拽选择

预览网络图片

转载请注明出处。

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

推荐阅读更多精彩内容