目录html
WHAT IS COCOAPODS
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 52 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.ios
CocoaPods 官网上的这段话翻译一下就是:CocoaPods是Swift和Objective-C Cocoa项目的依赖管理器。他拥有超过52000个库,并在超过300万个应用程序中使用。CocoaPods能够帮助您优雅地扩展项目。c++
简单来讲,就是能够帮助你方便地导入三方库,并导入库的依赖,免去了手动完成三方库导入配置。除了导入,你还能够利用CocoaPods搭建你本身的私有库体系。由于这些功能,CocoaPods基本上全部iOS 开发者都在使用。git
CocoaPods是使用Ruby构建的,因此须要在本地准备好Ruby环境。不过Mac默认已经有了Ruby环境,能够免去搭建Ruby环境了。打开终端(Terminal),咱们开始操做。github
RubyGems在国内的访问速度极其感人,因此要进行更换,换成国内的镜像源。例子中我使用的是 Ruby China 的源。api
查看当前的源,这个时候咱们能看到当前的源是 https://rubygems.org
ruby
$ gem sources -l
移除当前源,并添加新的源bash
# Ruby China有https和http两种源,我一开始添加的是https的源会报SSL错误,改为了http就没问题 $ gem sources --add http://gems.ruby-china.com/ --remove https://rubygems.org/
再次查看当前源,这个时候就变成了 http://gems.ruby-china.com
app
$ gem sources -l
安装,执行完下面的命令,等待一会就好ide
$ sudo gem install cocoapods # Mac OS X EI Capitan 之后系统请用下面这个安装命令 $ sudo gem install -n /usr/local/bin cocoapods # 卸载 $ sudo gem uninstall cocoapods
查看pod版本,验证是否安装成功
$ pod --version
在安装完成以后,进行设置。这一步的主要做用就是把官方的 Specs repo (The CocoaPods Master Repo) 拉到本地,本地仓库的存放目录是 ~/.cocoapods/repos/master
$ pod setup
友情提醒1,这一步很慢很慢,请耐心等待
友情提醒2,若是你很没有耐心,你能够偷懒从其余安装好了CocoaPods的电脑上,拷贝一份repos到你的电脑上
通过上面的折腾,CocoaPods已经安装成功了,咱们要用来管理依赖库了,下面以导入AFNetworking进行演示。
查看可用的三方库
$ pod search AFNetworking # Ctrl+Z 退出
从输出里,看到如今AFNetworking最新的版本是3.2.1。
终端进入工程目录,新建Podfile
$ cd ~/Desktop/CocoaPodsDemo/ $ pod init
编辑Podfile,vi
的相关操做自行了解
$ vi Podfile # 编辑完成以后,:wq 保存退出
导入
$ pod install
Pod install
成功以后,目录结构就变成了下面这个样子,双击 CocoaPodsDemo.xcworkspace
打开项目
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0'
这一段是指定工程所支持的最低系统版本
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks # use_frameworks!
这一段是设置是否以动态库的形式编译Pods
# use_frameworks
是以静态库的形式编译,产出的库是 .a
use_frameworks
是以动态库的形式编译,产出的库是 .framework
pod 'AFNetworking', '~> 3.2.1'
这一句是设置三方库, '~> 3.2.1'
是指定了库的版本。
有的时候也这么写,这样子就是导入最新版本的:
pod 'AFNetworking'
利用CocoaPods导入三方库,是大多数状况下的使用场景,可是CocoaPods还有一个大杀器是建立私有库。
开源三方库能用CocoaPods导入工程,是由于CocoaPods官方维护了一个公开的索引仓库。那么若是咱们本身维护私有库和私有的索引仓库呢?
为何私有库能被正确地导入工程,自动完成配置?这主要依赖的是Pod项目工程中的podspec文件。这个文件的建立有两种方法:
pod spec creare <库名>
新建podspec。这个更适合于把已有项目转为Pod项目pod lib create <库名>
,自动建立Pod项目工程。下面的演示就在这种形式上进行。pod lib create
是Pod提供的一个自动化建立私有pod工程的命令,实质上是下载一个Pod工程模板到本地,再作修改。命令在运行过程当中,会弹出几个配置项进行配置,按需设置就行,很简单。
$ cd ~/Desktop $ pod lib create MyUtils
看一下MyUtils的目录结构,Example目录是测试工程,MyUtils是私有库代码。咱们双击Example里的MyUtils.xcworkspace
打开这个工程。
我这里就简单写一个测试类 MUAppInfo
,写完以后再 pod install
进行开发模式下的导入,我把这个测试项目放到了码云上面 :
MUAPPInfo.h
MUAPPInfo.m
MUViewController.m
Podspec是这个pod的配置文件,当咱们引用这个pod到工程的时候,就会按这个文件里的配置项进行配置。这边顺便提一下,podspec是Ruby文件,咱们能够用 Visual Studio Code 再装上Ruby插件来编辑,真的很好用。
那咱们来看一下 MyUtils.podspec
这个文件,通过配置以下(能够做为模板使用):
Pod::Spec.new do |s| s.name = 'MyUtils' s.version = '0.1.0' s.summary = 'MyUtils' s.description = <<-DESC CocoaPods私有库测试工程 DESC s.homepage = 'https://gitee.com/vincedev/MyUtils' # 证书 s.license = { :type => 'MIT', :file => 'LICENSE' } # 做者信息 s.author = { 'superman' => 'superman@gmail.com' } # 源地址 s.source = { :git => 'https://gitee.com/vincedev/MyUtils.git', :tag => s.version.to_s } # 支持最低系统版本 s.ios.deployment_target = '8.0' # 源文件 s.source_files = 'MyUtils/Classes/**/*' # 公开的头文件 s.public_header_files = 'MyUtils/Classes/**/*.h' # 资源,多个用逗号隔开 # s.resource = 'MyUtils/Assets/resource.bundle' # 是否arc s.requires_arc = true # 依赖的系统Frameworks,多个用逗号隔开 s.frameworks = 'UIKit' # 依赖的系统Library,多个用逗号隔开 # s.libraries = 'stdc++.6.0.9' # 依赖的三方库,有多个依赖就写多行 # s.dependency 'AFNetworking', '~> 2.3' # s.dependency 'MJRefresh' end
Podspec写好了,接下来须要验证是否正确,验证也有两个方法 pod spec lint
和 pod lib lint
:
# 会去匹配 s.source 的配置 $ pod spec lint # 不指定,默认当前文件夹内的podspec $ pod spec lint MyUtils.podspec # 指定podspec # 忽略 s.source 的配置 $ pod lib lint # 不指定,默认当前文件夹内的podspec $ pod lib lint MyUtils.podspec # 指定podspec
当看到终端打印 passed validation.
,就说明验证经过,不经过就根据提示进行修改。
当验证经过以后,打上tag,推送到远程仓库
$ git tag 0.1.0 $ git push origin --tags # 推送到远程
其实私有 Specs repo 不是必须的,它的做用是让你在导入私有库的时候像导入官方开源库同样,可是我以为更大的做用是解决私有库间的互相依赖。
若是该私有库没有依赖其余私有库,能够直接这样导入:
pod 'MyUtils', :git => 'https://gitee.com/vincedev/MyUtils.git'
那接下来进行私有 Specs repo 的建立,打开 ~/.cocoapods/repos
目录,就看到里面只有 master
这个目录,该目录即存放着上面咱们提到的官方 Specs repo
。咱们来添加本身的 Specs repo
:
VinceSpecs
项目添加到本地 repos
目录
pod repo add VinceSpecs https://gitee.com/vincedev/VinceSpecs
添加完成以后,~/.cocoapods/repos
目录下就多了一个 VinceSpecs
目录。
$ cd ~/Desktop/MyUtils $ pod repo push VinceSpecs MyUtils.podspec
添加成功以后,就能看到 ~/.cocoapods/repos/VinceSpecs
多了 MyUtils
,VinceSpecs
的远程仓库同步更新了。
这里拿出上面的 CocoaPodsDemo
这个工程进行测试,编辑 Podfile ,编辑完成以后执行 install
这一步的重点在于指定私有 Specs repo
仓库,并且还要指定官方的 Specs repo
仓库。
这篇文章算是我本身在使用CocoaPods过程当中的一个入门记录,私有库建立中还踩了不少坑,这里就不写了,请看下回分解吧。若是各位看管搜到了这篇文章并耐心看完了,本文如对你有所帮助,烦请点个赞,谢谢!!!保佑看官们代码无bug!!!
本人就任于甜橙金融信息技术部,负责翼支付iOS客户端开发,喜欢数码科技,喜欢研究技术,深度代码洁癖患者。