iOS-组件化(CocoaPods)
随着移动互联网的不断发展,很多程序代码量和业务越来越多,现有架构已经不适合公司业务的发展速度了,很多都面临着重构的问题。
在公司项目开发中,如果项目比较小,普通的单工程+MVC架构就可以满足大多数需求了。但是像淘宝、蘑菇街、微信这样的大型项目,原有的单工程架构就不足以满足架构需求了。
组件化简介
将一个工程分解为各个组件,然后按照某种方式任意组织成为一一个拥有完整业务逻辑的工程。
优点
- 组件的独立性
- 资源重用
- 高效迭代
- 配合我们二进制,加快项目的编译速度
缺点
- 增加开发人员的学习成本
- 增加了代码的冗余,组件化颗粒度越细,中间代码越多
- 增加了项目的复杂度,复杂度越高越容易出问题
组建划分
- 基础组件 
 基础配置(宏,常量),分类, 网络(AFNetworking, SDWebImage二次封装)、工具类(日期时间的处理,文件处理,设备处理)
- 功能组件 
 控件(弹幕,轮播器,选项卡);功能(断点续传,音频处理)
- 业务组件 
 业务线一,业务线二。
CocoaPods
多人协作的项目工程中,独立的代码模块划分的重要性是毋庸置疑的。而CocoaPods是一个iOS的包管理第三方工具(类似的概念),它可以方便的帮助我们管理代码模块。
安装
一般情况下,下面这条命令就能安装最新的cocoapods到本地。
| 1 | sudo gem install cocoapods | 
然而有时候也会由于以下几个问题导致安装失败:
- gem版本太旧
- gem源访问不到
- ruby环境问题
具体问题还得再去发动Google大法找一找如何解决。
更新gem版本和替换gem源
| 1 | gem update --system # 这里请翻墙一下 | 
| 1 | gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ | 
更换Ruby环境
由于MacOS系统自带了一个Ruby环境,但是usr/bin的访问权限可能会导致一些问题,最好还是使用Homebrew安装一个ruby。
使用brew install ruby装好Ruby后记得给Shell配一下环境变量如下:
| 1 | export PATH="/usr/local/lib/ruby/gems/2.5.0/bin:/usr/local/opt/ruby/bin:/usr/local/bin:$PATH" | 
本地pod库
pod的原理
CocoaPods的工作主要是通过ProjectName.xcworkspace来组织的,在打开ProjectName.xcworkspace文件后,发现Xcode会多出一个Pods工程。
- 库文件引入及配置:
 库文件的引入主要由Pods工程中的Pods-ProjectName-frameworks.sh脚本负责,在每次编译的时候,该脚本会帮你把预引入的所有三方库文件打包的成ProjectName.a静态库文件,放在我们原Xcode工程中Framework文件夹下,供工程使用。
 如果Podfile使用了use_frameworks!,这是生成的是.framework的动态库文件。引入方式也略有不同。
- Resource文件:
 Resource资源文件主要由Pods工程中的Pods-ProjectName-resources.sh脚本负责,在每次编译的时候,该脚本会帮你将所有三方库的Resource文件copy到目标目录中。
- 依赖参数设置:
 在Pods工程中的的每个库文件都有一个相应的SDKName.xcconfig,在编译时,CocoaPods就是通过这些文件来设置所有的依赖参数的,编译后,在主工程的Pods文件夹下会生成两个配置文件,Pods-ProjectName.debug.xcconfig、Pods-ProjectName.release.xcconfig。
创建本地pod库
1.创建一个本地Demo工程
| 1 | pod lib create RCDownloader | 
2.填入询问的问题,填完之后会自动打开一个Demo工程
| 1 | What platform do you want to use?? [ iOS / macOS ] | 
3.找到Pod工程下面有一个Development Pods文件夹下面的工程名下面的ReplaceMe.m文件
4.右键ReplaceMe.m文件,Show in Finder到Finder文件夹,把我们封装的.h和.m文件替换掉ReplaceMe.m
5.将替换进来的文件,拖拽到工程刚刚ReplaceMe.m所在的文件夹,然后全选Target
6.主工程下面有一个Example for <classname>文件夹,这个文件夹是用来调试的类库
7.在我们需要引入该Pod库的工程的Podfile文件中加入pod 'RCDownloader', :path => '可以是绝对路径/相对路径'
8.执行pod install
注意:
如果我们的Pod有需要依赖的Framework,那么就打开组建工程的spec文件,里面有配置framework的地方。
远程pod库
创建远程索引库
1.打开码云(他家私有库不要钱,github私有库要钱)
2.创建一个项目:名称是RCSpecs,私有的Objc
3.添加本地索引库
| 1 | pod repo add RCSpecs https://gitee.com/****/RCSpecs.git | 
4.查看本地索引库列表
| 1 | pod repo | 
5.将本地Pod库关联本地索引库
1.在码云上再创建一个项目名称是RCDownloader私有的
2.终端切换到RCDownloader工程根目录
3.提交代码
| 1 | git add . | 
4.修改本地spec文件
| 1 | s.homepage = 'https://gitee.com/htyh_manito_rencheng11/RCDownloader' | 
5.打 tag 0.1.0(跟s.version保持一致)
| 1 | git tag 0.1.0 | 
6.将修改的spec文件上传到远程仓库
| 1 | git commit -m "修改spec" | 
7.验证spec文件(警告可以忽略)
| 1 | pod spec lint | 
8.上传RCDownloader.spec到远程索引库
| 1 | pod repo push RCSpecs RCDownloader.podspec --allow-warnings | 
9.Podfile文件中增加source
| 1 | source 'https://gitee.com/htyh_manito_rencheng11/RCSpecs.git' | 
10.pod install引入
| 1 | # 这么写可以每次获取最新版本 | 
清除Pod缓存
- 移除项目目录 Pods 文件下的 xxx。
- 删除 CocoaPods目录缓存, 找到~/Library/Caches/CocoaPods/Pods/Release, 删除此目录。
- 点击Xcode -> Preferences -> Locations -> Derived Data点击下方的右箭头跳转到相应目, 删除此目录即可。
- 项目根目录执行pod repo update。
- 项目根目录执行pod install。