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
。