讲一讲如何进行模块化开发的

0.735字数 1239阅读 462

以下分3种做法讲解(每个模块对应一个私有git仓库)

  • 1.通过cocoapods拉取模块代码
  • 2.使用git拉取代码,通过cocoapods将代码引入到工程
  • 3.使用git拉取代码,引入多project

1.通过cocoapods拉取模块代码,如下图所示

通过cocoapods拉取模块代码.png

此种方式所引发的问题就是

1.比如如果我想修改AAAA模块的代码,我只能打开AAAA私有pod的project,然后进行修改,不能在主app(主app即是正在开发的LSAppiPhone)内进行修改,当修改完提交到仓库里还得修改版本号,然后回到主app,通过pod update来获取修改后的新代码,得来回切换多个project,如果牵扯的模块多,那问题更严重了(当然有的人说可以在主app修改,修改完拷贝到私有pod的project项目里,这样是可以但是容易引发一些问题,拷贝遗漏,而且大量拷贝使用起来也比较麻烦)
2.在调试的时候比较麻烦,不能结合主app

2.自己拉取代码到本地,然后将文件引入

图片4.png

图片3.png

此时可以在主app里进行修改home模块的代码,然后提交home的git仓库
会引发的问题

1.如果只是修改已存在的文件还好,修改完提交,其他同事拉取home的git仓库即可,但是一旦牵扯到新增文件,其他同事拉取home的git仓库,只能在finder里看到新增的文件,在主app里看不到新增的文件,因为没有进行重新引用新的文件

1.新增文件,Pods.xcproject也会发生变化,可以将主app的git仓库也进行提交,此时其他人拉取主app仓库和home仓库,就可以获取到工程引用的新文件配置了
2.不提交主app仓库,只提交home仓库,其他人拉取home仓库,通过注释pod 'home', :path => '../home'然后终端执行pod install,在取消注释在pod install即可手动将新增的文件引用到主app(如果不注释,执行pod update也是不好使,因为pod update是检测是否有新版本,没有新版本则啥也不做,当然你可以每次提交都改下podspec里的版本号,但是这样并不现实,也没有这么做的)

如果非要使用第2种方式开发,那么新人到公司拉取主工程,主工程并不包含子模块代码,需要有个配置文件(存放每个模块对应的git地址),然后写一个脚本遍历文件,git拉取子模块代码,然后执行pod install将子模块代码引用到工程

3.采用多project方式开发

将home.xcodeproj拖拽到主app里,如图


图片5.png

然后还得做如下设置,将主app与home关联起来

图片6.png
图片7.png
图片9.png

此时就可以在主app引用home里的头文件了,此时在用相同办法引入mine模块


图片10.png

此时要在mine模块引用home模块的类
还需要做以下事情,创建xcconfig文件


图片11.png
图片14.png

内容如下,可以从主app的config,拷贝以下内容过来,就可以引用home的类了,当然正常开发是所有模块都创建配置文件,操作相同的步骤,就可以互相引用了


image.png

第3种开发方式优点

1.一个窗口开发多个模块
2.修改哪个模块就提交哪个模块,其他人拉取此模块即可(因为提交的时候连xcodeproj也提交了,所以其他人拉下来会看到新增的文件)

总结

当然几种方式可以灵活运用,可以先使用第一种方式拉取代码,拉取下来的是framework加快编译,可以切换成源码形式,此时那个模块使用第3种方式,对于图片资源可以有个独立的git仓库管理所有模块仓库图片,因为不需要有产物(framework),使用第2种形式,改完提交,别人拉取即可。


image.png

因为图片资源都是在xcassets里,所以别人拉取代码的时候会看到里面新增的图片,这点和代码不同

注意点 下图xcconfig文件里的内容,在执行pod install后,会被pod移除掉,因为那里只会存放通过pod引入的文件,所以我们目前是自己有个脚本封装了pod install,是先执行pod install,在将该有的内容填充进去

image.png

推荐阅读更多精彩内容