美文网首页
手把手教大家iOS组件化

手把手教大家iOS组件化

作者: MichealXXX | 来源:发表于2019-05-08 16:59 被阅读0次
    组件化这个东西已经流行很久了,很多大公司已经有一套十分完善的组件化体系,有的公司随着规模的不断扩大也开始在进行组件化之路。
    最近刚刚入职了一家公司,开发人员队伍不断壮大,准备从0开始进行组件化之路,由于之前的公司就是组件化模式,我原以为这次的任务对我来说应该是轻车熟路,但是却是遇到了很多新老问题,下面我就开始手把手教给大家如何使用cocoapods进行组件化开发。
    所谓组件化其实说简单了就是像我们使用cocoapods在项目中pod代码一样,大家分别开发自己的功能模块,上传到私有git上,然后在主工程中pod下来,每个模块都可以独立拿出来运行,对于单元测试以及模块间解耦合都是好处多多。
    铺垫了这么多,下面就正式开始我们的组件化之路,组件化和git是分不开的,我们可以先自己建立一个私有库来进行学习,然后再使用到公司的项目中去,这里我推荐腾讯云开发者平台,大家可以免费在这里设置自己的私有git,管理代码。
    首先在自己的私有git地址中建立一个spec repo,这个项目很特殊,它相当于CocoaPods spec一样,说白了CocoaPods spec就是一个公有的大型仓库,我们平时用的AFNetworking,SDWebImage等第三方都存储在这个大仓库中,而我们自己建立的这个spec repo就是我们自己私有的仓库,用于存放我们自己的项目,在需要用到时从我们自己的仓库中pod下来。
    私有组件化仓库
    这个名称可以随意起,但是我推荐大家使用Spec结尾,别人一看就知道这个是私有仓库,而不是封装好的功能模块,业务代码之类的。
    建立好我们的私有仓库后,就可以打开我们的终端输入,pod repo add ZRSpec https://git.dev.tencent.com/ERRORMAN/ZRSpec.git,仓库名字和地址不要写错了,然后输入open ~/.cocoapods/repos
    cocoapods文件路径
    我们可以看到有两个文件,mastercocoapods的公有仓库,ZRSpec就是我们自己的私有仓库了,我们使用一台新电脑,第一次配置cocoapods的时候常常会觉得十分的慢,就是因为会将cocoapods的公有仓库全部clone下来,而之后我们使用pod install的时候其实是在本地抽取这些三方库的。
    接下来就可以封装我们的功能模块们啦,在自己的私有git地址中,创建新的项目,比如网络库之类的东西。
    功能模块
    在桌面新建立一个空文件夹,然后在私有git页面中进入我们相对应的功能模块中,将项目使用source tree或者终端clone到我们的空文件夹里面。
    项目地址
    使用Xcode在这个空文件中建立一个静态库项目,将我们封装好的代码添加到这个项目中
    封装好的代码
    然后将这个工程push到我们的远端,接下来就要进入关键的步骤,将我们的代码push到远端之后,使用终端cd到我们的工程目录下,执行pod spec create ZRNetwork,建立podspec文件,并且根据提示配置我们的podspec
    配置好的podspec
    这个podspec如果不按规定去书写,在我们校验的时候就会报错,结果就是无法提交成功,推荐大家看看这篇专门讲解podspec文章,文章见讲的很详细,基本我们遇到的问题都涵盖了。
    在项目中存在podspec的路径下执行pod lib lint
    20190508155703.jpg
    我们可以看到终端提示说有四个警告,并且提示说使用--allow-warnings命令可以忽略他们,推荐大家根据提示解决所有警告,再进行验证,但是如果可以忍受warn那也可以。
    --allow-warnings命令
    这样我们就验证成功啦,这一步说明你的lib编译完全没问题,可以成功运行,但是不要高兴的太早。
    接下来需要我们为项目打tag,⚠️这个tag必须和podspec的版本号一致,依次输入以下命令。
    设置tag
    我们还要对spec进行验证,这一步是验证你的podspec写的对不对,远端是否有podspec指定的版本号,pod spec lint,爆出警告同样添加--allow-warnings命令,验证通过后记得将podspec的改动同样也push到远端仓库。
    pod spec lib 验证通过
    两步都成功的同学恭喜你,距离成功近在咫尺了,接下来就是将我们的podspec文件push到我们的私有仓库中,它才会进行管理,在终端cd到项目目录文件中执行pod repo push ZRSpec ZRNetwork.podspec命令,先填写私有仓库名称,再填写我们的podspec文件名称,爆出警告同上,写那一句我个人特别喜欢写的代码。
    20190508163450.jpg
    恭喜你,你自己封装的代码已经成功上传到私有库,并且可以被cocoaPods管理了,随便建新一个项目,生成podfile,然后pod一下试试,⚠️对了,执行pod install之前请务必先执行pod repo update,之前已经说过了,每次pod其实是在本地抽取,咱们刚刚上传到私有仓库,本地肯定还不知道,pod repo update更新一下。
    检查到啦
    再次⚠️这回的podfile书写可不太一样,我们需要添加source,指定我们私有库的地址,不然它只会去cocoapods的仓库中去找,当然找不到啦。
    20190508164456.jpg
    激动人心的时候到啦,我们来pod install
    pod成功

    我们的项目里也有啦!

    20190508164718.jpg
    是不是还算简单,就是有点麻烦,当我们进行更新的时候同样执行打tag操作,更新podspec中的版本号,为项目打tagpodspec版本号对应,将改动push到远端,再执行push repo ZRSpec ZRNetwork.podspec就ok了,pod install之前别忘了pod repo update哦。
    如果有不懂的随时评论,或者留下你的QQ,我加你替你看看,totally free!!!,如果你要是不好意思的话请我喝杯王老吉就行啦,如果我写的哪里有不对的地方,操作不规范的地方,也请大家指出来,共同进步。大家以为组件化就这样结束了吗,其实不然,这里面十分多的大坑,比如OC和swift混编的私有库可是把我折磨坏了,我留到下一篇去讲,这一篇是常规操作,应付一般的纯OC代码或纯swift够用了,下一篇我讲告诉大家更高级的组件化玩法!
    特别感谢一个大神写的文章,我就是看他的文章完成了人生的第一个组件化项目,推荐大家也去看看这一篇文章

    相关文章

      网友评论

          本文标题:手把手教大家iOS组件化

          本文链接:https://www.haomeiwen.com/subject/hvimoqtx.html