CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库,轻松管理第三方库的版本。
CocoaPods安装步骤
1. 查看Ruby版本,升级Ruby环境
CocoaPods是基于ruby ecosystem的,需要ruby环境,使用ruby的gem命令。所以我们的系统要有ruby环境。然而Mac系统默认会安装好ruby环境。可在终端ruby -v查看ruby版本:
先查看一下ruby的版本
//查看ruby版本
ruby -v 或者 ruby --version
//输出信息
ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
看能不能直接升级系统的gem
gem update --system
如果不行,看能不能直接更新rubygems
sudo gem install rubygems-update
如果失败
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted @ rb_sysopen - /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem
则执行
sudo gem install -n /usr/local/bin cocoapods
2. 更换Ruby镜像
gem sources -l
查看ruby源
发现这是国外的源,在中国是被屏蔽了的,所以要替换为国内的源
移除国外的源
gem sources --remove https://rubygems.org/
添加国内的源
gem sources -a https://gems.ruby-china.org/
现在.org停止访问了,要换成
gem sources -a https://gems.ruby-china.com/
gem sources -l
查看是否替换成功
*** CURRENT SOURCES ***
https://gems.ruby-china.org/
3. 安装CocoaPods
sudo gem install cocoapods
报错1:
ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory.
说明是一些系统权限的原因,换成
sudo gem install -n /usr/local/bin cocoapods
就行了。
错误2:
ERROR: Error installing cocoapods:
ERROR: Failed to build gem native extension.
解决方案一: https://stackoverflow.com/questions/20939568/error-error-installing-cocoapods-error-failed-to-build-gem-native-extension
没有安装brew的,自己搜索安装方法安装就行,这里不再赘述。
解决方案二: https://blog.csdn.net/a892445213/article/details/104837529
注意: 安装完rvm后,要重新开启一个终端,rvm命令才生效。
目前我使用方案二才解决的问题。
4. 更新索引仓库
pod setup
把最新的类库信息拉取到本地spec文件,因为CocoaPods每次查找类库是从本地查找的,如果要保持查找到的类库是最新的,需要更新索引仓库。这个过程会比较慢。
然后你会看到出现了Setting up CocoaPods master repo,卡住不动了,说明Cocoapods在将它的信息下载到 ~/.cocoapods里。 你可以command+n新建一个终端窗口,执行cd ~/.cocoapods/进入到该文件夹下,然后执行du -sh *来查看文件大小,每隔几分钟查看一次,这个目录最终大小是900多M(我的是930M) 当出现Setup completed的时候说明已经完成了。
5. 查看pod版本
pod --version
6. 查找第三方库
输入pod search AFNetworking
,则能查找到相应第三方库,按q即可退出。如下:
如果搜索不到,可执行如下两种方案:
解决方案一:
直接找个demo,执行pod init
,生成pod文件之后,双击打开Podfile文件,随便填写一个库进去,如 pod 'SnapKit', '~> 5.0.0'
,然后执pod install
,等这个库安装好之后,再去执行pod search xxx
命令,这时候所有库都能搜到了。
解决方案二:
1、请先进行:pod setup
2、再清空一下搜索索引,让pod重建索引:
rm ~/Library/Caches/CocoaPods/search_index.json
这是因为之前pod search的时候生成了缓存文件search_index.json
然后再次输入pod search AFNetworking进行搜索
7. 创建Podfile文件
新建一个工程,cd到工程根目录下,pod init会创建一个podfile文件,
vim Podfile
,按i进入编辑模式,ESC退出编辑,然后冒号,再wq就可以退出podfile文件了。
双击podfile文件,直接粘贴第三方库内容进去,保存。
用cocoapods 导入swift 框架,必须要 use_frameworks!。
use_frameworks!使用 dynamic frameworks 来取代 static libraries 方式.
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target 'SwiftUIDemo' do
pod 'MJRefresh', '~> 3.1.15.3'
pod 'Alamofire', '~> 4.7.1'
pod 'SDWebImage', '~> 4.3.3'
end
8. 安装第三方库
pod install
安装所有再podfile文件中的类库,如图
执行完成之后,工程根目录下就会出现一个.xcworkspace
的文件,点击就能打开工程了。
可能遇到的错误:
1. fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed
pod install 报错
[!] Error installing ZXingObjC
[!] Failed to download 'ZXingObjC': [!] /usr/bin/git clone https://github.com/zxingify/zxingify-objc.git /var/folders/v6/439mq3hd2nxdx0lgjv96gct00000gn/T/d20210516-8148-91hem9 --template=
Cloning into '/var/folders/v6/439mq3hd2nxdx0lgjv96gct00000gn/T/d20210516-8148-91hem9'...
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
或 git clone --recurse-submodules xxx 时失败报错
remote: Compressing objects: 100% (2725/2725), done.
fatal: the remote end hung up unexpectedly5.43 MiB | 149.00 KiB/s
fatal: early EOF
fatal: index-pack failed
解决方案一:
这里贴了几种网上的解决方式 (有没有效不知道,毕竟我没用到这些方式解决)
https://www.cnblogs.com/li923/p/13277725.html
https://www.cnblogs.com/new0801/p/6175788.html
https://stackoverflow.com/questions/21277806/fatal-early-eof-fatal-index-pack-failed
解决方案二:
重新克隆一遍,就ok了。可能是网络问题(网上也有说是网络问题的)。
目前我就是用这种方式解决的。
9. 查看项目中引入库的版本号
1、打开终端,cd命令切换到项目中的Podfile.lock文件目录下(一般也就是项目根目录),
执行命令:cat Podfile.lock 即可。
2、也可以用文本方式打开 Podfile.lock 文件。
******* 扩展 *******
1、 再swift项目中引入OC库,需要创建一个桥接文件
1. command + n 选择Header File,取一个名字,比如BridgingHeader.h
2.配置桥接文件路径(路径也可以在前面加上$(SRCROOT)/作为相对路径),如图:
2 、配置Search Paths
我们在桥接文件导入第三方库头文件的时候,发现报错,提示找不到头文件,这是因为pod的文件和桥接header文件不是在同一个目录下面,所以需要配置User Header Search Paths。
在target->Build Setting里面找到search Paths,双击User Header Search Paths后面空白的地方,设置目录的路径${SRCROOT},然后选择后面的recursive,如图:
这样,在桥接文件里就可以成功的导入第三方库的头文件了。
错误:
用Xcode10和pod1.5.3,报错
RuntimeError - [!] Xcodeproj doesn't know about the following attributes {"inputFileListPaths"=>[], "outputFileListPaths"=>[]} for the 'PBXShellScriptBuildPhase' isa.
解决方案:(https://stackoverflow.com/questions/52199554/cocoapods-with-xcode-10-runtimeerror-xcodeproj-doesnt-know-about-the-following)
如果输入
sudo gem install cocoapods --pre
执行失败,可以输入sudo gem install -n /usr/local/bin cocoapods --pre
,如下:ruby官网:https://gems.ruby-china.com/