Cocoapods 安装及使用

什么是 CocoaPods

CocoaPods是一个用Ruby写的,用作 Swift 和 Objective-C 项目的依赖管理器。

CocoaPods 的安装

CocoaPods 是用 Ruby 构建的,它可以使用 macOS 上可用的默认 Ruby 进行安装。也可以使用 Ruby 版本管理器。

注意:CocoaPods 的版本安装会受到 Xcode 版本的影响

默认 Ruby 安装

使用默认的 Ruby 安装将要求 在安装 gems 时使用 sudo

sudo gem install -n /usr/local/bin cocoapods

无 Sudo 安装

  • 使用 --user-install 安装

    1. ~/.zshrc配置环境变量

      export GEM_HOME=$HOME/.gem
      export PATH=$GEM_HOME/bin:$PATH
      PATH="`ruby -e 'puts Gem.user_dir'`/bin:$PATH"
      
    2. 安装 Cococapods

      gem install cocoapods --user-install
      
  • 使用 rvm 管理的 ruby 安装,关于 rvm 的安装可以参照

    gem install cocoapods
    

Pod Setup

  • MacOS Catalina 及以后的系统,可替换镜像源

    git clone https://github.com/CocoaPods/Specs.git ~/.cocoapods/repos/trunk
    
  • MacOS Catalina 以前的系统

    pod setup
    
  • 添加 私有源或镜像源

    pod repo add REPO_NAME SOURCE_URL
    

CocoaPods 的 specs repo 默认在 ~/.cocoapods/repos 路径,Cache 默认路径在 ~/Library/Cache/CocoaPods

使用 CococaPods

初始化 Pod

pod init

部分 Command Line API

Cocoapods Command-Line

#下载并安装所有依赖项
pod install
#更新依赖库
pod update
#查找可更新的库
pod outdated
#删除项目中的 CocoaPods
pod deintegrate
# 搜索
pod search

编辑 Podfile

# 指定的 workspace,可选
workspace 'MyWorkspace'
# 指定的 project,可选
project 'Myxcodeproj'
# 不指定会默认,可配置镜像源、私有源
source 'https://github.com/CocoaPods/Specs.git'
# 支持的平台和版本
platform :ios, '9.0'
# 可忽略引用库的所有警告
inhibit_all_warnings!
# 抽象的 Target 用于多个 Target
abstract_target 'Shows' do
  # 尽可能不使用 动态库
  #use_frameworks!
  # 添加需要的 Pod
  pod 'testPod'
  # 添加指定版本的 Pod
  #'> 0.1'任何高于 0.1 的版本
  #'>= 0.1'0.1 版及更高版本
  #'< 0.1'任何低于 0.1 的版本
  #'<= 0.1'版本 0.1 和任何更低版本
  pod 'testVersion','1.1.0'
  # 添加指定 configutartion 的 Pod 
  pod 'testConfigutartion',:configutartions =>['Debug']
  # 添加从指定Git仓库下载指定 Tag 的Pod
  pod 'testGitSource',:git=>'https://github.com/test/testGitSource.git',:tag=> '1.0.0'
  # 添加指定本地路径的 Pod
  pod 'testLocal', :path => '../code/Pods/'

  # Has its own copy of ShowsKit + ShowWebAuth
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # Has its own copy of ShowsKit + ShowTVAuth
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end
end

什么是 Podfile.lock?

Podfile.lock 文件是在第一次运行 pod install 后生成的,并跟踪已安装的每个 Pod 的版本。通过这种方式,CocoaPods 避免了因依赖项发生意外更改而引起的问题。

Pod install 做了什么?

  1. 创建或更新 workspace
  2. project 添加到 workspace
  3. 将 CocoaPods 静态库添加到 workspace
  4. libPods.a 添加到:targets => build phases => link with libraries
  5. 将 CocoaPods 的 xcconfig 文件添加到应用程序的项目中。
  6. 将应用的 target xcconfig 更改为基于 CocoaPods 的配置。
  7. 添加构建阶段以将资源从安装的任何 pod 复制到应用程序包。即在所有其他构建阶段之后的“脚本构建阶段”,具有以下内容:
    • Shell:/bin/sh
    • Script::${SRCROOT}/Pods/PodsResources.sh

什么时候使用 pod install

将在第一次要检索项目的 pod 时使用,也可以在每次编辑 Podfile 以添加、更新或删除 pod 时使用。

  • 每次pod install运行命令时,会下载和安装新的 Pod,它都会在 Podfile.lock 文件中写入为每个 Pod 安装的版本。 Podfile.lock 文件跟踪每个 Pod 的已安装版本并锁定这些版本。
  • 当运行 pod install,只会解析 Podfile.lock
    • 对于 Podfile.lock 文件中已经列出的 Pod,会下载其对应版本,不会尝试检查是否有更新的版本可用
    • 对于 Podfile.lock 文件中未列出的 Pod,会搜索与Podfile(如pod 'MyPod', '~>1.2')中描述的版本相匹配的版本,如果未指定版本,则会下载最新的版本

pod update 做了什么?

运行时pod update,CocoaPods 会尝试查找每个 pod 的更新版,而不考虑 Podfile.lock 文件. 它会将 pod 更新到可能的最新版本(只要它符合Podfile 中的版本限制),更新之后会修改 Podfile.lock 中 Pod 的版本。

正确地使用 pod update

建议使用pod update [podname] ,将只能更新特定的 pod(检查是否存在新版本并相应地更新 pod)。与之相反,pod install 它不会尝试更新已安装的 pod 版本。

是否将 Pods 目录加入源代码管理中

加入 Pods 目录的好处
  • 克隆 repo 后,项目可以立即构建和运行,即使机器上没有安装 CocoaPods。无需运行pod install,也无需联网。
  • Pod 始终可用,即使 Pod 的源(例如 GitHub)出现故障。
  • 克隆 repo 后,Pod 保证与原始安装中的相同。
忽略 Pods 目录的好处
  • 源代码控制 repo 会更小,占用更少的空间。
  • 只要所有 Pod 的源(例如 GitHub)都可用,CocoaPods 通常能够重新创建相同的安装。
  • 执行源代码控制操作时不会有任何冲突需要处理,例如合并具有不同 Pod 版本的分支。

注:无论 Pods 是否加入源代码管理,PodfilePodfile.lock 都应始终处于版本控制之下。

CocoaPods 插件

如何安装插件

  1. 安装 gem 包

    • 使用 gem 命令安装

      gem install [插件名称]
      
    • 编辑 Gemfile,使用 bundler 安装,可用于团队协作

      source 'https://rubygems.org'
      
      gem 'cocoapods'
      gem 'cocoapods-binary'
      
  2. Podfile 中添加

     platform :ios, '9.0'
    + plugin 'cocoapods-repo-update'
      use_frameworks!
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容