Cocoapods 安装及使用

它是用 Ruby 写的,并划分为多个 gem 包。它依赖于 Ruby 环境。

安装步骤

1. 更新系统 Ruby 环境

# 这一步骤需要科学上网
$ sudo gem update --system

# 查看已安装的 Ruby 版本(最新版本:3.0.6,截止20200430)
$ gem -v

2. 安装 CocoPods 前先替换镜像源

默认的镜像资源服务器被天朝给墙了。所以需要先更换源地址,然后再安装。

  • 移除原先的 Ruby 源:
$ gem sources --remove https://rubygems.org/
$ gem sources --add https://gems.ruby-china.com/

🔗 相关链接:Ruby China 的 RubyGems 镜像上线

  • 验证新源是否替换成功:
$ gem sources -l
*** CURRENT SOURCES ***

https://gems.ruby-china.com/

3. 安装 CocoaPods

使用 ruby 的 gem 命令下载并安装 CocoaPods。

  1. $sudo gem install cocoapods
    备注:以上命令在 Mac OS 系统升级到 OS X EL Capitan 版本后需要改为 : $ sudo gem install -n /usr/local/bin cocoapods

  2. $ pod setup

使用 CocoaPods 的镜像索引

所有项目的 Podspec 文件都托管在 https://github.com/CocoaPods/Specs 中。第一次执行 pod setup 时,CocoaPods 会将这些 Podspec 索引文件更新到本地的 ~/.cocoapods/目录下,该索引文件较大且更新非常缓慢。

将 CocoaPods 设置成 gitcafe 或者 occhina 镜像,执行索引更新时会快很多。

pod repo remove master
pod repo add master https://gitcafe.com/akuandev/Specs.git
pod repo update

也可以将以上代码中的 https://gitcafe.com/akuandev/Specs.git 替换成 http://git.oschina.net/akuandev/Specs.git 即可使用 occhina 上的镜像。

添加新源时报错:

➜  ~ pod repo add master https://git.coding.net/CocoaPods/Specs.git
[!] To setup the master specs repo, please run `pod setup`.
➜  ~ git clone https://git.coding.net/CocoaPods/Specs.git ~/.cocoapods/repos/master

—— 参考自:https://lamjack.github.io/2016/cocoapods-install-and-use/

搜索相关框架

打开终端,输入以下命令:

pod search 框架名

# 如,搜索网络框架 AFNetworking
pod search AFNetworking

链接:mac终端命令

移除 trunk 源

如果执行 pod 相关命令时,显示 CDN 无法连接、连接超时之类的情况,可以移除 trunk 源,然后在 Podfile 文件中第一行指明依赖库的来源地址,不使用默认 CDN。

$ pod repo remove trunk

项目中使用:

  1. 创建 Podfile 文件。

    新建 Xcode 项目,在终端里 cd 到项目的主文件夹(就是包含 项目.xcodeproj 的文件)。执行命令:

    # 1. 创建 Podfile 文件
    $ pod init
    
    # 2. 编辑 Podfile 文件
    $ vim Podfile
    
  2. 编辑 Podfile 文件。

    执行 vim Podfile 命令后,会打开上一步骤创建的 Podfile 文件,你需要通过 vim 编辑此文件,默认进入命令模式

    编辑 Podfile 文件时,至少需要会使用的几个 shell 命令:

    键盘命令 描述
    i input,输入模式
    ESC 输入模式退出到命令模式
    shift + : 命令模式下,输入该键盘组合命令,就会进入末行模式
    wq 末行模式下,输入 wq ,即 write and quit,保存并退出!
  3. 保存文件后,安装第三方库。
    更新依赖库,执行 pod update(记得cd 到项目主文件下)。
    安装依赖库,执行 pod install

  4. 安装完成,此时项目文件中会多出 .xcworkspace 文件,以后就通过它来打开项目。

Podfile 文件示例

# 指明依赖库的来源地址,不使用默认 CDN
source  '[https://github.com/CocoaPods/Specs.git](https://github.com/CocoaPods/Specs.git)'

# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# 屏蔽所有第三方框架警告
inhibit_all_warnings!    

target 'ProjectName' do

  # Uncomment this line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for ProjectName

  # 网络库
  pod 'AFNetworking'
  pod 'YTKNetwork'
  pod 'SDWebImage'
  pod 'Reachability', '~> 3.2'

  # 服务类
  pod 'QQ_XGPush'
  pod 'Bugly'

  # UI
  pod 'Masonry'
  pod 'MBProgressHUD'
  pod 'MJRefresh'
  pod 'EAIntroView'
  pod 'SDCycleScrollView'
  pod 'DZNEmptyDataSet'
  pod 'XLForm'
  pod 'SHSPhoneComponent'
  pod 'BEMCheckBox'
  pod 'SCLAlertView-Objective-C'

  # 工具组件类
  pod 'ChameleonFramework'
  pod 'FDFullscreenPopGesture'
  pod 'IQKeyboardManager'
  pod 'YYKit'
  pod 'UIAlertController+Blocks'
  pod 'LBXScan/LBXNative'
  pod 'LBXScan/UI'
  pod 'UITableView+FDTemplateLayoutCell'

end

target 'ProjectNameTests' do
  inherit! :search_paths
end

"Podfile" 52L, 999C

More:

Podfile 版本号含义:

= version 要求版本大于或者等于version,当有新版本时,都会更新至最新版本
< version 要求版本小于version,当超过version版本后,都不会再更新
<= version 要求版本小于或者等于version,当超过version版本后,都不会再更新
~> version 比如 version=1.1.0 时,范围在[1.1.0, 2.0.0)。注意2.0.0是开区间,也就是不包括2.0.0。

常用命令 Cheatsheet

以下是我整理的一份 Cocoapods 常用命令。

###### 安装 Cocoapods ######

# 更新 gem 版本
$ sudo gem update --system

# 查看已安装的 Ruby 版本
$ gem -v

# 替换 Ruby 源
$ gem sources --remove [https://rubygems.org/](https://rubygems.org/)
$ gem sources -add [https://gems.ruby-china.com/](https://gems.ruby-china.com/)

# 查看验证镜像源
$ gem sources -l

# 卸载 Cocoapods
$ sudo gem uninstall cocoapods

# 重新安装 Cocoapods 到指定目录
$ sudo gem install cocoapods -n /usr/local/bin

# 查看当前 Cocoapods 版本
$ pod --version

# 更新本地的 Cocoapods 列表
$ pod repo update

# 移除 trunk 源
$ pod repo remove trunk

###### 项目中使用 ######

# 搜索框架
$ pod search 框架名

# 终端导航到项目目录下
$ cd [Project]

# 创建 Podfile 文件
$ pod init

# 编辑 Podfile 文件
$ vim Podfile

# 安装
$ pod install

# 更新所有依赖的开源库
$ pod update
$ pod install --no-repo-update
$ pod update --no-repo-update

# 查看依赖库版本信息
$ pod install --verbose --no-repo-update

常见错误

错误 1

Error fetching http://ruby.taobao.org/:
bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)

解决方案:把安装流程中 gem sources -a http://ruby.taobao.org/ 改为 gem sources -a https://ruby.taobao.org/

错误 2

ERROR:  While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/pod

解决方案:苹果系统升级OS X EL Capitan后会出现的插件错误,将安装流程安装CocoaPods 的 (1) sudo gem install cocoapods ——>改为 sudo gem install -n /usr/local/bin cocoapods 即可。

错误 3

ERROR:The dependency is not used in any concrete target
The dependency AFNetworking is not used in any concrete target

解决方案:

  1. 安装cocoapods的预览版本

    sudo gem install cocoapods --pre
    
  1. 修改Podfile格式

    platform :ios, '8.0'
    
    target 'MyApp' do
    
    pod 'AFNetworking', '~> 2.6'
    pod 'ORStackView', '~> 3.0'
    
    end
    

    *里面的 MyApp 记得替换为自己攻城里面的target。

  1. 更新pod

    pod install / pod update
    

错误 4

error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54

SSL证书错误,解决方案参考:https://gems.ruby-china.org/

vim ~/.gemrc  # 配置该文件,关闭SSL验证

文件如下:

---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://gems.ruby-china.org/
:ssl_verify_mode: 0   # 新增此处代码
:update_sources: true
:verbose: true

错误 5

RPC failed; curl 18 transfer closed with outstanding read data remaining

解决方案,增加缓冲区内存:

git config http.postBuffer 524288000

错误 6

Xcode 9.3 下运行 pod init 报错:

Error

RuntimeError - [Xcodeproj] Unknown object version.
/usr/local/lib/ruby/gems/2.4.0/gems/xcodeproj-1.5.2/lib/xcodeproj/project.rb:217:in `initialize_from_file'
/usr/local/lib/ruby/gems/2.4.0/gems/xcodeproj-1.5.2/lib/xcodeproj/project.rb:102:in `open'
/usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.3.1/lib/cocoapods/command/init.rb:41:in `validate!'
/usr/local/lib/ruby/gems/2.4.0/gems/claide-1.0.2/lib/claide/command.rb:333:in `run'
/usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.3.1/lib/cocoapods/command.rb:52:in `run'
/usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.3.1/bin/pod:55:in `<top (required)>'
/usr/local/bin/pod:23:in `load'
/usr/local/bin/pod:23:in `<main>'

解决方法:安装Cocoapods预览版本:

sudo gem install cocoapods --pre

参考:RuntimeError - [Xcodeproj] Unknown object version.

错误 7

pod update 报错,(Gem::GemNotFoundException):

$ pod update
Traceback (most recent call last):
    2: from /usr/local/bin/pod:23:in `<main>'
    1: from /usr/local/Cellar/ruby/2.6.0_1/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
/usr/local/Cellar/ruby/2.6.0_1/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': can't find gem cocoapods (>= 0.a) with executable pod (Gem::GemNotFoundException)

解决方案:

# 更新 gem 版本
sudo gem update --system

# 卸载 cocoapods
gem uninstall cocoapods

# 重新安装 cocoapods 到指定目录
sudo gem install cocoapods -n /usr/local/bin

默认情况下,安装 cocoapods 时(sudo gem install cocoapods)会被安装到 /usr/bin 目录下,但是苹果为了系统安全,该目录禁止任何写入,root 用户也不能。

参考

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

推荐阅读更多精彩内容