您的位置:首页 > 其它

cocoapods_从安装使用到创建自己的podspec

2015-06-26 17:16 411 查看

Cocoapods 从安装使用到创建自己的podspec

Cocoapods简介

当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。如果使 用他们,传统的方法是,在git上把他们下载下来,然后去配置。这个工作很繁琐,而且也容易出错。不 过有了Cocoapods你就会从这些繁琐的工作中解脱出来。

Cocoapods是Swif和Objective-C的cocoa项目依赖关系管理的工具。

安装Cocoapods

Cocoapods是用Ruby实现的,使用它需要Ruby环境。不过OS X 系统上已经默认安装了Ruby。所以我们只需要在终端中执行下面的命令:

sudo gem install cocoapods


Cocoapods是以Ruby gem包的形式安装的。在安装的过程中,如果询问是否要更新rake输入y即可。这

是rake gem在检查更新。

安装结束后,执行下面的命令

pod setup


安装完成后终端户显示 Setup completed

安装中可能会遇到的问题

执行 sudo geminstall cocoapods长时间没有反应

这有可能是因为Ruby的默认源使用的是cocoapods.org,国内访问这个网址有时候会有问题,网上的一种解决方案是将远替换成淘宝的,替换方式如下:

gem sources --remove https://rubygems.org/

//等有反应之后再敲入以下命令

gem sources -a http://ruby.taobao.org/


为了验证你的Ruby镜像是并且仅是taobao,可以用以下命令查看:

$ gem sources -l


终端上会显示

*** CURRENT SOURCES ***

http://ruby.taobao.org/

然后在执行

sudo gem install cocoapods
pod setup


gem版本过老

gem是管理Ruby库和程序的标准包,如果它的版本过低也可能导致安装失败,解决方案自然是升级gem,执行下述命令即可:

sudo gem update --system


测试一下Cocoapods

安装完成之后,我们来试一下Cocoapods 以AFNetworking为例子

在终端执行下列命令

pod search AFNetworking


来看一下我的结果



下面粘贴一下搜出来的结果简单的说一下

-> AFNetworking (2.5.4)

A delightful iOS and OS X networking framework.

pod ‘AFNetworking’, ‘~> 2.5.4’ //(注释)如何使用cocoapods 在Podfile写上这句,就可以使用AF了

- Homepage: https://github.com/AFNetworking/AFNetworking //(注释)AF的主页

- Source: https://github.com/AFNetworking/AFNetworking.git //(注释)AFgit地址

- Versions: 2.5.4, 2.5.3, 2.5.2, 2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3,

2.0.0-RC2, 2.0.0-RC1, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0,

0.5.1 [master repo]

- Subspecs://(注释)子项目

- AFNetworking/Serialization (2.5.4)

- AFNetworking/Security (2.5.4)

- AFNetworking/Reachability (2.5.4)

- AFNetworking/NSURLConnection (2.5.4)

- AFNetworking/NSURLSession (2.5.4)

- AFNetworking/UIKit (2.5.4)

使用Cocoapods

使用Xcode简历一个demo工程,我们的工程就叫做demo如下图



然后使用终端cd 到这个文件夹下

例如我的工程文件的目录是 /Users/xudongzhang/Desktop/test/cocopodsDemo/demo

在终端执行下列命令

cd /Users/xudongzhang/Desktop/test/cocopodsDemo/demo
//编写Podfile 文件
vi Podfile


以 AFNetworking 为例



图中的代码如下

platform :ios ,'7.0'

pod 'AFNetworking', '~> 2.5.4'


下载的文件结构如下



然后执行

pod install


结果是



这个时候查看你的目录



双击demo.xcworkspace 文件(以后你就要使用这个workspace了)



如果很长时间卡在这里



而且长时间没反应,这是pods在更新自己的本地库,你也可以等待,不过时间较长

也可以不更新可以执行另一个命令

pod install --verbose --no-repo-update


至此恭喜你已经会使用了你的第一个pods项目

Podfile文件介绍

platform :ios ,'7.0' #指定了针对哪一个版本的iOS系统
pod 'AFNetworking', '~> 2.5.4'#指定了AF对应的版本


如果修改了Podfile文件,可以执行

pod update


来更新你的pods库,同样的这个命令会先对本地的pod库进行更新,会等待比较长的时间,如果不想更新本地库,可以执行下面的命令

pod update --verbose --no-repo-update


将自己的工程纳入pod

上面的知识在很多的文章中已经介绍过,下面说一下如何建立自己的pod仓库

pod是如何搜索网上的那些开源库呢?当你执行pod search ‘AF’时,是如何工作呢。其实这个要归功于xxx.podspec文件。这个podspec文件中保存了,希望纳入pods管理的资源和该资源的版本号,下载路径等信息。然后将这个资源推送到Cocoapods的仓库中。执行pod install 或者pod update 一直在更新的其实就是人们推送到pod的podspec文件。这些会被下载到~/.cocoapods目录下,来看一下



对应的AFNetworking在github上的地址。我这里截图大家看一下。



点击AFNetworking.podspec文件查看不在截图了,直接上文件内容(里边有我写的注释)

AFNetworking.podspec 文件

Pod::Spec.new do |s|
s.name     = 'AFNetworking'#sepc文件的名字
s.version  = '2.5.4'#对应的版本
s.license  = 'MIT'#开源协议
s.summary  = 'A delightful iOS and OS X networking framework.'#简单的介绍
s.homepage = 'https://github.com/AFNetworking/AFNetworking'#主页
s.social_media_url = 'https://twitter.com/AFNetworking'#作者的twitter
s.authors  = { 'Mattt Thompson' => 'm@mattt.me' }#作者 和他的邮箱
s.source   = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => s.version, :submodules => true }#对应的资源文件的地址,注意后边的tag ,其实就是他的版本,pods是以git为基础管理的。版本就是tag值了
s.requires_arc = true#是否是arc模式

s.ios.deployment_target = '6.0'#iOS对应的版本
s.osx.deployment_target = '10.8'#OX S 对应的版本

s.public_header_files = 'AFNetworking/*.h'#公共的头文件地址
s.source_files = 'AFNetworking/AFNetworking.h'#文件地址,pod会以这个地址下载需要的文件构建pods

s.subspec 'Serialization' do |ss|#对应的一些子工程
ss.source_files = 'AFNetworking/AFURL{Request,Response}Serialization.{h,m}'
ss.ios.frameworks = 'MobileCoreServices', 'CoreGraphics'
ss.osx.frameworks = 'CoreServices'
end

s.subspec 'Security' do |ss|
ss.source_files = 'AFNetworking/AFSecurityPolicy.{h,m}'
ss.frameworks = 'Security'
end

s.subspec 'Reachability' do |ss|
ss.source_files = 'AFNetworking/AFNetworkReachabilityManager.{h,m}'
ss.frameworks = 'SystemConfiguration'
end

s.subspec 'NSURLConnection' do |ss|
ss.dependency 'AFNetworking/Serialization'
ss.dependency 'AFNetworking/Reachability'
ss.dependency 'AFNetworking/Security'

ss.source_files = 'AFNetworking/AFURLConnectionOperation.{h,m}', 'AFNetworking/AFHTTPRequestOperation.{h,m}', 'AFNetworking/AFHTTPRequestOperationManager.{h,m}'
end

s.subspec 'NSURLSession' do |ss|
ss.dependency 'AFNetworking/Serialization'
ss.dependency 'AFNetworking/Reachability'
ss.dependency 'AFNetworking/Security'

ss.source_files = 'AFNetworking/AFURLSessionManager.{h,m}', 'AFNetworking/AFHTTPSessionManager.{h,m}'
end

s.subspec 'UIKit' do |ss|
ss.ios.deployment_target = '6.0'

ss.dependency 'AFNetworking/NSURLConnection'
ss.dependency 'AFNetworking/NSURLSession'

ss.ios.public_header_files = 'UIKit+AFNetworking/*.h'
ss.ios.source_files = 'UIKit+AFNetworking'
ss.osx.source_files = ''
end
end


建立自己的pods

Cococapods是基于git的,所以我们需要使用git来做版本管理,我使用的是github的免费服务。

建立自己的pod项目需要以下几个步骤

1,建立git仓库
2,在仓库中添加工程,编写podspec文件
3,验证spec文件,推送到pod的主干
4,更新本地的pod文件


1, 建立git仓库

建立git仓库(我是在github上建立的),pod对开源协议的要求比较严格,项目必须含有开源协议,在尽力git仓库的时候我们会指定以下协议,直接上图



然后把项目copy到本地,我使用的是github for mac 如下图所示



2在仓库中添加工程,编写podspec文件

在本地创建一个项目,然后推送到git。

来看一下我创建好的工程以及工程的目录



cd到仓库的目录在终端执行

pod spec create xxx xxx是你pod名字

下面是我的项目名XDPodDemo

pod spec create XDPodDemo


pod会为你创建一个名为xxx.podspec 文件。



成功后你会看到我们的目录下面多了一podspec文件,打开修改

(这里需要注意一个问题pod的版本是根据git的tag来区分的,所以我们创建好工程之后需要修为我们的仓库打一个tag,并且推送到远程仓库)

为git打tag的命令如下

git tag 0.01 ##为git打tag
git push --tags ##将tag推送到远程仓库


注 关于git的操作,不是本文的重点。这里不做太多的介绍

如果有需要,请关注我随后的文章将会介绍一些git的操作。

文件内容较多,我这里不再一一解释了,直接上我修改完成后的文件

#
#  Be sure to run `pod spec lint XDPodDemo.podspec' to ensure this is a
#  valid spec and to remove all comments including this before submitting the spec.
#
#  To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html #  To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ #

Pod::Spec.new do |s|

# ―――  Spec Metadata  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
#
#  These will help people to find your library, and whilst it
#  can feel like a chore to fill in it's definitely to your advantage. The
#  summary should be tweet-length, and the description more in depth.
#

s.name         = "XDPodDemo"
s.version      = "0.0.1"
s.summary      = "一个建立pod仓库的简单demo."

s.description  = <<-DESC
这只是一个建立pod仓库的简单demo,并没有实际的意思。教学使用。

* Think: Why did you write this? What is the focus? What does it do?
* CocoaPods will be using this to generate tags, and improve search results.
* Try to keep it short, snappy and to the point.
* Finally, don't worry about the indent, CocoaPods strips it!
DESC

s.homepage     = "https://github.com/hytzxdCode/XDPodsDemo"
s.license      = { :type => "MIT", :file => "LICENSE" }
s.author             = { "张旭东" => "xudongzhang999@163.com" }
s.platform     = :ios, "8.0"
s.source       = { :git => "https://github.com/hytzxdCode/XDPodsDemo.git", :tag => "0.0.1" }
s.source_files  = "Classes", "XDPodsDemo/XDPodsDemo/Classes/**/*.{h,m}"

# s.framework  = "SomeFramework" #可以指定你需要的framework 由于我这里是一个简单的demo,所以这里没有指定
# s.frameworks = "SomeFramework", "AnotherFramework"

# s.library   = "iconv"
# s.libraries = "iconv", "xml2"

s.requires_arc = true

# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
s.dependency "JSONKit", "~> 1.4" #这里可以指定依赖一些其他的开源库,这里使用了jsonkit

end


基本上都不需要怎么解释但是有几条还是说一下

s.source s.source_files

这里的 source 我们看出是一个git 的地址,这里我们调试的时候,可以先暂时设置成本地git,调试完毕之后就可以发布 增加tag。想要最新的代码只需要这样设置就好

{ :git => “https://github.com/studentdeng/ShareCenterExample.git“}

我们的git项目中,并不是所有的代码都需要被引用到我们的代码中,通常project还会包括一些example,test cases等,这里的 source_files 就是用来指定一些文件夹,或是文件。我这里的设置也很容易理解,就是ShareCenter下面的递归后的所有后缀是h、m的子文件。

s.frameworks s.library

这里配置的就是我们的framework 和 library,这里注意一下library的名字规则就好。

vendored_libraries

这里用来指定外部的静态库。这里我们指定了sina sso认证的SDK

s.prefix_header_contents

这里用来指定预编译的配置,这里一定要鄙视一下renren的超级渣渣SDK。这里提供一种解决方法。

然后执行

pod lib lint


这条命令会验证你的spec文件,根据错误提示来修改。

3,验证spec文件,推送到pod的主干

来看一下我修改一些的过程(不要怕出错,从命令提示中慢慢修改,总能学到很多的)



这中间需要先注册到pod主干注册一下

命令是

$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'


这里使用邮箱就可以,不要密码

然后我们把项目推送到pod的主干

pod trunk push XDPodDemo.podspec


下面是我执行的截图



这样子pods库中就有了你自己的工程

4,更新本地的pod文件

如果要使用,需要先更新本地的pods仓库

pod repo update


这个过程比较长,需要耐心等待 ,更新完之后上图



然后搜索我们刚才建立的pod库

pod search 'XDPodDemo'




至此,已经建立了我们自己的pod仓库

下面是我使用刚藏建立的仓库成功后的截图

从图中可以看出,已经将我们sepc文件中要求的东西纳入了新的库中



写在最后的话

本人水平有限,很多东西难免有不对的地方。如果您发现了,恳请您在评论区指点一下。

非常感谢!

参考文章:

* http://code4app.com/article/cocoapods-install-usage

* http://www.iwangke.me/2013/04/18/advanced-cocoapods/

* http://nshipster.cn/cocoapods/

* https://cocoapods.org/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: