1.什么是CocoaPods?
2.公司项目中Pod库的介绍.
3.如何搭建Pod库?
在2008年夏天iPhone OS开始对第三方开发者开放,就在此时GitHub也刚刚发布,一大批开源项目开始涌现,涌入了上百万开发者,这种新的分布式合作开发方式改变了我们对开源的认知. 就在Objective-C开源开发渐入佳境之时,代码分发的痛点开始显现:
•缺乏框架,iOS的代码虽然可以被打包成静态库,但是配置和同步分发却成了一个艰巨的任务。 •另外一个思路是用Git Submodules把源码直接放入项目。但是链接框架和配置生成环境的繁琐也使得这种方法也没有好到哪里去,尤其是当ARC和 non-ARC的代码需要分开的时候。
•在这种难题的困扰下,2011年8月12日Eloy Durán创建了CocoaPods,CocoaPods被设计成即能处理库之间的依赖关系,又能自动下载并且配置好所需要的库,给开发带来了极大的便捷。 •核心组件:CocoaPods是用ruby(一种面向对象的脚本语音)写的,并划分成了若干个Gem包(gem是一种文件组织的包,一般ruby的很多插件都有由这种包提供。) 。CocoaPods在解析执行过程中最重要的几个包的路径分别是: CocoaPods/CocoaPods、 CocoaPods/Core、 CocoaPods/Xcodeproj。
•CocoaPods / CocoaPod:这是面向用户的组件,每当你执行一个pod命令时,这个组件将被激活。它包括了所有实用CocoaPods的功能,并且还能调用其他gem包来执行任务。 •CocoaPods / Core:Core gem提供了与CocoaPods相关的文件(主要是Podfile和PodSpecs)的处理。 •Podfile:Podfile用于配置项目所需要的第三方库。它能被高度定制,所以你可以尽可能地给它添加你想要的特性。如果您还想对Podfile了解更多的话,请查看Podfile指南(地址 http://guides.cocoapods.org/syntax/podfile.html)。
•podspec文件描述了一个库将怎样被添加进工程中。.podspec文件可以标识该第三方库所需要的源码文件、依赖库、编译选项,以及其他第三方库需要的配置。
•银天下APP
•YTXUtilCategory为例:先介绍podspecs文件
•其中s.name和s.summary用来声明库的名称和一个简短摘要。pod search命令就是根据这两项内容作为搜索文本的。 s.homepage声明库的主页 s.version是库原代码的版本 s.license所采用的授权版本 s.author库的作者 s.source 声明原代码的地址
•创建之前先安装CocoaPods。 •安装CocoaPods之前,首先要在本地安装好Ruby环境,mac电脑自带Ruby环境,不需要安装了。用过终端命令: •Sudo gem install cocoapods •安装的时候你会发现特别慢,因为mac的ruby镜像(通过gem sources –l查看)是https://rubygems.org/,在国内访问比较慢。
•解决方案:将ruby镜像换成国内的淘宝镜像 •在终端执行以下命令: •gem sources --remove https://rubygems.org/ 等有反应之后再输入下面命令 •gem sources –a https://ruby.taobao.org/ 为了验证你的ruby镜像只有淘宝用命令 gem sources -l 只有在终端中出现下面文字才表明你上面的命令是成功的: *** CURRENT SOURCES *** https://ruby.taobao.org/
•等淘宝镜像替换成功后,在终端输入以下命令: sudo gem install cocoapods 等上十几秒cocoapod就在本地安装成功了,不再需要其他设置了。
•执行sudo gem install cocoapods出现错误 ERROR: While executing gem.(Errno::EPERM) Operation not permitted - /usr/bin/xcodeproj 原因:Mac系统升级导致gem的环境配置发生改变. 解决方案:重新配置gem的环境变量(终端命令) •export GEM_HOME=$HOME/.gem •export PATH=$GEM_HOME/bin:$PATH
•环境变量配置完以后 执行 •gem install cocoapods --user-install •安装完成以后通过命令:which pod 可查看cocoapod的安装路径 •通过命令:pod --version 查看pod的版本(目前安装的版本0.39.0),官方目前是1.0beta版。
•选择你要创建pod库的路径
•通过终端来创建:pod lib create pod库名称
运行结果:
•接下来配置podspecs文件 •s.summary = “摘要” •s.description = “描述”(长度不可短于s.summary否则lint 报错) •s.homepage = “” •s.source = “”(s.homepage加上后缀.git) •配置完成后进行lint (对podspecs进行编译) •Lint方法:终端 pod lib lint •Lint成功提示:*** passed validation
•Lint成功后,向工程添加代码文件
•添加成功以后编译运行。
•编译成功后将代码托管到开源网站管理(gitlab)
•操作: git init (初始化git仓库)
git remote add origin ****(配置远程服务器)
git add . git commit –am ‘’(本地提交)
如果需要对pod库进行版本管理则需要给工程注入tag标签:
git tag 0.1.0
最后将代码和标签推到远端服务器托管
git push --tag
git push –u origin master
•要想别人使用你的库需要创建私有的SpecRepo。
•什么是Spec Repo:简单的说它是所有的Pods的一个索引,就是一个容器,所有公开的Pods都在这个里面.
•使用方法如下:
在gitlab上创建私有的spec库,便于管理你创建的podspec文件
•创建成功后继续创建本地私有的repo :
•在终端执行以下命令:
pod repo add REPO_NAME SOURCE_URL
(名称和地址是刚刚创建的远程specs库名称和地址)
这步的操作是将你的pod库地址存放到容器中最后将repo 推到刚才创建的远端私有的specs库中,远端的specs库管理你所有的podspecs文件(本次操作在构建pod库过程中只使用一次).
执行终端命令:
pod repo push REPO_NAME 工程名.podspecs –verbose
•版本号使用形式:~>, >=, <, <= •例如: •pod ‘AFNetworking’, ’~>1.0' 版本号可以是1.0,可以是1.1,1.9,但必须小于2 •pod 'AFNetworking', '1.0' // 版本号指定为1.0
•'> 0.1.1' 0.1.1以上 •'>= 0.1.1' 0.1.1以上,包括0.1.1 •'< 0.1.1' 0.1.1以下 •'<= 0.1.1' 0.1.1以下,包括0.1.1 •'~> 0.1.2' 0.2以下(不含0.2),0.1.2以上(含0.1.2) •'~> 0' 0和以上,等于没有此约束