什么是组件化开发,我就不详细介绍了,网上可以找到很多资料.IOS-组件化架构漫谈这篇文章就比较全面的介绍了组件化开发的由来及方案,不了解的小伙伴可以进去看一下.
本文主要讲的是iOS组件化开发中如何使用CocoaPods创建私有代码库,每个代码库就是一个独立的项目,都是一个独立的组件,可供在不同的项目中集成使用.如有不对之处,欢迎大家指正交流.
1.创建远程索引库
通过GitHub来创建远程索引库来存放各个组件的podspec文件(和cocoapods下的远程索引库一样存放的是各种第三方库的podspec文件),创建方式和创建远程代码库一样
2.创建本地索引库并与远程索引库进行关联
本地索引库就是用来存放本地索引文件(即podspec文件)的库
打开终端pod repo来查看当前有哪些本地索引库(如果你之前没有创建过,应该只有一个master)注意:pod repo remove 本地索引库名 可以删除多余的本地索引库
也可以直接通过finder文件->前往文件夹 ~/.cocoapods/repos/ 查看
pod repo add 本地索引库名 远程索引库的地址 创建本地索引库并和远程索引库关联(注:本地索引库的名字建议和远程索引库起的名字一样)
然后可以通过上面讲过的查看本地索引库的方法查看
3.GitHub上创建远程组件代码库(存放模块组件代码的仓库)
4.创建本地组件代码库
cd 到存放本地组件代码库的文件夹下,然后pod lib create 组件名 创建本地组件代码模块库 组件名建议和远程代码库名一致(注意:根据自身需求对下面的提示信息做选择)
创建本地组件代码模块库成功之后xcode会自动打开创建的组件代码库的测试项目(Pods下面Development Pods是存放本地组件代码库的,如果有Pods的话是存放远程第三方组件库的)
Show in Finder ReplaceMe.m文件如图
删除ReplaceMe.m文件并导入组件代码文件
将文件夹中组件代码导入到项目中
生成的测试项目中Podfile文件
cd到Example文件夹,执行pod install进行本地组件代码库的集成,然后编译成功后在测试项目中测试(如果这个本地代码库依赖了远程第三方库如AFNetworking等和本地的其他组件代码库,需要在Podfile文件添加这些库作为该组件的依赖库,然后重新pod install并进行测试)
如果Podfile文件中不注释use_frameworks!的话在测试项目中测试组件代码时会出现文件找不到的问题,建议先注释掉测试,不行的话在打开use_frameworks!(关于use_frameworks!的问题可以参考这里).注意每次修改Podfile文件时都要保存该文件并重新pod install
中间可能遇到的报错:ld: library not found for -lModuleB clang: error: linker command failed with exit code 1 (use -v to see invocation) 解决办法:Build Settings -> Build Active Architecture Only设置为yes(正常后可以重新设置为原样)
5.编译和测试通过后需要修改podspecs索引文件
6.将本地代码库提交到远程代码库并打tag
cd到创建的本地组件代码文件夹,如图
然后依次执行下面命令:
git add . 或者git add all
git commit -m “xxx” (xxx为提交备注信息)
git remote add origin 远程代码仓库地址
git push origin master 或者 git push -u origin master(一般第一次提交用)
git tag 版本号/git tag -a 版本号 -m “version 版本号”(注:这里的版本号必须和podspec里写的版本号一致)
git tag 查看版本号是否提交成功
git push - -tags
7.验证podspec索引文件
命令执行pod spec lint --allow-warnings 验证podspec索引文件(注:pod lib lint是检索本地索引文件,pod spec lint 是本地和远程库同时检索)
8.将索引文件提交到本地索引库和远程索引库
验证通过后,命令执行pod repo push 本地索引库名 索引文件名 --verbose --allow-warnings 将索引文件提交到本地索引库和远程索引库.成功之后可以通过上面图3的方式查看到本地索引库中这个组件的索引文件,当然远程索引库也可以查看得到
9.创建一个工程集成并测试该组件
创建并修改Podfile文件,把ModuleB组件pod进来(注:需要在Podfile中指定组件远程索引库地址,如果不指定默认会从master的索引库查找就会报找不到组件)
保存并执行pod install,执行成功后就可以在项目中看到该组件,最后引用并测试组件
10.组件的维护更新
这里只说一下简单的流程:修改或添加代码到本地代码库->上面讲过的第六步,然后一直到第八步
11.遇到的一些问题
a.组件依赖公有库或私有库,在podspec文件中s.dependency添加依赖库,如下
b.组件依赖私有库时,在验证podspec文件时会出现错误,如下(下图是借鉴文末参考文章中图片)
因为 pod spec lint校验podspec文件时会到被依赖私有库的远程podspec库查找依赖库的信息,默认只会到官方specs库(即cocoapods/specs)校验,此时需要指定被依赖私有库的远程specs库去校验。(https:// github.com /FFComment /FFSpecs这个远程私有索引库地址不需要添加.git,可能会报错)所以在用pod spec lint校验时得如下指定被依赖库的远程specs库地址和官方默认的specs库地址即可
pod spec lint 文件名.podspec --sources='https://github.com/FFComment/FFSpecs,https://github.com/CocoaPods/Specs.git' --allow-warnings