使用Cocoapods创建私有podspec

Spec Repo

什么是Spec Repo?其实它只是pods的一个索引,也就是一个容器,所有公开的pods都在这个里面,https://github.com/CocoaPods/Specs.git它实际是一个Git残酷remote端口,当你使用了Cocoapods后它会被默认的clone到本地~/.cocoapods/repos下的master文件夹下,这个就是官方的Spec Repo。注意在安装Cocoapods的时候,可能会在安装官方的Spec Repo文件会失败,但是并不会影响pod的使用,并且不会提示任何错误,但是在执行pod install或者search等命令会提示失败,这个会自动重新请求clone官方Spec Repo到本地。会出现如下:

1
Setting up CocoaPods master repo

这个过程时间会比较长。其文件结构如下,每个库都应的都有多个version,每个version下面有tag对应的.podspec文件:

1
2
3
          CocoaPods-version.yml      ......        
master -- Specs---------------------3DTouchHelper--VersionName---3DTouchHelper.podspec
README.md ......

CocoaPods

iOS 最新版 CocoaPods 的安装流程

1.移除现有Ruby默认源

$gem sources –remove https://rubygems.org/

2.使用新的源

$gem sources -a https://ruby.taobao.org/

3.验证新源是否替换成功

$gem sources -l

4.安装CocoaPods

(1) $sudo gem install cocoapods

备注:苹果系统升级 OS X EL Capitan 后改为 $sudo gem install -n /usr/local/bin cocoapods

(2) $pod setup

5.更新gem

$sudo gem update –system

  1. 新建工程,并在终端用cd指令到文件夹内

$pod search 第三方

问题

错误1:

Error fetching http://ruby.taobao.org/:

bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)

解决方案:把安装流程中 $gem sources -a http://ruby.taobao.org/ —改为—-> $gem sources -a https://ruby.taobao.org/

错误2:

ERROR: While executing gem … (Errno::EPERM)

Operation not permitted - /usr/bin/pod

解决方案:苹果系统升级OS X EL Capitan后会出现的插件错误,将安装流程 4.安装CocoaPods 的 (1)sudo gem install cocoapods ——>改为sudo gem install -n /usr/local/bin cocoapods

错误3:

[!] Unable to satisfy the following requirements: - AVOSCloud (~> 3.1.6.3) required by Podfile

Specs satisfying the AVOSCloud (~> 3.1.6.3) dependency were found, but they required a higher minimum deployment target.

解决方案:安装流程:Podfile文件 中 platform:ios, ‘6.0’ 后边的 6.0 是平台版本号 ,一定要加上

创建podfile

使用终端进入项目所在的目录,输入touch podfile命令,会看到该目录下面创建了一个podfile文件,修改podfile文件添加

1
2
platform:ios, '7.0'
pod 'AFNetworking'

在终端中输入pod install 命令,会看到到同目录下面创建了一个xcworkspace的工程。

创建私有Spec Repo

看了官方的Spec Repo后,我们需要创建一个类似的~/.cocoapods/repos的master的Spec Repo文件,这里我们可以fork官方,也可以自己创建。建议自己创建比较好,由于官方的东西实在是太多。执行后会生成TwwSpecs.podspec文件,需要在自己的github上创建一个repositories。然后修改项目文件TwwSpecs.podspec内容

1
pod repo add TwwSpecs https://github.com/Tweiwei497435786/TwwSpecs.git

创建成功后你会看到在~/.cocoapods/repos目录生成了一个TwwSpecs文件夹,那么这个就是我们私有的Spec Repo文件了。需要注意的就是如果项目中有其他同事共同开发的话,你还要给他这个Git仓库的权限。

创建pod库

创建pod库参考创建私有pod库。创建私有pod库成功后,会看到如下的目录内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tree TwwTest -L 2
TwwTest
├── Example
│   ├── Podfile
│   ├── Podfile.lock
│   ├── Pods
│   ├── Tests
│   ├── TwwTest
│   ├── TwwTest.xcodeproj
│   └── TwwTest.xcworkspace
├── LICENSE
├── README.md
├── TwwTest
│   ├── Assets
│   └── Classes
├── TwwTest.podspec
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj

需要注意的是我们需要修改TwwTest.podspec文件的相关内容最低版本,包括真实的目录路径。

1
2
3
4
5
s.version          = '0.1.0'
s.ios.deployment_target = '8.0'
s.homepage = 'https://github.com/<GITHUB_USERNAME>/TwwTest'
s.source = { :git => 'https://github.com/<GITHUB_USERNAME>/TwwTest.git', :tag => s.version.to_s }
.....

关于TwwTest.podspec各项表示的意思,参考官网内容。在这里需要注意的是s.version默认了版本,在此时我们需要手动创建tag:

1
2
git tag -m "first add tag" "0.1.0" //创建tag,并提交信息 
git push --tags //推送tag到服务器

操作成功后,我们需要将创建好的私有pod库提交到我们私有Spec Repo中进行管理,在terminate中输入:

1
pod repo push TwwSpecs TwwTest.podspec --allow-warnings//将私有pod库TwwTest的TwwTest.podspec提交到私有repo中管理TwwSpecs,允许警告出现。

经过上面的操作那么,我们就将TwwTest的pod库的0.1.0的tag放到TwwSpecs的私有repo中进行管理。

维护私有podspec

需要注意的是,每次我们更改私有的pod库之后,在打上tag之前,我们需要修改私有pod库TwwTest的TwwTest.podspec文件,更改version信息版本:

1
s.version          = '0.1.0'

同时需要为私有pod库打上tag

1
2
git tag -m "first add tag" "0.1.1" //创建tag,并提交信息 
git push --tags //推送tag到服务器

然后需要push到specs中进行管理:

1
pod repo push TwwSpecs TwwTest.podspec --allow-warnings//将私有pod库TwwTest的TwwTest.podspec提交到私有repo中管理TwwSpecs,允许警告出现。

此时如果其他协同开发人员遇到,找不新的版本问题,需要其他开发人员本地操作:

1
pod update repo

项目引用

在我们的主要项目中的podfile文件加入以下内容:

1
2
3
4
5
6
source 'https://github.com/Tweiwei497435786/TwwSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'

target "TwwTestProject" do
pod 'TwwTest', '~> 1.0.0'
end

问题

遇到pod repo布署更新的时候会遇到pod repo 不成功的情况,一般情况下会存在以下问题。

1.遇到警告导致repo不成功,此时我们可以使用以下–allow-warnings修饰.

1
pod repo push TwwSpecs TwwTest.podspec --allow-warnings --verbose //允许警告,并且打印出详细的verbose信息

2.由于使用了libiries的情况下我们需要在podspec里面添加相应的内容。

1
s.libraries = "c++","z" //表示要使用c++,libz的库

3.出现了以下问题的时候:

1
include of non-modular header inside framework module

在repo的时候需要加上–use-libraries修饰

1
pod repo push TwwSpecs TwwTest.podspec --allow-warnings --use-libraries --verbose

参考

1.使用Cocoapods创建私有podspec

2.cocoapods官网