1.CocoaPods简介
CocoaPods是专门为iOS工程提供第三方依赖库的管理工具,通过CocoaPods,我们可以更方便地管理每个第三方库的版本,而且不需要我们做太多的配置,就可以直观、集中和自动化地管理我们项目的第三方库。
CocoaPods将所有依赖的库都放在一个名为Pods的项目下,然后让主项目依赖Pods项目。然后,我们编码工作都从主项目转移到Pods项目。Pods项目最终会编译为一个 libPod-项目名.a 静态库,主项目依赖于这个静态库。
对于资源文件,CocoaPods 提供了一个名为 Pods-resources.sh 的 bash 脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
CocoaPods 通过一个名为 Pods.xcconfig 的文件来在编译时设置所有的依赖和参数。
CocoaPods是用 Ruby 写的,由若干个 Ruby 包 (gems) 构成,在解析整合过程中,最重要的几个 gems 分别是:
2.CocoaPods的核心组件
CocoaPods/CocoaPod
这是一个面向用户的组件,每当执行一个pod命令时,这个组件都将被激活。该组件包括了所有使用 CocoaPods 涉及到的功能,并且还能通过调用所有其它的gems来执行任务。CocoaPods/Core
Core 组件提供支持与 CocoaPods 相关文件的处理,文件主要是Podfile和podspecs。Podfile
Podfile 是一个文件,用于定义项目所需要使用的第三方库。该文件支持高度定制,你可以根据个人喜好对其做出定制。更多相关信息,请查阅Podfile指南。Podspec
.podspec也是一个文件,该文件描述了一个库是怎样被添加到工程中的。它支持的功能有:列出源文件、framework、编译选项和某个库所需要的依赖等。CocoaPods/Xcodeproj
这个gem组件负责所有工程文件的整合。它能够创建并修改.xcodeproj和.xcworkspace文件。它也可以作为单独的一个gem包使用。如果你想要写一个脚本来方便地修改工程文件,那么可以使用这个gem。
3.CocoaPods的安装和使用
3.1 安装rvm
检查Mac是否安装了rvm,打开终端,输入指令:
rvm -v
- 如果不存在,则会出现下面的情况:
Last login: Thu Sep 19 08:32:35 on console
bogon:~ wangruifang$ rvm -v
-bash: rvm: command not found
- 如果存在,则会打印rvm的版本信息:
bogon:~ wangruifang$ rvm -v
rvm 1.29.3 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]
如果不存在,先要安装一下,依次输入以下命令:
curl -L get.rvm.io | bash -s stable
source ~/.bashrc
source ~/.bash_profile
升级rvm到最新的稳定版本命令:
rvm get stable
3.2 安装ruby
3.2.1 查询ruby所有可安装的版本信息:
rvm list known
结果如下:
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.6]
[ruby-]2.5[.5]
[ruby-]2.6[.3]
[ruby-]2.7[.0-preview1]
ruby-head
···
3.2.2 选择一个ruby版本进行安装
2.6.3为最新正式版版本,2.7.0为测试版
rvm install 2.6.3
// 注意:安装过程中需要两次按下 Enter 键, 第二次按下后需要输入电脑访问密码(不可见,只管输入就行);
// 如果你电脑没有安装Xcode和Command Line Tools for Xcode以及Homebrew 会自动下载安装,建议提前安装这三者.
3.2.3 设置为默认版本
rvm use 2.6.3 --default
3.3 检查更新ruby版本环境
cocoapods是用gem ruby实现的,想要使用它首先需要有gem ruby的环境。且Mac的OS X系统默认已经可以运行ruby。
检查 gem ruby 版本号:
sudo gem -v
更新 gem ruby 版本号:
sudo gem update --system
3.4 检查更新ruby源
3.4.1 检查ruby源
bogon:~ wangruifang$ gem sources -l
*** CURRENT SOURCES ***
https://rubygems.org/
3.4.2 替换国内镜像源
之所以要添加国内的 ruby-china源,是因为taobao源已经停止维护了,所以此处替换的是ruby-china源,且尽量确保只有一个。
//移除原有镜像源:
gem sources --remove https://rubygems.org/
//添加国内镜像源
gem sources --add https://gems.ruby-china.org
3.5 安装CocoaPods
sudo gem install cocoapods
OS X EL Capitan 或 macOS High Sierra System 后改为:
sudo gem install -n /usr/local/bin cocoa pods
如果安装了多个Xcode使用下面的命令选择(一般需要选择最近的Xcode版本)
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
设置pod:
pod setup
3.6 创建一个工程,并创建Podfile配置文件
先用 cd 进入到工程中去,输入指令vim podfile 创建 Podfile 文件,然后按 i 进入到编辑模式来配置 Podfile 文件:
platform :ios, '9.0'
target “target名称” do
pod 'AFNetworking', '~> 3.1.0'
end
按 Esc 退出编辑,按 Shift +冒号,输入 wq 退出文件编辑,然后下载 Podfile 文件内的第三方,执行命令:
pod install
3.7 pod命令
# 第一次使用安装框架 //只用安装一次,之后使用 添加删除都用 pod update --no-repo-update
$ pod install
# 安装框架,不更新本地索引,速度快
$ pod install --no-repo-update
# 今后升级、添加、删除框架,或者框架不好用
$ pod update
# 更新框架,不更新本地索引,速度快
$ pod update --no-repo-update
# 搜索框架
$ pod search XXX#
帮助
$ pod --help
4.CocoaPods使用过程中遇到的问题
4.1 去除CocoaPods相关库警告
4.1.1 去除所有警告
去除所有警告,在 platform :ios, ‘x.0’ 的后面加入这句:
inhibit_all_warnings!
4.1.2 消除单个警告:
pod 'MJExtension','~>3.0.15.1',:inhibit_warnings => true
4.2 Unable to find a pod with name…
问题:[!] Unable to find a pod with name, author, summary, or description matching xxx.
解决办法:删除 ~/Library/Caches/CocoaPods 目录下的 search_index.json 文件
rm ~/Library/Caches/CocoaPods/search_index.json
4.3 CDN: trunk URL couldn’t be downloaded…
问题:[!] CDN: trunk URL couldn't be downloaded: https://raw.githubusercontent.com/CocoaPods/Specs/master/Specs/2/e/7/YTKNetworkExtension/0.1.0/YTKNetworkExtension.podspec.json, error: Failed to open TCP connection to raw.githubusercontent.com:443 (Connection refused - connect(2) for "raw.githubusercontent.com" port 443)
问题原因:CocoaPods 1.8+将CDN切换为默认的 spec repo源,并附带一些增强功能!CDN支持最初是在1.7版本中引入的,最终在1.7.2中完成。 它旨在大大加快初始设置和依赖性分析。
解决办法:
- podfile文件中添加source源:
source 'https://github.com/CocoaPods/Specs.git - 移除
trunk
pod repo remove trunk
4.4 xxxxx does not specify a Swift version…
问题: xxxxx does not specify a Swift version and none of the targets (Pods) integrating it have the SWIFT_VERSION attribute set. Please contact the author or set the SWIFT_VERSION attribute in at least one of the targets that integrate this pod
解决办法:在podfile文件添加use_frameworks!
target ‘Project_xx’ do
use_frameworks!
end
4.5 Failed to extract git version from git –version…
问题:升级Mac OS之后执行pod命令出现Failed to extract git version from git --version ("xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun\n") (RuntimeError)
解决办法:重装 xcode command line:
xcode-select --install
如果没有解决问题,执行以下命令
sudo xcode-select -switch /
4.6 curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL
问题:pod install时出现error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54错误
解决办法:
git config --global http.postBuffer 524288000