使用 CocoaPods 对公有库开源和私有库组件(上)

简介: 使用 CocoaPods 对公有库开源和私有库组件(上)

引言


年前在研究使用 CocoaPods 对 iOS 工程组件化,请教了各路大神,基本掌握了使用 CocoaPods 创建公有 Pod 库和私有 Pod 库方法。年后,打算正式将项目进行组件化重构,为了方便整理和学习就整理了这篇文章。


image.png


创建公有 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:


image.png


2.创建共享库文件并上传到公有仓库


共享库需要三个必不可少的部分:


  • 1.共享文件夹(文件夹存放着你要共享的内容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路径及文件类型);
  • 2.LICENSE文件(默认一般选择MIT);
  • 3.库描述文件.podspec(本库的各项信息描述, 需要提交给CocoaPods, pod通过这个文件查找到你共享的库, .podspec文件的格式见第3点).

这一步分两种场景:


场景一:如果你已经有了现成的想要共享的文件,你只需要满足上面三个部分,即可上传到公有仓库即可继续其他的步骤;


场景二:你想要创建一个全新的工程去做自己的共享, 可以使用终端命令:


pod lib create CollectionIndexToolsLib

需要输入一些模板参数:


image.png


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 的版本.


目录
相关文章
|
缓存 资源调度 运维
从零到一搭建私有NPM服务器
从零到一搭建私有NPM服务器
1416 0
从零到一搭建私有NPM服务器
|
安全 NoSQL 关系型数据库
使用cnpm搭建企业内部私有NPM仓库
cnpm是企业内部搭建npm镜像和私有npm仓库的开源方案。它同时解决了现有npm架构的一些问题。
868 0
使用cnpm搭建企业内部私有NPM仓库
|
9月前
|
Go 网络安全 开发工具
在golang中引入私有git仓库的pkg包?引入私有Git仓库的包:在Go语言项目中轻松实现
在golang中引入私有git仓库的pkg包?引入私有Git仓库的包:在Go语言项目中轻松实现
122 0
在golang中引入私有git仓库的pkg包?引入私有Git仓库的包:在Go语言项目中轻松实现
|
8月前
使用Sinopia部署私有npm仓库
使用Sinopia部署私有npm仓库
92 0
|
12月前
|
API 开发工具 C#
10分钟学会VS NuGet包私有化部署
10分钟学会VS NuGet包私有化部署
|
12月前
|
开发工具 git 索引
CocoaPods私有库搭建
如何创建一个私有的Spec Repo和Pod
152 0
|
Linux 网络安全 开发工具
通过nexus3部署公司内部的私有npm仓库:从安装到配置、从发布包到测试包的一条龙服务
登录时使用默认用户admin,密码不知道就需要找默认的,点击Sign in时会提示你路径,这里我是这样查的,在linux服务器上输入以下命令
1696 0
|
运维 供应链 前端开发
化繁为简,如何快速实现企业级私有 npm 包依赖管理服务?
化繁为简,如何快速实现企业级私有 npm 包依赖管理服务?
103 0
|
PHP 开发工具 git
如何将自己的扩展发布到Composer包仓库?具体步骤是怎样的?底层原理是什么?
如何将自己的扩展发布到Composer包仓库?具体步骤是怎样的?底层原理是什么?
249 0
|
JavaScript Shell API