为什么需要打包私有库?
公司项目采用分支的方式进行“效率开发”,鉴于部分项目的基础功能一致,数据服务也保持了一致,所以在一开始这样的方式倒也没什么问题。But!!!随着项目的持续进行,各个客户定制类的要求差异化严重,采用分支的弊端逐渐显现:
- Base项目存在Bug,导致分支项目全部需要逐一修改,工作重复。(随着项目的增加,后期维护难度指数上升)
- 功能管理不可控,Base项目中经常有部分内容在分支项目中不需要。
- Base项目通过判断语句,将iPad和iPhone项目合二为一,存在一些项目早期不需要iPad端。(貌似后期App上架想加或想去除另一端会比较麻烦)
- 当有部分基础功能需要升级,就如同改代码一样需要处处分支进行更改。
- 虽然公司开发人员不多,流程也没有很完善,但是当自己尝试Jenkins做CI时,发现分支的方式对于一些配置非常不友好。
- ……
基于以上种种情况,便思考着如何改进,第一反应就是重构代码,重新组织架构项目。但是,当看了bang,casa,limboy等等大佬们组件化的思路之后有点懵懵的。最终,只能着手于从项目中抽出公共库或者业务库的思路着手,因此动手目标指向Cocoapods打包私有库。
计划是将一些基础公共功能抽离出来,方便以后所有类型的项目都可以使用,我司目前除了上文提到的Base项目并没有维护使用的库😂。当前者完成,主要也是打通打包私有库这个流程之后,便着手抽取项目的业务功能模块作为库来使用。存在的问题是,还不太清楚是直接把逻辑抽离出来,还是连着UI一起(应该不太好)。最终就能做到通过这些私有库快速搭建项目,针对目前的项目也许还是需要一个Base项目进行一些基础配置(因为会用到一个第三方库)。
CocoaPods 打包进行时
默认打包前已经在电脑上配置好cocoaPods和Git环境,否则后续步骤在一开始就没法进行。关于Git环境配置网上一搜很多,至于cocoaPods环境配置正好自己之前写过一篇算是目前比较新的文档记录。
第一步,创建本地pod仓库
通过Pod命令可以创建一个本地仓库,会自带一些基础配置,只需要把自己的代码放在正确的位置即可完成私有库封装代码部分的内容。
pod lib create YourPodName
命令行执行完以上命令,会出现几个选项,根据自己的情况去做选择即可。提供自己的配置如下:
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> Swift
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Quick / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
Running pod install on your new library.
目前网上能查到的资料,好多都还有一项选择是统一配置类名前缀,不过目前我这个版本已经没有该选项。当上面执行完成之后会自动打开Example工程示例,接下来就可以进行具体的代码编写或者直接替换到对应位置。
第二步,修改Pod内容
打开创建的Pod库所在文件夹,在根目录位置有着 YourNamePod.podspec 和 README.md两个文件,分别打开进行对应的修改。
YourNamePod.podspec 文件修改
鉴于是在创建私有库,本机的Git命令绑定的是GitHub,所以切记要修改文件里的git对应的地址到本地Gitd库地址!!!
Pod::Spec.new do |s|
s.name = 'YourNamePod'
s.version = '0.0.2' // 一定记得修改version!!!一定要和Git的Tag是相同!!!
s.summary = '改成自己的summary
s.description = <<-DESC
修改为自己库的描述内容
DESC
s.homepage = '修改为自己本地Git库的地址' // 注意,这里的地址是本地库在浏览器上面的URL
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } // 默认MIT许可
s.author = { '用户名' => '用户账号' }
s.source = { :git => '修改为自己本地Git库的地址', :tag => s.version.to_s } // 此处的地址,是从Git库copy过来的,以 .git 结尾。
s.ios.deployment_target = '9.0'
s.source_files = 'Pod/Classes/**/*' // 原生的地址是 'YourNamePod/Classes/**/*', 但是这个地址在后面 的 pod repo push 中会出现问题,根据一个开源的库,修改了地址。注意,Pod 文件夹仍然是在根目录。
s.swift_version = '5.0' // 亲测,需要加上swift版本
end