CocoaPods实践

     最近在学习cocoaPods,在使用cocoaPods的时候遇到一些问题,记录下来,分享给大家,希望多多交流。

一、简介:

     Cocoapods是OS X和iOS下的一个第三方库管理工具,并且支持Objective-C和swifit语言。通过Cocoapods为项目添加称为"Pods"的依赖库(这些库必须是Cocoapods所支持的),并且轻松实现第三方库的版本管理。

二、安装cocoaPods:

     这一块不是重点,大概讲讲,CocoaPods用Ruby写的,所以首先安装一下ruby环境,具体操作可以参考http://www.2cto.com/kf/201411/348389.html。然后用淘宝镜像替换cocoaPods.org,并安装cocoaPods,在终端执行:

gem sources --removehttps://rubygems.org/

gem sources -ahttp://ruby.taobao.org/

sudo gem install cocoapods

至此,cocoaPods安装完成,为验证是否安装成功,可以查看cocoaPods的版本号:

pod --version

三、导入第三方公有库:

     cocoaPods最常用的是pod命令,例如搜索AfNetworking在cocoaPods中的所有可用版本,在终端执行:

pod search AFNetworking

为了给一个新建项目导入第三方库,需进行如下步骤:

1、cd到当前工程目录,新建一个podfile文件,在终端执行:

touch Podfile

在工程中多了个Podfile文件

CocoaPods实践_第1张图片
Podfile

接下来配置Podfile文件,格式如下

platform :ios, '7.0'

pod 'AFNetworking', '3.0.4'

pod 'UIView+Positioning', '1.1'

pod 'Masonry', '0.6.2'

例如pod 'AFNetworking', '3.0.4'是指为项目引入3.0.4版本的AFNetworking,终端执行:

pod install

执行该命令,cocoaPods默认更新资源库,可以加上--no-repo-update命令禁止更新。执行成功的话,会多出.xcworkspace文件和Podfile.lock文件,打开.xcworkspace,目录中多出Pods工程。点击工程文件,发现每个库都是一个Target。可以在PFHealth工程里面导入第三方库开发了。

CocoaPods实践_第2张图片
工程目录

Podfile.lock:该文件用来保存安装的Pods依赖库的版本,当执行完pod install命令后,lock文件会记录当前导入第三方库的版本号及其依赖库的版本号,当再次pod install时,cocoaPods会去取lock文件记录的版本号,而不会去取最新的版本,这对于团队开发很有用。

pod install命令和pod update命令:一开始我也弄不清它俩的区别,后来试了一下,总结一下:在podfile文件里面编辑

pod 'AFNetworking'

执行pod install命令导入的库根据lock文件记录的版本号而定,例如lock文件里面AFN的版本号是2.5.0,则执行pod install命令导入2.5.0的AFN,但是pod update命令不受lock文件制约,会取最新版本的AFN导入项目。另外podfile文件里面可以指定工程中不同target导入不同的第三方库,具体参考https://guides.cocoapods.org/syntax/podfile.html。

四、搭建cocoaPods私有库

首先讲讲个人对于cocoapods导入第三方库机制的理解,终端执行

/Users/PF/.cocoapods/repos

repos目录下有个master文件夹,进入master->Specs,里面存放许多文件夹,对应一个第三方库的名称,里面又维护了若干版本文件夹,每个文件夹里面维护一个podspec.json文件,该文件存有远端github仓库的索引。以下是podspec.json:

CocoaPods实践_第3张图片
podspec文件

还有一些字段在这个spec文件没有配置,例如resource_bundles,就不说明了。当执行pod install命令时,会根据podfile文件中列出的库名称及版本号去repos里面查找,然后找到对应的podspec.json,然后根据source和source_files找到github地址去下载。

1、创建私有Spec Repo

master文件夹是官方维护的,我们需要创建一个类似于master的repos,管理自己的私有库spec文件,终端执行:

pod repo add PFSpec https://coding.net/u/panfeng/p/PFBaseSDK

2、创建私有库项目

cd到要创建项目的目录并执行

pod lib create PFBaseSDK

PFBaseSDK是自定义的私有库项目名称,终端会让你确认5个问题

What language do you want to use?? [ObjC/ Swift ]

Would you like to include a demo application with your library? [Yes/ No ]

Which testing frameworks will you use? [Specta/ Kiwi / None ]

Would you like to do view based testing? [Yes/ No ]

What is your class prefix  ->PF

创建成功后进入demo,打开workspace

CocoaPods实践_第4张图片
工程目录

上面是demo工程,在podspec文件中配置一下,s.source_files和s.resource_bundles是私有库源文件、资源文件的地址。下面是Pods私有库工程,在classes文件夹下添加类,例如PFHTTPRequest。写好后cd到demo工程目录下,执行pod install,这样demo里面就可以引入写好的类PFHTTPRequest。

3、本地验证私有库

首先验证该项目能否被添加到pod repos中(warning会导致添加失败),终端执行:

pod lib lint

PFBaseSDK passed validation表示验证成功,然后将私有库项目push到远端仓库,仓库地址和pod repo add命令后面的仓库地址一致,同时打上tag版本号,例如0.1.3。接下来在本地项目中引入PFBaseSDK,cd到相应工程,修改podfile文件,添加

pod 'PFBaseSDK', :path =>'~/code/Cocoapods/podTest/PFBaseSDK'

在终端执行pod install ,此时项目中出现私有库,说明本地引入成功

CocoaPods实践_第5张图片
导入PFBaseSDK

4、提交podspec到Repos

在终端执行:

pod repo push PFSpec PFBaseSDK.podspec

将podspec提交到cocoapods的repos->PFSpec目录下,多出PFBaseSDK目录,里面是相应版本号的podspec

podspec
pod search

终端执行pod search PFBaseSDK,出现相应版本号的私有库,说明已上传至。cd到需要引入私有库的工程目录,修改podfile文件为pod ‘PFBaseSDK’ ‘0.1.3’,终端执行pod install命令,集成0.1.3的PFBaseSDK。

五、相关参考:

https://guides.cocoapods.org/syntax/podfile.html

http://www.cocoachina.com/ios/20150228/11206.html

http://www.cnblogs.com/brycezhang/p/4117180.html

你可能感兴趣的:(CocoaPods实践)