Pod创建
Step 1
使用pod lib create
来创建一个完整的pod
$ pod lib create MyLibrary
如果要使用自己的
pod-template
可以在后面加上--template-url=URL
根据提示选择自定义选项
Step 2 Objc or Swift
第一个问题就是想要构建一个什么语言的pod,对于两个选择,CocoaPods都会将你的库设置为一个框架
What language do you want to use?? [ Swift / ObjC ]
Step 3 是否创建一个Demo
该模板将会为你的库生成Xcode项目
Would you like to include a demo application with your library? [ Yes / No ]
Step 4 选择一个测试框架
作为开源库稳定性很重要。Objctive-C还有两个流行的测试框架:
- Specta
- Kiwi
当你没有办法做选择的时候,官方推荐使用Specta
Which testing frameworks will you use? [ Specta / Kiwi / None ]
两个框架最主要的区别在于:Kiwi是Stubs / Mocks / Expectations的一体化方法,而Specta/Expecta是通过不同Podspces的模块化方法。在MyLib-Tests.pch中包含了测试框架所必要的设置,因此不需要将它包含在每个文件中。
Swift值提供了一个选择Quick/Nimble
Step 5 View-based Testing
基于快照的测试是一种智能方法,可以验证视图上不同操作的结果,使用FBSnapShotTestCase。
Would you like to do view based testing? [ Yes / No ]
Step 6 Prefixs
项目前缀
What is your class prefix?
文件树状图
MyLibrary
├── Example
│ ├── MyLibrary
│ ├── MyLibrary.xcodeproj
│ ├── Podfile
│ ├── Pods
│ └── Tests
├── LICENSE
├── MyLibrary
│ ├── Assets
│ └── Classes
├── MyLibrary.podspec
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
文件:
- _Pods.xcodeproj - 项目符号链接
- LICENSE - 默认使用MIT License
- MyLib.podspec - 项目使用的podspec
- README.md - markdown文档
文件夹:
- MyLibrary - 放自己库的类文件
- Example - 生成的Demo和测试包
- 编辑Podspec元数据和README
- 如果在选择生成Demo的时候没有选择Yes,将不会生成Example
- 测试框架
- Development Pods部分,也可以在自己的库中直接修改
- 用来初始化项目的Pods
新增文件
删除ReplaceMe.m
,新增DPPRootObject
,
添加AFNetworking 和 微信第三方依赖
在Classes
文件夹下创建一个3rdLibraries
文件夹,用来放微信第三方资源文件
修改.podsepc
文件
s.source_files = 'MyLibrary/Classes/*.{h,m}', 'MyLibrary/Classes/3rdLibraries/*.{h}'
s.vendored_libraries = 'MyLibrary/Classes/3rdLibraries/*.{a}'
s.frameworks = 'SystemConfiguration','CoreGraphics','CoreTelephony','Security','CoreLocation','JavaScriptCore'
s.libraries = 'iconv','sqlite3','stdc++','z'
参数说明:
* vendored_libraries:第三方.a文件
* frameworks:该pod依赖的系统Framework
* libraries:该pod以来的系统Lirary
添加AFNetworking依赖
s.dependency 'AFNetworking', '~> 3.2.1'
重新加载下Pod
$ pod install
在viewController中尝试导入头文件,看报不报错
制作subspec
例如AFNetworking中的subspec
,也就是说我们在使用AFNetworking的时候不用下载全部的组件,喜欢用哪个就下哪个
在Classes
文件夹下,创建一个DPPSub
文件夹,用来存放子模块文件,创建DPPChild类
修改.podspec
文件,新增如下代码
s.subspec 'DPPSub' do |cs|
cs.source_files = 'MyLibrary/Classes/DPPSub/*.{h,m}'
end
DPPSub:subspec的名称
cs:变量名称,拥有spec的所有属性
重新加载pod
$ pod install
运行成功,更新podspec版本号,重新打tag,推到仓库
搜索下仓库
$ pod search MyLibrary
私有库依赖私有库
重新创建一个Pod,步骤与上面操作相同,修改podspec
文件,添加
s.dependency 'MyLibrary', '0.2.0'
然后检查
$ pod lib lint
报错!因为没有指定私有库的source,因为私有库依赖AFNetworking,所以也需要指定下公有库的source
$ pod lib lint --sources=https://github.com/DPP-iOSer/DPPRepos.git,https://github.com/CocoaPods/Specs.git --allow-warnings
检查成功,将spec文件push到私有spec仓库中
push时默认会检查spec文件,所以也需要指定source
$ pod repo push DPPRepos DPPDependency.podspec --sources=https://github.com/DPP-iOSer/DPPRepos.git,https://github.com/CocoaPods/Specs.git --allow-warnings
Development Pods
Development Pods和普通的CocoaPods不一样,在这里是符号链接文件,在这里直接修改会直接修改原文件。引用时使用#import
的格式
当添加新的或者已存在的
Pod/Classes
或者Pods/Assets
或者更改podspec
时,需要重新pod install
或者pod update
增加文件
部署自己的库
首先检查podspec
lint正确性,可以使用两种方式: pod lib lint
或者 pod spec lint
,两者的不同之处:
- pod lib lint:不需要网络
- pod spec lint:需要检查外部的repo和关联的tag
如果要发布到
trunk
不能存在任何CocoaPods的警告,但是Xcode警告是可以存在的
1. 部署到trunk
1. 注册CocoaPods账号
想创建开源的Pod库,就要注册一个CocoaPods账号,我们使用终端注册,email
用Github
邮箱
$ pod trunk register [email protected] 'DPP-iOSer'
等到终端出现下面文字,CocoaPods会发一个确认邮箱到你的邮箱上,登入邮箱进行确认
注册成功!
2. trunk me
确认后在终端中输入:
$ pod trunk me
看到如下注册信息:
3. 发布.podspec
将.podspec
公布到公有的specs上
$ pod trunk push DPPCode.podspec
成功后显示如下:
可以通过上面的URL:https://cocoapods.org/pods/DPPCode进入Pods查看自己的仓库信息
查询仓库:
$ pod search DPPCode
2. 部署到自己私有repo
1. 创建版本仓库
将远程的私有版本仓库添加到本地
$ pod repo add DPPRepo https://github.com/DPP-iOSer/DPPRepo.git
在Finder下查看~/.cocoapods/repos/
,会发现多了一个DPPRepo
的版本存储仓库
2. 创建代码库
创建步骤和上述创建版本仓库一样,将仓库clone到本地* 1、创建.podspec
,代码仓库的pod描述文件
$ pod spec create DPPCode
2、按需修改
.podspec
文件3、验证仓库配置是否正确
$ pod lib lint
可以添加--allow-warnings
允许警告
$ pod lib lint --allow-warnings
验证成功后显示如下:
4、项目代码推到远程代码仓库 & Tag
5、将描述文件推到版本库
$ pod repo push DPPRepo DPPCode.podspec
验证且推送成功显示如下:
并且在~/.cocoapods/repos/DPPRepo/
文件夹发现新增的仓库描述信息
添加完成后我们就可以在pod中搜索
$ pod search DPPCode
- 6、私有仓库的使用
使用私人pod库的时候,需要在podfile
中添加
source "https://github.com/DPP-iOSer/DPPRepo.git"
注意是版本库的地址,而不是代码库的地址
如果还使用了公有库的pod,需要把公有库的仓库加上
source "https://github.com/CocoaPods/Specs.git"
最后Podfile
文件如下:
source "https://github.com/CocoaPods/Specs.git"
source "https://github.com/DPP-iOSer/DPPRepo.git"
platform :ios, '8.0'
target 'DPPDemo' do
use_frameworks!
pod 'DPPCode'
pod 'AFNetworking', '~> 3.2.1'
end
- 7、
pod install
看到代码已经整合到项目中, Done!
- 备注
若存在如下情况:
1、
$ pod search DPPCode
[!] Unable to find a pod with name, author, summary, or description matching `DPPCode`
删除 search_index.json
文件并且重新pod setup
$ rm ~/Library/Caches/CocoaPods/search_index.json
$ pod setup
参考
CocoaPods公有仓库的创建
CocoaPods 私有仓库的创建(超详细)
Getting setup with Trunk