本文转自[url]http://ishalou.com/blog/2012/10/16/how-to-create-a-cocoapods-spec-file/[/url],版权归作者所有。
CocoaPods命令介绍
在[url]上一篇文章[/url]中,已经介绍过CocoaPods的几条基本命令。[b][u]pod setup[/u][/b]用于初始化本地第三方库的Spec描述文件,所有的spec文件存都存放在[b][i]~/.cocoapods[/i][/b]目录中。[b][i]pod install[/i][/b]用来安装或删除Podfile文件声明中的第三方依赖库。下面继续介绍其它一些命令。
搜索名称包含[b]query[/b]的类库,[b]query[/b]可以替换为你想搜索的名字(如json),不区分大小写。也可以使用[b][i]pod search --full query[/i][/b]命令作更仔细的搜索,该命令不但搜索类库的名称,同时还搜索类库的描述文本,所以搜索速度也相对慢一些。
[b][i]pod list[/i][/b]和[b][i]pod search[/i][/b]命令只搜索存在于本地[b][i]~/.cocoapods[/i][/b]文件夹的所有第三方库,并不会连接到远程服务器。如果你要从服务器更新本地第三方库的描述文件,可以:
CocoaPods还是一个相对年轻的项目,所有的项目的Podspec文件都托管在[url]https://github.com/CocoaPods/Specs[/url]。可能有一些库并未收录其中。下面我们通过为微博sso认证登录库编写Podspec文件来学习相关的概念。
初始化一个Podspec文件
该命令将在本目录产生一个名为[b]weibo_ios_sdk_sso-oauth.podspec[/b]的文件。用编辑器打开该文件,里面已经有非常丰富的说明文档。下面我们介绍如何声明第三方库的代码目录和资源目录,还有该第三方库所依赖ios核心框架和第三方库。
去除所有的注释,podspec文件如下所示:
其中[b]s.name[/b]和[b]s.summary[/b]用来声明库的名称和一个简短的说明文档。[b]pod search[/b]命令就是根据这两项内容作为搜索文本的。[b]s.homepage[/b]声明库的主页,[b]s.version[/b]库原代码的版本,[b]s.license[/b]所采用的授权版本,[b]s.author[/b]库的作者。
[b]s.source[/b] 声明原代码的地址,以微博sso认证登录库为例,它托管在
对于很多第三方库而言,在发布的时候都会打上一个[b]tag[/b],如版本[b]0.0.1[/b]就会打上一个名为v0.0.1的tag,但是[b]weibo_ios_sdk_sso-oauth[/b]库还未打上所何tag,我们可以选择一个最新的commit来作为该库0.0.1版的代码。[b]s.source[/b]最终如下:
以后我们可以根据该库不同的版本创建相应的podspec文件,例如0.0.2,0.1.0等。
让我们在浏览器中看一下weibo_ios_sdk_sso-oauth的目录结构:
demo目录保存一个示例项目,src才是库的原代码目录。src的目录结构如下:
JSONKit目录说明这个库本身依赖于JSONKit第三方库。我们可以在podspec文件中的[b]s.dependency[/b]声明段中声明。SinaWeibo目录才是包含所有原代码的目录,我们需要在[b]s.source_files[/b]中声明
前一部分src/SinaWeibo/是一个相对目录,目录的层级关系一定要跟代码库的保持一致。最后一部分[b]*.{h,m}[/b]是一个类似正则表达式的字符串,表示匹配所有以.h和.m为扩展名的文件。
[b]src/SinaWeibo/目录[/b]下还有一个[b]SinaWeibo.bundle目录[/b],该目录存放一些资源文件(如图片等),这些文件并不需要进行编译。可以使用[b]s.resourcs[/b]声明
前一部分跟上面相同,[b]**[/b]表示匹配所有子目录,[b]*.png[/b]表示所有以.png为扩展名的图片文件。
通过查看代码我们知道,weibo_ios_sdk_sso-oauth还依赖一个ios的核心库QuartzCore
在前面我们已经说过,weibo_ios_sdk_sso-oauth库自身也依赖于另外一个第三方库JSONKit,声明如下:
这行声明与Podfile文件中的声明类似。
最终的结果如下:
可以将该spec文件保存到本机的~/.cocoapods/master/目录中仅供自己使用,也可以将其提交到CocoaPods/Specs代码库中。下面我们将其保存到本机中
是否可以通过搜索找到该库:
同样在需要依赖于weibo_ios_sdk_sso-oauth这个库的项目,可以将下列添加到项目的Podfile文件中
保存文件,并用[b]pod install[/b]安装weibo_ios_sdk_sso-oauth库。
转载请注明原作者
CocoaPods命令介绍
在[url]上一篇文章[/url]中,已经介绍过CocoaPods的几条基本命令。[b][u]pod setup[/u][/b]用于初始化本地第三方库的Spec描述文件,所有的spec文件存都存放在[b][i]~/.cocoapods[/i][/b]目录中。[b][i]pod install[/i][/b]用来安装或删除Podfile文件声明中的第三方依赖库。下面继续介绍其它一些命令。
$ pod list
# 列出所有可用的第三方库
$ pod search query
搜索名称包含[b]query[/b]的类库,[b]query[/b]可以替换为你想搜索的名字(如json),不区分大小写。也可以使用[b][i]pod search --full query[/i][/b]命令作更仔细的搜索,该命令不但搜索类库的名称,同时还搜索类库的描述文本,所以搜索速度也相对慢一些。
[b][i]pod list[/i][/b]和[b][i]pod search[/i][/b]命令只搜索存在于本地[b][i]~/.cocoapods[/i][/b]文件夹的所有第三方库,并不会连接到远程服务器。如果你要从服务器更新本地第三方库的描述文件,可以:
$ pod repo update master
创建自己项目的Podspec描述文件
CocoaPods还是一个相对年轻的项目,所有的项目的Podspec文件都托管在[url]https://github.com/CocoaPods/Specs[/url]。可能有一些库并未收录其中。下面我们通过为微博sso认证登录库编写Podspec文件来学习相关的概念。
初始化一个Podspec文件
$ pod spec create weibo_ios_sdk_sso-oauth
该命令将在本目录产生一个名为[b]weibo_ios_sdk_sso-oauth.podspec[/b]的文件。用编辑器打开该文件,里面已经有非常丰富的说明文档。下面我们介绍如何声明第三方库的代码目录和资源目录,还有该第三方库所依赖ios核心框架和第三方库。
去除所有的注释,podspec文件如下所示:
Pod::Spec.new do |s|
s.name = 'ADVProgressBar'
s.version = '0.0.1'
s.license = 'MIT'
s.summary = 'Progress Bar Design with Percentage values.'
s.homepage = 'https://github.com/appdesignvault'
s.author = { 'appdesignvault' => 'appdesignvault' }
s.source = { :git => 'https://github.com/appdesignvault/ADVProgressBar.git', :commit => 'f17b15c15574d6d101cd5fcfd58239e16e806647' }
s.platform = :ios
s.source_files = 'ADVProgressBar/Classes/*.{h,m}'
s.resources = "ADVProgressBar/Resources/*.png"
s.framework = 'UIKit'
s.requires_arc = true
end
其中[b]s.name[/b]和[b]s.summary[/b]用来声明库的名称和一个简短的说明文档。[b]pod search[/b]命令就是根据这两项内容作为搜索文本的。[b]s.homepage[/b]声明库的主页,[b]s.version[/b]库原代码的版本,[b]s.license[/b]所采用的授权版本,[b]s.author[/b]库的作者。
[b]s.source[/b] 声明原代码的地址,以微博sso认证登录库为例,它托管在
https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth
中,在其未尾加上[b].git[/b]扩展名就是库的原代码地址了,所以该行应声明为:
s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git'}
对于很多第三方库而言,在发布的时候都会打上一个[b]tag[/b],如版本[b]0.0.1[/b]就会打上一个名为v0.0.1的tag,但是[b]weibo_ios_sdk_sso-oauth[/b]库还未打上所何tag,我们可以选择一个最新的commit来作为该库0.0.1版的代码。[b]s.source[/b]最终如下:
s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git', :commit => '68defea78942ecc782ffde8f8ffa747872af226d'}
以后我们可以根据该库不同的版本创建相应的podspec文件,例如0.0.2,0.1.0等。
让我们在浏览器中看一下weibo_ios_sdk_sso-oauth的目录结构:
--
|
+-- demo
|
+-- src
|
+-- .gitignore
|
+-- README.md
demo目录保存一个示例项目,src才是库的原代码目录。src的目录结构如下:
-- src
|
+-- JSONKit
|
+-- SinaWeibo
|
+-- sinaweibo_ios_sdk.xcodeproj
|
+-- SinaWeibo-Prefix.pch
JSONKit目录说明这个库本身依赖于JSONKit第三方库。我们可以在podspec文件中的[b]s.dependency[/b]声明段中声明。SinaWeibo目录才是包含所有原代码的目录,我们需要在[b]s.source_files[/b]中声明
s.source_files = 'src/SinaWeibo/*.{h,m}'
前一部分src/SinaWeibo/是一个相对目录,目录的层级关系一定要跟代码库的保持一致。最后一部分[b]*.{h,m}[/b]是一个类似正则表达式的字符串,表示匹配所有以.h和.m为扩展名的文件。
[b]src/SinaWeibo/目录[/b]下还有一个[b]SinaWeibo.bundle目录[/b],该目录存放一些资源文件(如图片等),这些文件并不需要进行编译。可以使用[b]s.resourcs[/b]声明
s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
前一部分跟上面相同,[b]**[/b]表示匹配所有子目录,[b]*.png[/b]表示所有以.png为扩展名的图片文件。
通过查看代码我们知道,weibo_ios_sdk_sso-oauth还依赖一个ios的核心库QuartzCore
s.framework = 'QuartzCore'
在前面我们已经说过,weibo_ios_sdk_sso-oauth库自身也依赖于另外一个第三方库JSONKit,声明如下:
s.dependency 'JSONKit', '~> 1.4'
这行声明与Podfile文件中的声明类似。
最终的结果如下:
Pod::Spec.new do |s|
s.name = "weibo_ios_sdk_sso-oauth"
s.version = "0.0.1"
s.summary = 'weibo.com sso oauth, 微博sso认证登录功能'
s.homepage = "https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth"
s.license = 'MIT'
s.author = {'mobileresearch' => 'mobileresearch'}
s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git', :commit => '68defea78942ecc782ffde8f8ffa747872af226d' }
s.platform = :ios
s.source_files = 'src/SinaWeibo/*.{h,m}'
s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
s.framework = 'QuartzCore'
s.dependency 'JSONKit', '~> 1.4'
end
可以将该spec文件保存到本机的~/.cocoapods/master/目录中仅供自己使用,也可以将其提交到CocoaPods/Specs代码库中。下面我们将其保存到本机中
$ mkdir -p ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
$ cp weibo_ios_sdk_sso-oauth.podspec ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
是否可以通过搜索找到该库:
$ pod search weibo
同样在需要依赖于weibo_ios_sdk_sso-oauth这个库的项目,可以将下列添加到项目的Podfile文件中
pod 'weibo_ios_sdk_sso_oauth', '0.0.1'
保存文件,并用[b]pod install[/b]安装weibo_ios_sdk_sso-oauth库。
转载请注明原作者