1. CocoaPods 使用

CocoaPods 为你的项目管理 lib 的依赖。cocoaPods 的使用时基于 Gem 的。

1、 gem 的使用

gem 是 ruby 的包管理工具,ruby 的各种插件是通过 gem 来安装的。 cocoapods 就是 ruby 开发的一个插件。 ruby 中文社区

在使用 gem 来安装 CocoaPods 的时候建议先更新 gem 的版本。(gem 是 mac 自带的我们不需要安装)

当 ruby 版本过老的情况下我们还需要更新 ruby 的版本。

# 查看版本
$ gem --version
# gem自身升级, 这个主要是解决 gem 版本过老导致 cocoapods 不能使用的问题
$ sudo gem update --system
# 列出本地安装的包
# 可用查看安装了多少个版本的 CocoaPods,可以对老版本的进行卸载
$ gem list
# 更新包(所有的)
$ sudo gem update
# 清除过期的gem
$ sudo gem cleanup

注意:
以上操作是建立在 gem 服务器良好的情况下进行的。(ruby 的软件源 https://rubygems.org 因为使用的是亚马逊的云服务,所以被墙了,需要更新一下 ruby 的源,使用如下代码将官方的 ruby 源替换成国内淘宝的源)

# 查看gem源
$ gem sources –l
# 添加源
# (这个是阿里在国内做的一个镜像源)
$ sudo gem sources -a https://ruby.taobao.org/ 
# 删除源
# (这个是系统默认的源)
$ sudo gem sources -r https://rubygems.org/  

以上 gem 的配置基本搞定。

2、CocoaPods 的安装:

# 安装 cocoapods 包
$ sudo gem install cocoapods

当 cocoapods 的在安装过程中出现了问题请打开这个指南

执行 sudo gem install cocoapods 出现下列错误, 对于安全进行了升级。开启了rootless 权限。

Snip20161226_2.png

命令改为:
sudo gem install -n /usr/local/bin cocoapods

可以避免 rootless 权限造成的不能读写的问题。

CocoaPods 的其他操作
当 cocoapods 出现问题或 cocoapods 的版本需要更新的时候我们需要使用下面的命令。

# 卸载 cocoapods 包
$ sudo gem uninstall cocoapods
# 更新 cocoapods 包
$ sudo gem update cocoapods

最简单的 cocoapods 的更新是再一次安装 cocoapods

# 在已经安装 cocoapods 的情况下执行这个命令可以更新 cocoapods 
# 但是 gem list 中会存在 多个 cocoapods 包。(最近测试没有出现这个问题)
$ sudo gem install cocoapods

安装 gem 的 预览版

$ sudo gem install cocoapods --pre

pod 初始化

# 设置 cocoapods 初始化 , 这个操作可能等待的时间过于长久
# 其实是 Cocoapods 在将 podspec索引文件 下载到 ~/.cocoapods目录下
# 如果你等太久,可以试着 cd   ~/.cocoapods 到那个目录,用du -sh *来查看下载进度。
# 全部下载完大概 800M左右 (随着 cocoapods 的使用这个值会增大), 这么大时间不久才怪。
$ pod setup 

当一段时间没有使用 CocoaPods,在使用 CocoaPods 之前先执行下面这个指令

# 更新仓库 (将更新的podspec下载到本地)
# 更新 podspec索引文件
$ pod repo update 

3、CocoaPods 的使用

1. 单一Target的项目中使用 CocoaPods

一般情况下, 我们是在现有的工程中加入 cocoapods 来引入第三方框架。

初始环境
项目中只有一个 target, 且没有用到 Workspace 。

使用终端操作
纯属装逼

  1. 确认框架是否可用
# 搜索 AFNetworking 框架(在本地搜索)
# 查看  AFNetworking 的可用版本
#(建议执行 pod update 指令后再进行 pod search 操作)
$ pod search AFNetworking
  1. 在项目文件夹中创建 Podfile 文件并指定库依赖
    必须是 [project name].xcodeproj 文件所在的路径。
# 切换到当前项目的文件夹路径
$ cd [项目路径]

创建 podfile 文件

# 这个这个命令就可以在当前文件夹下创建 podfile 文件 
$ pod init 

我特别喜欢这个指令
(使用这个指令不需要执行 pod init 指令)
vim Podfile , 如果当前文件夹下没有 Podfile 就会创建 Podfile 文件,并用 vim 编辑器打开

# 创建并编辑 podfile 文件 (这个是使用 vim 编辑器,创建以备文件,
# 并使用 vim 编辑器进行编辑)
$ vim Podfile 

编辑 lib 的依赖信息

  # 使用时需要新建一个名为 Podfile 的文件,以如下格式,将依赖的库名字依次列在文件中即可
  # 指定平台和系统版本
  platform :ios, '8.0'

  # 表示可以使用 swift 的框架
use_frameworks!

  # 这个是 cocoapods 升级 1.0 后必须的
 #  MyApp 就是 TARGET NAME
target 'MyApp' do

      # 指定库 和 库的版本
      pod 'JSONKit',       '~> 1.4'
      pod 'Reachability',  '~> 3.0.0'
      pod 'ASIHTTPRequest'
      pod 'RegexKitLite'
end
  1. 安装框架
# 安装 podfile 指定的框架
$ pod install
  1. 打开 App.xcworkspace 并进行编译
  2. 框架的升级或框架更新
# 升级框架
# 当需要更新框架的时候可以执行这个命令
# 可以在不使用 pod install 的情况下直接使用 pod update
$ pod update

每次更改了 Podfile 文件,你需要重新执行一次pod update命令。

特殊处理
已经存在的 workspace 的 cocoapods 集成
在 podfile 的最后单独的一行 指定(也可以是开始的第一行,不建议写在中间)

workspace 'MyWorkspace'    # MyWorkspace 可以任意指定。
# 在执行 pod install 的时候 会根据  MyWorkspace 生成 MyWorkspace.xcworkspace 文件。

2. 多个 target 的项目中使用 cocoapods

多 target 是基于 workspace 存在的。

目录结构

Snip20161009_1.png

** workspace 中的结构**
workspace project 是通过手动拖入的。


Snip20161009_2.png

为了使 cocoapods 不依赖于某个 project , 我们将 Podfile 文件和 .workspace 文件同文件夹。

使用终端

# 切换到   .workspace 所在目录
$ cd [Workspace name] .workspace
$ vim Podfile

编辑 Podfile 文件

# 指定  workspace 
# 指定后不会生成默认的 workspace 文件
workspace ‘myWorkspace’

#  指定 workspace
workspace ‘MyWorkspace’

# cocoapods 会用在 swift 项目
use_frameworks!
    
# 指定 target
target 'aProject' do
    # 由于 Podfile 和  .xcodeproj 不在同一文件夹下
    # 需要指定路径
    #  xcode 项目可以存在任何的子路路径中,只需要指定正确的路径就可以
    project ‘aProject/aProject.xcodeproj’
 
    #  在每一个 project 下都导入 SnapKit 进行测试
    pod "SnapKit"
end

target 'bProject' do
    project 'bProject/bProject.xcodeproj’
    pod "SnapKit"
end

target 'aFramework' do
    project ‘aFramework/aFramework.xcodeproj’
    pod "SnapKit"
end

target 'bFramework' do
    project ‘bFramework/bFramework.xcodeproj’
    pod "SnapKit"
end

安装框架

# 安装 podfile 指定的框架
$ pod install

重新 打开 workspace 文件

Snip20161009_3.png

在每一个 project 中都可以正常的使用 SnapKit 框架。

在 workspace 的多 project 的使用中,我们还可以直接在 aProject 和 bProject 中导入 aFramework 和 bFramework 进行使用。

Snip20161009_4.png

测试项目地址https://github.com/zhuohongxiao/CocoapodsTest

4. cocoapods 的使用过程中出现的问题解决方案:

1. 去除第三方库的警告

# 这个是全部去除
$ inhibit_all_warnings!
# 去除指定框架的警告
$ pod 'ReactiveCocoa', '~> 2.4', :inhibit_warnings => true

2. CocoaPods pod install/pod update更新慢的问题

更新慢的原因主要有两个:

  1. 你本地的repo库太长时间没有更新,需要下载的内容太多。执行 pod repo update 更新主仓库就会显的很慢。
  2. 执行 pod install 和 pod update 的时候 会同时执行 pod repo update ,在网络情况不好的时候就会显的很慢。

CocoaPods 在执行pod install和pod update时,会默认先更新一次podspec索引。
使用--no-repo-update参数可以禁止其做索引更新操作 (在网络不好和没有网的情况下建议使用这俩指令)

$ pod install --verbose --no-repo-update
$ pod update --verbose --no-repo-update

这个指令和上面的是同一样的效果

$ pod install --no-repo-update 
$ pod update --no-repo-update

根据唐巧博客的介绍,为了加快 pod install 或 pod update 的执行,我们还可以使用国内的 spec.git 的镜像。

  1. 用CocoaPods做iOS程序的依赖管理

3、 cocoapods 升级的问题:

# 先查看版本
$ pod --version 
# 先更新 gem  
# 有时候会因为 gem 的版本的原因导致安装或更新失败
$ sudo gem update --system 
# 更新 cocoapods 包
$ sudo gem update cocoapods
# 再执行初始化设置
$ pod setup

** 4. pod setup 报CocoaPods was not able to update the master repo 错误解决办法**
这个问题解决的根本性的办法就是将 cocoapods 的主仓库删除,并清除缓存,将 cocoapods 进行重装。

先删除全局的缓存:
$ sudo rm -fr;
$ sudo rm -fr ~/.cocoapods/repos/master/
还不行的话就把当前 Pods 目录清空:
$ sudo rm -fr Pods/
// 再执行
$ sudo gem install cocoapods
$ pod setup 看看还有没有报错

5. Pods目录是否需要添加到源代码控制?

Pods 文件夹是否添加到版本控制由你决定,工作流因项目而异。我们建议你保持Pods目录在源代码控制下, 不要将它添加到您的.gitignore。
但最终由你决定:

检查 Pods 文件夹检查的好处

  1. 克隆这个仓库后,即使你的机器上没有安装 cocoapods 该项目可以立即构建和运行。不需要pod install, 不需要网络连接。
  2. Pod 组件(代码/类库文件)总是可以用的。即使 pod 的 github 上的源代码已经 down( 损坏 )
  3. Pod 组件保证和原始安装的的克隆下来的代码相同

忽略 Pods 文件夹的好处

  1. 源控制仓库将占据更少的空间
  2. 要保证所有的 Pods 的 github 的源代码是可用的。CocoaPods通常能够重建相同的安装。(技术上没有保证舱安装运行时获取和重现相同的工件不使用commit Podfile沙。尤其是当使用Podfile zip文件。)
  3. 源代码控制操作不会有任何的冲突

无论 pods 文件夹是否被检查, PodfilePodfile.lock 将总是在这个版本控制下。

6、 Podfile.lock

这个文件才是最终确定第三方框架的依赖关系的。是在执行 pod install 指令后自动生成的。 Podfile.lock 应该加入到版本控制里面,不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后只有在执行 pod intallpod update 的情况下才会更新 Podfile.lock 文件 。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致。

工具推荐

** cocoapos 插件的安装:**

curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh

个人强烈建议:
每天使用 cocoapods 的时候先执行:

pod update 

参考学习博客:
用CocoaPods做iOS程序的依赖管理

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

推荐阅读更多精彩内容

  • CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。CocoaPo...
    朝洋阅读 25,473评论 3 51
  • 一. CocoaPods的介绍 什么是CocoaPods?CocoaPods是一个负责管理iOS项目中第三方开源库...
    辉712阅读 3,872评论 0 7
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 20,495评论 0 39
  • 如果你从肯定开始,必将以问题告终,如果从问题开始,则将以肯定结束。——培根 阅读的本质是思维,而思维的起点是疑问。...
    sly61阅读 2,819评论 3 16
  • 头天晚上因为继续作业和睡觉的事和儿子闹僵了,儿子反锁了房门,我断了家里的WiFi和房间电源,我是一点半才睡下,不知...
    瑾言珅行阅读 175评论 1 2