Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • iOS项目构建

    post by onelong / 2016-10-16 16:52 Sunday [工作]

     最近一直想写关于iOS项目构建的东西,突然来了一些bug和别的事情,忙打乱了大部分节奏。上上周就开始了解使用cocoapods搭建私有仓库了。在iOS开发中,一直说要模块化,很多时候我们认真模块化就是怎样分目录,对于小项目,的确是这样的。Xcode各方面的都不错的,唯一的遗憾就是在构建项目的太落后了,随便加一个文件都是入侵式的,放在项目里面的文件夹,还需要自己add到project里面。在多人协作里面,这样的方式冲突特别多。在很多大型项目构建工具里面,都不需要这样,如maven,gradle,makefile,cmake等,都是可以让每个人专注于自己的子模块,过程不需要修改总的项目文件。在iOS项目当然也是有办法的,如每个模块打包成静态库,每个模块打包成Framework,从iOS8开始,运行开发者使用动态库了,很多问题就冲突问题就不是问题了。以前使用静态库冲突问题依赖问题非常棘手,大部分都要依赖cocoapods来解决。有了动态库之后,很多模块的依赖问题就好解决了,例如A模块依赖K库,B模块也依赖K库,弄三个动态库就可以了,不会用冲突问题。但是静态库的话,就可以有麻烦了,在编译A模块的时候可能会静态把K库打包进来,同样B模块也会这样,到最后打包整个app的时候,可能就会报错了,app包含了两个K库的代码。使用动态库则不同,动态库是在运行时链接加载的,彼此都是独立的。自己手工创建静态库或者Framework,步骤繁琐,效率低下,容易出错。如果cocoapods很方便了,每个模块都是一个git库,提交代码之后,在代码编译的服务器上pod update,xcodebuild 就可以自动打包分发了。苹果的垃圾桶也可以这样,像tx的大型游戏,用macbook pro的顶配打包都知道要多少时间呢,需要苹果的垃圾桶。
    能利用cocoapods构建项目的前提是模块要组件化,需要想到一个方法,能到很方便的注册模块,加载模块。这些网上有很多方案,http://www.jianshu.com/p/afb9b52143d4 感兴趣的希望认真的demo一下,虽然并不是每个人都能接触大项目的,但是为未来做准备是必要的。我在git上的demo就是用了CTMediator+Target-Action方案,该方案比较适合用在oc上,纯swift是不支持runtime的,但是也可以弄,坑可能比较多,这就是我至今不考虑用swift的原因了,估计很多以前的大项目,也没那么快转到swift上开发,新语言看似很好,但是改变的成本总是很大的,swift在小项目当玩具玩一玩还是不错的,但是要有心理准备,坑,https://github.com/OnelongX/MyApp,但是这个没有用上cocoapods,我本地的测试的demo是用上了,其实都是差不多,就是网上很多人xib等UI文件,比较麻烦。不过Framework是支持xib文件打包的。
    既然说到xib和storyboard了,最近看了很多评价,还有自己项目的思考。发现xib和storyboard在多版本并发开发不方便,同步相当麻烦。xcode升级也会带来一些问题。所以在产品开发中,还是建议纯代码写吧。大型项目就不用说了,基本都是纯代码。如果追求开发效率,xib和storyboard无疑是最好的选择,但是迭代的时候就蓝瘦香菇了。
    cocoapods是非常有用的,希望大家不怕麻烦,下决心折腾一番,定会有收获的。 

    引用地址:
     

    我要评论