目标:使用CocoaPods创建私有Spec Repo管理者【1】,来管理通用组件【2】。
前提:日常开发中,不同项目中都会用到一些通用方法,我们就可以封装成通用的组件,就可以通过Cocoapods来引入开发,十分方便。
下面,我就把自己写好的 UIColor+WPColor 这个分类制作成组件,通过pod来引入。
一、创建私有Spec Repo管理者(~/.cocoapods/repos)
1、我在开源中国https://gitee.com里创建一个WPSpecRepo仓库(你也可以在Coding或者Gitlab等地方创建)。
2、创建Spec Repo:
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
pod repo add WPSpecRepo https://gitee.com/aiziyoupeng/WPSpecRepo.git
此时如果成功的话进入到 ~/.cocoapods/repos 目录下,就可以看到WPSpecRepo这个目录了。至此第一步创建私有Spec Repo完成。
总结:我们必须创建这个仓库管理者,才能管理各个组件,它是一个大集合、pods容器。
二、创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址
1、还是在开源中国https://gitee.com里,再创建一个WPTestColor仓库,用来提交UIColor+WPColor代码的。
2、切换到一个目录,可以切换到桌面,在桌面上创建WPTestColor组件库:
pod lib create WPTestColor
之后终端会问你几个问题,按你需要回答就行了,如下图:
3、把UIColor+WPColor文件放入Pod/Classes中(里面有个ReplaceMe.m替换掉,添加文件这个步骤其实可以在全部配置完毕之后再进行,我就直接添加进去了)
4、切换到Example文件夹下,执行pod update
命令,如果网慢的话可以执行pod update --verbose --no-repo-update
命令。
注意:这里需要注意的是每当你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新执行一遍pod update命令。
5、记得再把目录切回到上一级目录WPTestColor目录下,把代码提交到远程仓库:
git add . #添加文件
git commit -s -m "Initial Commit of Library" #把代码提交到本地
git remote add origin https://gitee.com/aiziyoupeng/WPTestColor.git #关联仓库
注意:git remote -v 命令可查看关联情况,如下图代表关联成功
git pull origin master --allow-unrelated-histories #养成良好习惯,push代码之前先pull代码
注意:此处若不加--allow-unrelated-histories可能会有问题
解决冲突(如无冲突请忽略):我这在pull命令的时候产生冲突是因为两端都有Readme文件,所以冲突了,如下图。
解决完冲突之后提交代码:
git add . #添加文件
git commit -s -m "解决冲突" #把代码提交到本地
git push origin master #把本地代码提交到远端仓库(如无冲突直接执行此push命令,不需要再add和commit了)
因为podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag:
git tag -m "first release" 0.1.0
git push --tags #推送tag到远端仓库
6、关联好仓库并提交完代码后,就可以开始编辑WPTestColor中的podspec文件了,它是一个Ruby的文件,可以用Sublime软件打开,把podspec文件修改成下面这样就可以了。
Pod::Spec.new do |s|
s.name = 'WPTestColor' #名称
s.version = '0.1.0' #版本号
s.summary = 'A Test Demo' #简短介绍
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = 'The Category of Color' #详细介绍
s.homepage = 'https://gitee.com/aiziyoupeng' #你的主页,需要是有效地址
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'peng' => '[email protected]' }
s.source = { :git => 'https://gitee.com/aiziyoupeng/WPTestColor.git', :tag => s.version.to_s } #仓库地址
# s.social_media_url = 'https://twitter.com/'
s.ios.deployment_target = '8.0' #支持的iOS系统版本
s.source_files = 'WPTestColor/Classes/**/*'
# s.resource_bundles = {
# 'WPTestColor' => ['WPTestColor/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
s.frameworks = 'UIKit', 'MapKit' #所需的framework,多个用逗号隔开
s.dependency 'AFNetworking', '~> 2.3' #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
end
7、编辑完并保存podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过xcode的WARNING是可以存在的,验证需要执行一下命令:
pod lib lint
验证时我这里报了2个错误,如下图,
我们先解决第二个,说是项目默认的是Swift3.0,需要配置成我们需要的版本,执行:
echo "3.0" > .swift-version #版本根据实际情况自己配置
再次验证:
pod lib lint
还有1个错误,如下图,报依赖库AFN的警告,直接用终端提供给我们的方法--allow-warnings忽略掉就行了。
之后,再一次验证
pod lib lint --allow-warnings #添加忽略命令进行验证
如下出现下图这个,就说明校验成功了:
8、向Spec Repo提交podspec
pod repo push WPSpecRepo WPTestColor.podspec --allow-warnings #前面是本地Repo名字 后面是podspec名字(如果你上一步验证的时候有--allow-warnings,那么这个提交命令也要加--allow-warnings)
完成之后这个组件库就添加到我们的私有Spec Repo中了,可以进入到~/.cocoapods/repos/WTSpecs目录下查看
再去看我们的Spec Repo远端仓库,也有了一次提交,这个podspec也已经被Push上去了。
至此,我们的这个组件库就已经制作添加完成了,使用pod search WPTestColor
命令就可以查到我们自己的库了。
⚠️注意:如果搜索不到,请尝试如下方法,
先确认你本地仓库上面确实有你新创建的组件库,这时候可以先删除search缓存文件,命令为:rm ~/Library/Caches/CocoaPods/search_index.json
,删除后从新执行pod search WPTestColor
三、如何使用WPTestColor
如下图,在需要使用项目工程的Podfile文件中添加source来源,才能正确的集成你的私有库。在团队开发中,别人在你配置好并提交代码后,才能clone下来你的私有库。
以上为使用CocoaPods创建私有仓库的正确姿势,如在过程中遇到的问题,请随时留言交流。
==========================================================
补充:如何更新Podspec文件:
1、代码更新:
git add .
git commit -m '更新描述'
git push origin master
2、版本更新(版本更新 这一步非常重要,为更新索引库做准备)
git tag -a '新版本号' -m '注释'
git push --tags
3、修改Sepc
打开你的xx.podspec文件,将原本的版本号改为0.2.0,与刚刚的tag保持一致。
(如果代码确定没有问题的话,就不需要pod lib lint,直接执行第4步)
4、更新索引库
pod repo push 索引库名称 xxx.podspec --allow-warnings
5、别的电脑可以用pod repo update
命令来使用仓库 (也可以用pod repo update 仓库名
来更新指定仓库)
备注:
podspec转podspec.json格式:pod ipc spec LibraryName.podspec >> LibraryName.podspec.json