前期摘要
在学习Cocoapods时,执行 pod install 命令时,显示:
[!] Error installing Firebase
[!] /usr/bin/git clone https://github.com/firebase/firebase-ios-sdk.git /var/folders/1y/t7s8thm536j0hgvd3fhdp7pr0000gn/T/d20240515-43435-8lq30m --template= --single-branch --depth 1 --branch CocoaPods-10.25.0
Cloning into '/var/folders/1y/t7s8thm536j0hgvd3fhdp7pr0000gn/T/d20240515-43435-8lq30m'...
fatal: unable to access 'https://github.com/firebase/firebase-ios-sdk.git/': Recv failure: Connection reset by peer
上述报错,因此决定将安装cocoapods的过程和发现的问题汇总整理。
环境配置
mac Sonoma 14.4.1
下载cocoapods
使用Cocoapods官网(https://cocoapods.org/)的安装命令:
$ sudo gem install cocoapods
如果安装过程缓慢,可以使用brew进行安装,相关差异在之前的文章中有表述:
$ brew install cocoapod
初始化cocoapods
在Xcode项目目录中初始化一个cocoapods项目
pod init
相关操作如下:
% cd /Users/fangjunyu/Downloads/TestTask
TestTask % ls
TestTask TestTaskTests
TestTask.xcodeproj TestTaskUITests
TestTask % pod init
TestTask % ls
Podfile TestTask.xcodeproj TestTaskUITests
TestTask TestTaskTests
通过上述代码可以看到,使用pod init命令会创建一个Podfile文件
添加镜像源
移除现有的trunk源(如果已经存在):
pod repo remove trunk
添加镜像源,并将其命名为不同于trunk的名称:
pod repo add TsinghuaSpecs 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
更新Podfile
编辑Podfile文件的内容
TestTask % vi Podfile
# 指定使用的源
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
source 'https://cdn.cocoapods.org/'
platform :ios, '14.0'
target 'TestTask' do
use_frameworks!
# 添加Firebase Pods
pod 'Firebase/Analytics'
pod 'Firebase/Core'
pod 'Firebase/Firestore'
pod 'FirebaseFirestoreSwift'
target 'TestTaskTests' do
inherit! :search_paths
end
target 'TestTaskUITests' do
end
end
将对应的Firebase Pod添加到其中,另外需要指定适应的源,否则会存在下载缓慢/失败的情况。
如果你用的不是Firebase Pod,则根据自己的需求进行调整pod的代码,另外上面的TestTask为我本地的测试项目名称,需要根据自己的项目名称来调整。
清理缓存并更新仓库
在进行上述修改后,建议清理CocoaPods缓存并更新仓库:
pod cache clean --all
pod repo update
安装Pods
执行Pods安装命令
pod install 安装过程输出如下:
TestTask % pod install
Analyzing dependencies
Downloading dependencies
Generating Pods project
Integrating client project
Pod installation complete! There are 4 dependencies from the Podfile and 20 total pods installed.
完成Pods安装
完结撒花🎉🎉🎉
注意:如果执行pod install时报错并输出
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-TestTask-TestTaskUITests/Pods-TestTask-TestTaskUITests.debug.xcconfig
类似错误,请见踩坑问题2,调整ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES构建设置
踩坑问题
1、不能直接使用trunk这个名称来添加镜像源
在执行pod repo add trunk时,会报下述错误:
TestTask % pod repo add trunk 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
[!] Repo name `trunk` is reserved for CocoaPods' main spec repo accessed via CDN.
这意味着trunk 名称是CocoaPods主仓库通过CDN访问的保留名称。我们不能直接使用trunk这个名称来添加镜像源。以下是正确的方式来添加和使用CocoaPods的镜像源:
1)移除现有的trunk源(如果已经存在):
pod repo remove trunk
2)添加镜像源,并将其命名为不同于trunk的名称:
pod repo add TsinghuaSpecs 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
2、TestTaskUITests 目标覆盖了 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 的构建设置问题:
[!] The `TestTaskUITests [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-TestTask-TestTaskUITests/Pods-TestTask-TestTaskUITests.debug.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The `TestTaskUITests [Release]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-TestTask-TestTaskUITests/Pods-TestTask-TestTaskUITests.release.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
如在执行pod install命令时,提示上述报错则表示TestTaskUITests 目标覆盖了 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 的构建设置,而这个设置在CocoaPods的 .xcconfig 文件中已经定义。这样可能会导致CocoaPods安装的问题。
解决方案为:
在Xcode的Build Settings中,确保将 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 的值设置为 $(inherited),这样就可以继承CocoaPods配置的值。
具体操作步骤为:打开Xcode项目,点击左上角左侧蓝色图标的项目名,点击右侧配置文件的Build Settings – TestTaskUITests – Build Options – ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES,这个值默认为Yes。
点击默认值,会弹出其他选项,然后点击Other
输入框默认展示YES
然后将其改为
$(inherited)
设置后的效果如下:
然后,重新执行pod install命令即可完成安装。