最近在学习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文件
接下来配置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工程里面导入第三方库开发了。
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:
还有一些字段在这个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
上面是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 ,此时项目中出现私有库,说明本地引入成功
4、提交podspec到Repos
在终端执行:
pod repo push PFSpec PFBaseSDK.podspec
将podspec提交到cocoapods的repos->PFSpec目录下,多出PFBaseSDK目录,里面是相应版本号的podspec
终端执行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