- 准备工作
- 添加远程
- 创建Pod项目工程文件
- 向Pod文件夹中添加库文件和资源,并配置podspec文件
- 提交podspec
标签(空格分隔): 教程 PodSpec CocoaPods
安装CocoaPods
创建私有Spec Repo
先来说第一步,什么是Spec Repo?它是所有的Pods的一个索引,
就是一个容器,所有公开的Pods都在这个里面,它实际是一个Git仓库remote端在GitHub上,但是当你使用了Cocoapods后它会被clone到本地的~/.cocoapods/repos目录下,可以进入到这个目录看到master文件夹就是这个官方的Spec Repo了。这个master目录的结构是这个样子的
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
因此我们需要创建一个类似于master的私有Spec Repo。首先创建一个 Git仓库,这个仓库你可以创建私有的也可以创建公开的,需要注意的就是如果项目中有其他同事共同开发的话,你还要给他这个Git仓库的权限。这里我们使用阿里git:
http://gitlab.alibaba-inc.com
创建完成之后在Terminal中执行如下命令
#pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
$ pod repo add gd_repos http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/spec.git
此时如果成功的话进入到~/.cocoapods/repos目录下就可以看到gr_repos这个目录了。至此第一步创建私有Spec Repo完成。
创建Pod项目工程文件
如果是有现有的组件项目,并且在Git的版本管理下,那么这一步就算完成了,可以直接进行下一步了。
如果你的组件还在你冗余庞大的项目中,需要拆分出来或者需要自己从零开始创建一个组件库,那么使用Cocoapods进行创建,相关的文档介绍是Using Pod Lib Create。
就拿我创建的AMProgressView为例,具体操作如下:
$ mkdir AMProgressView
$ cd AMProgressView
$ pod lib create AMProgressView
之后终端会出现四个问题,
1.是否需要一个例子工程;
2.选择一个测试框架;
3.是否基于View测试;
4.类的前缀;
4个问题的具体介绍可以去看官方文档,
我这里选择的是
1.yes;
2.Specta/Expecta;
3.yes;
4.AM。
选择完这4个问题,自动执行pod install命令创建项目并生成依赖。
执行
[tree] (http://coderlt.coding.me/2016/03/16/mac-osx-tree/) AMProgressView -L 2
可以看到如下目录结构。
AMProgressView
├── AMProgressView.podspec
├── Example
│ ├── AMProgressView
│ ├── AMProgressView.xcodeproj
│ ├── Podfile
│ └── Tests
├── LICENSE
├── Pod
│ ├── Assets
│ └── Classes
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
7 directories, 5 files
向Pod文件夹中添加库文件和资源,并配置podspec文件,
把模块的共有组件放入Pod/Classes中,然后进入Example文件夹执行pod update命令,再打开项目工程可以看到,刚刚添加的组件已经在Pods子工程下Development Pods/PodTestLibrary中了,然后编辑demo工程,测试组件,我并没有使用提供的测试框架进行测试,这里就先不介绍了。
注:这里需要注意的是每当你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新执行一遍pod update命令。
测试无误后需要将该项目添加并推送到远端仓库,并编辑podspec文件。
通过Cocoapods创建出来的目录本身就在本地的Git管理下,我们需要做的就是给它添加远端仓库,同样去GitHub或其他的Git服务提供商那里创建一个私有的仓库,拿到HTTP地址,然后cd到AMProgressView目录
执行一下步骤:
git add .
git commit -s -m "Initial Commit of Library"
git remote add origin http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView.git #添加远端仓库
git push origin master #提交到远端仓库
因为podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag
git tag -m "first release" "0.0.1"
git push --tags #推送tag到远端仓库
编辑podspec文件
podspec文件
# Be sure to run `pod lib lint AMProgressView.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec se
#http://guides.cocoapods.org/syntax/podspec.html
Pod::Spec.new do |s|
s.name = "AMProgressView"
s.version = "0.0.1"
s.summary = "提供进度条功能"
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
* Markdown format.
* Don't worry about the indent, we strip it!
DESC
s.homepage = "http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView"
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
s.license = 'MIT'
s.author = { "test" => "[email protected]" }
s.source = { :git => "http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView.git", :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/'
s.platform = :ios, '7.0'
s.requires_arc = true
s.source_files = 'Pod/Classes/**/*'
s.resource_bundles = {
'AMProgressView' => ['Pod/Assets/*.png']
}
# s.public_header_files = 'Pod/Classes/**/*.h'
s.frameworks = 'UIKit'
# s.dependency 'AFNetworking', '~> 2.3' #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
end
编辑完podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,
不过xcode的WARNING是可以存在的,验证需要执行一下命令:
$ pod lib lint
当你看到:
-> AMProgressView (0.0.1)
PodTestLibrary passed validation.
向Spec Repo提交podspec
向Spec Repo提交podspec需要完成两点一个是podspec必须通过验证无误,在一个就是删掉无用的注释(这个不是必须的,为了规范还是删掉吧)。 向我们的私有Spec Repo提交podspec只需要一个命令
$ pod repo push gd_repo AMProgressView.podspec #前面是本地Repo名字 后面是podspec名字
完成之后可以进入到~/.cocoapods/repos/gd_reps目录下查看
AMProgressView
├── AMProgressView
│ └── 0.0.1
├── AMProgressView.podspec
├── Example
│ ├── AMProgressView
│ ├── AMProgressView.xcodeproj
│ ├── AMProgressView.xcworkspace
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ └── Tests
├── LICENSE
├── Pod
│ ├── Assets
│ └── Classes
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
12 directories, 5 files
再去看我们的Spec Repo远端仓库,也有了一次提交,这个podspec也已经被Push上去了。至此,我们的这个组件库就已经制作添加完成了,使用pod search命令就可以查到我们自己的库了.
pod search AMProgressView
-> AMProgressView (0.0.1)
提供进度条功能
pod 'AMProgressView', '~> 0.0.1'
- Homepage: http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView
- Source:
http://gitlab.alibaba-inc.com/xiamen_gd_cocoapods/AMProgressView.git
- Versions: 0.0.1 [AMProgressView repo]
在完成这一系列步骤之后,我们就可以在正式项目中使用这个私有的Pod了只需要在项目的Podfile里增加以下一行代码即可
$ pod 'AMProgressView', '~> 0.0.1'
然后执行pod update,更新库依赖,然后打卡项目可以看到,我们自己的库文件已经出现在Pods子项目中的Pods子目录下了,而不再是Development Pods。