前言:创建私有 Spec Repo(也就是所有私有 pod 的仓库)
spec repo 是pods的一个索引,是所有公开的pods 的podspec文件的一个仓库,其实就是一个部署在服务器的Git仓库,当你使用CocoaPods 后它会被Clone到本地的~/.cocoapods/repos。这个仓库只存放podspec文件
步骤1:创建私有仓库
1、在git上创建私有仓库地址
测试私有仓库地址:http://10.20.7.105/Component-based/DSTestLib.git
2、查看本地索引是否建立
查看命令: pod repo list
查看本地索引是否建立3、如果本地索引未建立,在终端terminal执行命令 创建本地索引
首先 进入~/.cocoapods/repos目录 查看有一个master的目录,master就是cocoapod官网的索引源,现在要做的就是创建自己私有的Spec Repo.
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
$ pod repo add DSSpecs http://10.20.7.105/Component-based/DSSpecs.git
步骤2:创建 Pod 项目工程
1、创建 Pod 项目工程
# pod lib create [Project Name]
$ pod lib create MyLib
xxxxLib是你自己组件代码的名称
这个命令会自动生成一套组件代码工程测试代码,并且有Git管理
还会生成podspec索引文件.
会有以下提示,按照问题回答就可以 ,如果碰到创建失败的情况,更新 cocoaPods 再试试!
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide:
- https://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and click links to open in a browser. )
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 ]
> no
What is your class prefix?
> DS
最后一行私有库如果有前缀,填写前缀,例如: DS 如果没有前缀,填写: no
上面依次对应平台类型 、 语言 、 Demo 、 测试框架 、 界面测试 、 类前缀 等,填完之后Enter,会生成如下图的工程目录代码。
工程目录代码2、添加相关代码
├── MyLib
│ ├── Assets **存放资源文件!!!**
│ └── Classes
│ └── ReplaceMe.m **注意存放你自己实现的库相关代码!!!**
├── Example
│ **就是一个样例工程相关代码文件**
3、开发模式下测试 pod 打开Example工程目录下的podfile文件:
#pod 'MyLib', :path => '../' # 指定路径
pod 'DSTestLib', :path => '../' # 指定podspec文件
然后在 Example 工程目录下执行 pod update命令安装依赖,打开项目工程,可以看到库文件都被加载到Pods子项目中了 不过它们并没有在 Pods 目录下,而是跟测试项目一样存在于 Development Pods/MyLib 中,这是因为我们是在本地测试,而没有把 podspec 文件添加到 Spec Repo 中的缘故。测试库文件没有问题,接着我们需要执行第4步
4、提交Pod到代码仓库
注意:不是podspec索引仓库,是代码仓库在终端执行命令:
$ git add .
$ git commit -s -m "初始化MyLib 库"
$ git remote add origin http://10.20.7.105/Component-based/DSTestLib.git#添加远端仓库
$ git push origin master #提交到远端仓库
步骤3:提交podspec文件到私有Spec Repo仓库
1、配置podspec文件
配置podspec文件打开工程,查看DSTestLib.podspec文件
s.version 是pod的版本信息 这个后面打tag的时候用的到
s.summary 是简短的描述
s.source 是项目远程仓库的地址,这里不要用SSH,用HTTPS。
s.homepage 是项目主页地址 就是HTTPS地址后面去掉.git 就可以
s.source_files 是项目的文件 就是刚才替换ReplaceMe.m的那些文件
s.resource_bundles 是资源文件
s.frameworks 是用到了系统的哪些库 例如UIKit、Foundation
s.dependency 是用到哪些第三方库 比如AFNetworking 有多个就写多个s.dependency
s.public_header_files 项目的公共头文件,举个例子,当引入Masonry、YTKNetwork的时候 可以创建一个header文件,然后将#import “Masonry.h” #import “YTKNetwork.h”写入进去
podspec更多配置请参考: 官方文档
2、编辑完MyLib.podspec文件后,需要验证一下这个MyLib.podspec文件是否可用
$ pod lib lint // 如果终端输出这个信息,就说明验证通过,否则会提示错误信息,去修改
-> DSTestLib (0.1.0)
DSTestLib passed validation.
验证一下这个MyLib.podspec文件是否可用$ pod lib lint --verbose
$ pod lib lint --allow-warnings
$ pod lib lint --sources=https://gitee.com/yuyiios/YYSpecs.git
$ pod lib lint --use-libraries
–verbose 假如有error,查看报错信息
–allow-warnings 假如有warning,可以通过来忽略错误信息通过验证
–sources 假如这个私有库还依赖其他的私有库,一定要指定私有库的索引源(就是我上文说的YYSpecs的git地址)–sources=https://github.com/artsy/Specs,master
–use-libraries 如果用了第三方的framework或者静态库,要加上。
3、给pod 打上标签
$ git tag 0.1.0 #打上标签,这个很重要
$ git push 0.1.0#推送tag到远端仓库
到这里,成功提交到远程代码仓库,MyLib Pod 库就初步完成了代码实现,接下来就是重点了,将制作的私有库放到podspec索引仓库。
4、pod 检验
打完标签后,执行
$ pod spec lint
pod lib lint和pod spec lint的区别是前者只会检验本地的pod,后者是本地和远端都会检验,所以之前用到的--allow-warning --sources --use-libraries 等命令的这里都要带上。
5、推送至索引源仓库
远端和本地都校验通过后就要将DSTestLib.podspec推送至DSSpecs仓库中 成功后去~/.cocoapods/repos/DSSpecs有个DSTestLib目录 有个0.1.0的版本
~/.cocoapods/repos/DSSpecs 有个DSTestLib目录同时,索引库DSSpecsmaster分支会有DSTestLib的提交记录;
索引库DSSpecs master分支会有DSTestLib的提交记录#$ pod repo push [Repo名] [podspec 文件名字]
$ pod repo pushDSSpecsDSTestLib.podspec
$ pod repo pushDSSpecsDSTestLib.podspec--verbose --allow-warnings
可选参数同样包括上述的--source=,跟上面描述的一样,不再赘述。
这样创建私有库的工作就完成了。
最后验证一下
$ pod search DSTestLib
pod search DSTestLib新建一个空项目,导入私有库验证一下,这里一定要带上source就是DSTestLib所在索引源的远端地址。
导入私有库验证一下当遇到使用依赖库创建子类的时候会在 .h 文件中引入依赖库的头文件 而这样通常会在 执行 pod repo push 的时候发生错误。这个时候在 pod repo push 命令中添加 --use-libraries 参数可解决这个问题。而如果 .h 文件对依赖库中类的引用是非必须的, 也可以将 依赖库中类的声明放到 .m 中, 以解决这个错误。
参考:
COCOAPODS官网:https://guides.cocoapods.org/making/private-cocoapods.html
COCOAPODS官方配置 podspec文档:https://guides.cocoapods.org/syntax/podspec.html
网友评论