引言
年前在研究使用 CocoaPods 对 iOS 工程组件化,请教了各路大神,基本掌握了使用 CocoaPods 创建公有 Pod 库和私有 Pod 库方法。年后,打算正式将项目进行组件化重构,为了方便整理和学习就整理了这篇文章。
创建公有 Pod 库或者私有 Pod 库,实际上原理是一样的,都是基于 git 服务和 repo 协议,不一样的是,两者的版本索引查询方式不一样,公有库的 podspec 由 CocoaPods/Specs 管理,而内部私有使用的 pod 库需要自己建立一个仓库来管理 podspec。
实用:开源公有库
例子: 我有封装过一个工具CollectionIndexTools,CollectionIndexTools 可以给 Collection 添加一个类似 TableView 右侧的索引条,我想通过 Podfile 中添加 pod 'CollectionIndexToolsLib' 即可使用.
1.注册 CocoaPods 账户信息
想要创建一个开源 pod 库,首先我们需要注册 CocoaPods, 这里使用 trunk 方式,作为一个 iOS 开发人员你一定安装了 CocoaPods,那么只需要在终端执行:
pod trunk register 邮箱地址 '用户名' --verbose
这里我们一般使用 Github 邮箱和用户名,然后在你的邮箱中会收到确认邮件,在浏览器中点击链接确认即注册成功,成功之后可以终端执行:
pod trunk me
查看自己的注册信息,以后当你有了自己的开源Pod库,也可以用此方式随时查看自己发布过的Pods:
2.创建共享库文件并上传到公有仓库
共享库需要三个必不可少的部分:
- 1.共享文件夹(文件夹存放着你要共享的内容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路径及文件类型);
- 2.LICENSE文件(默认一般选择MIT);
- 3.库描述文件.podspec(本库的各项信息描述, 需要提交给CocoaPods, pod通过这个文件查找到你共享的库, .podspec文件的格式见第3点).
这一步分两种场景:
场景一:如果你已经有了现成的想要共享的文件,你只需要满足上面三个部分,即可上传到公有仓库即可继续其他的步骤;
场景二:你想要创建一个全新的工程去做自己的共享, 可以使用终端命令:
pod lib create CollectionIndexToolsLib
需要输入一些模板参数:
Cocoapods 会自动生成一个模板项目,目录结构:
CollectionIndexToolsLib ├── Example #demo APP │ ├── CollectionIndexToolsLib │ ├── CollectionIndexToolsLib.xcodeproj │ ├── CollectionIndexToolsLib.xcworkspace │ ├── Podfile #demo APP 的依赖描述文件 │ ├── Podfile.lock │ ├── Pods #demo APP 的依赖文件 │ └── Tests ├── LICENSE #开源协议 默认MIT ├── Pod #组件的目录 │ ├── Assets #资源文件 │ └── Classes #类文件 ├── PodCollectionIndexToolsLib.podspec #第三步要创建的podspec文件 └── README.md #markdown格式的README
3.编辑.podspec文件
以CollectionIndexToolsLib.podspec为例:
Pod::Spec.new do |s| s.name = 'CollectionIndexToolsLib' s.version = '0.1.0' s.summary = 'Custom IndexTools similar to TableViews index bar' s.description = <<-DESC I believe you must have thought about adding an index like Table View to Collection View. I will give you one today. DESC s.homepage = 'https://github.com/ReverseScale/CollectionIndexToolsLib' s.license = 'MIT' s.author = { 'ReverseScale' => 'reversescale@icloud.com' } s.source = { :git => 'https://github.com/ReverseScale/CollectionIndexToolsLib.git', :tag => s.version.to_s } s.ios.deployment_target = '8.0' s.source_files = 'CollectionIndexToolsLib/Classes/**/*' s.requires_arc = true end
理论上前面的设置就可以通过验证,下面是注释参照:
Pod::Spec.new do |s| s.name = "PodTestLibrary" #名称 s.version = "0.1.0" #版本号 s.summary = "Just Testing." #简短介绍,下面是详细介绍 s.description = <<-DESC Testing Private Podspec. * Markdown format. * Don't worry about the indent, we strip it! DESC s.homepage = "https://coding.net/u/wtlucky/p/podTestLibrary" #主页,这里要填写可以访问到的地址,不然验证不通过 # s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" #截图 s.license = 'MIT' #开源协议 s.author = { "wtlucky" => "wtlucky@foxmail.com" } #作者信息 s.source = { :git => "https://coding.net/wtlucky/podTestLibrary.git", :tag => "0.1.0" } #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' #多媒体介绍地址 s.platform = :ios, '7.0' #支持的平台及版本 s.requires_arc = true #是否使用ARC,如果指定具体文件,则具体的问题使用ARC s.source_files = 'Pod/Classes/**/*' #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置 s.resource_bundles = { 'PodTestLibrary' => ['Pod/Assets/*.png'] } #资源文件地址 s.public_header_files = 'Pod/Classes/**/*.h' #公开头文件地址 s.frameworks = 'UIKit' #所需的framework,多个用逗号隔开 s.dependency 'AFNetworking', '~> 2.3' #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency end
编写完成后, 我们需要验证.podspec文件的合法性, 这里需要终端cd到.podspec文件所在文件夹, 执行: 忽视警告:--allow-warnings
pod lib lint CollectionIndexToolsLib.podspec
如有警告或者错误请重新检查你的编写正确性,如果没有问题会出现:
-> CollectionIndexToolsLib (0.1.0) CollectionIndexToolsLib passed validation.
4.打tag, 发布一个release版本
一切准备就绪后, 我们需要在你的git仓库里面存在一个与.podspec文件中一致的version, 这里你可以在你的git仓库中的releases一项去手动发布, 也可以在当前文件夹下使用终端命令:
git tag -m '🔖:Releasing tags.' '0.1.0' git push --tag #推送tag到远端仓库
成功之后即可在你的 releases 里面看到这个 tag 的版本.