在iOS项目开发中,我们制作自己的远程私有库或者开源库,然后用pod方式来安装或者移除比我们手动去删除或者集成更加的简单而且也不容易出错,管理起来更加方便。我们一般选择在github或者gittee、gitLab上创建自己的开源库或私有库,开源库和私有库原理是一样的,本文是主要关于私有库的制作和后期管理的。
一、制作自己的私有库
如果我们电脑里面安装了cocoaPod,那么在本地电脑的用户目录下会有隐藏文件夹.cocoapods/repos, 查看隐藏文件夹通过command + shift + .可以看到自己电脑里面包含的cocoapod官方索引库和自己的索引库(如果有的话)
我们平常去pod repo update更新pod库时就是在更新这里面的索引库, 如果你看不到自己制作的索引库,那么我们接下来开始制作一个!
这里我要解释两个名词:索引库和代码库
代码库:是用来存放代码的,可以放多个功能模块,或是组件,但是最好是放一个单一模块组件,这样结构比较清晰.比如AFN,SDWebImage...
索引库:顾名思义是用来存放索引的,就是存放代码库索引的(也就是xxx.podspec)。在我们项目中使用pod install 命令下载库的时候是通过索引库中的xxx.podspec文件里的s.source所指向的地址来找到具体的库
1. 创建自己的远程索引库
我们一般选择创建一个私有库,这里使用gitee网站为远程库为例:
下面的是我已经创建好的索引库(重点:索引库是用来放d)
私有库自己命名,比如:xxxxSpec,这个库专门用来放索引文件的,可以放项目相关的多个私有库的索引文件,创建好接下来是将远程私有库拷贝到本地索引库做关联(做关联这一步让我们可以命名自己的本地索引库).
pod repo add xxxxSpec http://gitee.***.***/xxx/xxxspecs.git
这一步下来我们可以使用pod repo
命令来查看是否已经在本地创建,或者直接在上述文件夹中查看。
2. 创建存放代码的远程仓库
远程仓库创建的方式跟上面索引库一样,名字比如为ZLFastUI,接下来创建对应的pod组件库.
pod lib create ZFSException // 回车之后会让你回答问题
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> ObjC
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> Yes
What is your class prefix?
> ZFS
上面步骤之后会帮你创建一个文件夹,里面包含了样板工程 + 类库文件夹 + ZFSException.podspec.
3. 将自己的文件放到上图ZFSException/Classes/中
在Example中打开自己的工程,执行pod install, 在Example中使用运行没问题了,接下来编辑好ZFSException.podspec文件
Pod::Spec.new do |s|
s.name = 'ZFSException'
s.version = '0.0.1'
s.summary = '测试组件化的ZFSException'
# 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 = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://gitee.com/zhou_fu_sheng/ZFSException'//// 库的介绍主页
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'zhoufusheng' => '[email protected]' }
s.source = { :git => 'https://gitee.com/zhou_fu_sheng/ZFSException.git', :tag => s.version.to_s }// 这里放的是具体的私有代码仓库的地址,不是索引仓库的地址
# s.social_media_url = 'https://twitter.com/'
s.ios.deployment_target = '9.0'
s.source_files = 'ZFSException/Classes/**/*'
end
上述填好之后进行下一步验证podspec文件有没有填对, 回到最外层的ZFSException文件夹
cd 拖最外层文件夹ZLFastUI到这里按回车
pod lib lint --allow-warnings // 执行这行命令行检查
如果检查正确了会提示
ZFSException passed validation.
4. 将pod生成的lib库提交到远程
命令行现在还是在最外层的,接下来执行命令行
git remote add origin https://gitee.com/smile_dandy/zlfast-uikit.git // 将lib库添加到远程私有库,这个远程库地址是第二步自己创建的那个
git add .
git commit -a -m "第一次提交 版本为0.0.1"
git push -u origin master
git tag 0.0.1 // 这里要跟podspec文件中的s.version保持一致
git push --tag(将tag提交到远程)
上述命令行完成后,代码就已经成功上传到远程代码私有库中了(也就是本地的生成的代码库和远程的进行了关联),可以去网站查看下提交记录。接下来把索引添加到索引私有库:
pod repo push ZFSTestSpec ZFSException I.podspec --allow-warnings // 前面的那个是自己在第一步创建的本地的索引库,后面的那个是lib中的podspec文件
这一步做了两个操作:一个是将其推送到私有的远程索引仓库,可以去网站对应的索引仓库中查看;另一个是将其 copy 到对应的本地索引仓库(也就是说把ZFSException),这个可以去目录:/Users/admin/.cocoapods/repos/ZFSTestSpec 下查看到对应的文件夹。
如果都成功了,可以使用pod search ZFSException搜索到自己制作的。
二、在工程中使用自己制作的私有库
在使用时Podfile文件的写法:在顶部写上source源的地址,如:
source 'https://gitee.com/xxxx/xxxxSpec.git'// 这里是放自己私有库的索引库地址的,不要放私有库代码地址去了
source 'https://github.com/CocoaPods/Specs.git'// 使用了私有的,那么这个官方的也要加上,如果不加上,那么在github上的三方库会pod install不成功!
pod 'ZFSException', '~> 0.0.1'
执行pod install
二、私有库更新
1.改好类库文件代码,执行没有错误之后,修改ZFSException.podspec文件,修改s.version = '0.2.2'(后面执行git push tag 的tag值要喝这个verson相同)
git add .
git commit -a -m "更新pod库"
git push -u origin master
git tag 0.2.2 // 这里要跟podspec文件中的s.version保持一致
git push --tag(将tag提交到远程)
pod repo push ZFSTestSpec ZFSException I.podspec --allow-warnings