前言
在我们想要发布自己的pod文件时,需要通过Pod Lib Create
指令去创建pod,然后添加文件,测试后发布.
这次我们来探究下Pod Lib Create
到底是如何实现的,该指令帮我们做了什么呢?
pod lib create
通过pod lib create
创建一个pod,分析创建流程
当执行pod lib create ProjectName
时,其实是下载了一个pod模板,然后在内部通过更改.podspec文件的配置定制化自己的pod,
pod lib create ProjectName
其实使用了默认参数,补全的话pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git
,
执行:
分析
Cloning
https://github.com/CocoaPods/pod-template.git
intoProjectName.
创建一个和指定的项目名相同的文件夹,然后将pod-template克隆下拉Configuring TemplateDemo template
对当前项目进行配置
pod-template是cocoapods官方提供的一个模板,做了什么呢
pod-template
看一下文件路径
Configuring TemplateDemo template做了什么呢?
先找当前路径下configure
文件,文件夹内容
#!/usr/bin/env ruby
$current_dir = File.dirname(File.expand_path(__FILE__))
Dir[File.join($current_dir, "setup/*.rb")].each do |file|
require_relative(file)
end
pod_name = ARGV.shift
Pod::TemplateConfigurator.new(pod_name).run
根据上述命令:
可得知,遍历并通过require_relative(file)
获得访问在setup文件夹下寻找以.rb
为后缀名的文件的权限,
然后Pod::TemplateConfigurator.new(pod_name).run
运行TemplateConfigurator
文件的内容
看一下setup下面有什么?
在
TemplateConfigurator
文件内,配置了在终端的显示样式,并通过
@message_bank = MessageBank.new(self)
@message_bank.show_prompt
@message_bank.show_prompt
等方法,引用MessageBank
内的命令,具体不再赘述,感兴趣的可以到ruby
文件去查看.
延伸
我们可以定义自己的模板,仿照pod-template
,配置configure
文件,但是相应的参数可以在内部之间定义好,就不需要每次pod lib create
时填写各种参数.
执行结果
文件夹目录结构如下
MyLib
├── .travis.yml
├── _Pods.xcproject
├── Example
│ ├── MyLib
│ ├── MyLib.xcodeproj
│ ├── MyLib.xcworkspace
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ └── Tests
├── LICENSE
├── MyLib.podspec
├── Pod
│ ├── Assets
│ └── Classes
│ └── RemoveMe.[swift/m]
└── README.md
-
Pod
用来存放添加的类 -
RemoveMe
示例类,可以直接删除
注意: 基于自定义pods的实现细节,在向Pod/Classes
或者Pod/Assets
文件增加类或者更新podspec
文件时,需要运行pod install
或者pod update
发布私有库
之前的开发和测试就绪后,就要准备发布了.
-
pod lib lint
或pod spec lint
:首先要检测Podspec
的正确性
pod lib lint
不会连接网络,而是检查文件格式
pod spec lint
会读取线上的repo
并检查相应的tag
-
pod repo push SPEC_REPO *.podspec --verbose
发布po