Flutter项目pod install失败,无法拉取OneSignalXCFramework仓库
问题场景
首次运行Flutter项目执行pod install,使用onesignal_flutter: ^3.5.1(或最新版)插件时,拉取OneSignalXCFramework仓库失败,报错如下:
Installing GoogleDataTransport (9.3.0)
Installing GoogleUtilities (7.12.0)
Installing OneSignalXCFramework (3.12.4)[!] Error installing OneSignalXCFramework
[!] /usr/bin/git clone https://github.com/OneSignal/OneSignal-iOS-SDK.git /var/folders/5f/bnc72_gj7430tsnm5bm42dsh0000gn/T/d20231208-56071-fzux4d --template= --single-branch --depth 1 --branch 3.12.4Cloning into '/var/folders/5f/bnc72_gj7430tsnm5bm42dsh0000gn/T/d20231208-56071-fzux4d'...
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
error: 3182 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
已尝试调整全局Git配置(如下)但未解决:
[user] name = shehan email = hello@gmail.com [commit] template = .gitmessage [http] postBuffer = 5242880000 version = HTTP/1.1 [core] compression = 0 packedGitLimit = 1024m packedGitWindowSize = 1024m [pack] deltaCacheSize = 3096m packSizeLimit = 3096m windowMemory = 256m
环境:macOS Sonoma,Git版本2.39.3 (Apple Git-145)
可行解决方案
1. 切换Git协议为SSH
HTTPS拉取容易因网络或代理出问题,换成SSH协议试试:
- 终端执行以下命令,让Git自动把GitHub的HTTPS链接替换成SSH:
git config --global url."git@github.com:".insteadOf "https://github.com/" - 清理本地Pod缓存和旧文件:
pod cache clean --all rm -rf Pods rm Podfile.lock - 重新执行
pod install
2. 手动克隆仓库到Pod缓存目录
如果自动拉取失败,手动把指定版本的仓库放到Pod缓存里:
- 创建缓存目录(不存在的话):
mkdir -p ~/Library/Caches/CocoaPods/Pods/External/OneSignalXCFramework - 克隆指定版本的OneSignal仓库到该目录:
git clone --single-branch --depth 1 --branch 3.12.4 git@github.com:OneSignal/OneSignal-iOS-SDK.git ~/Library/Caches/CocoaPods/Pods/External/OneSignalXCFramework - 再执行
pod install
3. 升级Git版本
Apple自带的Git版本可能有兼容性问题,换成官方最新版:
- 用Homebrew安装最新Git:
brew install git - 配置终端优先使用Homebrew的Git,把下面内容加到
~/.zshrc(或~/.bash_profile):export PATH="/usr/local/bin/git:$PATH" - 重启终端,验证版本:
git --version,确认是最新版后重新pod install
4. 禁用深度克隆
深度克隆容易触发EOF问题,修改Podfile让它拉取完整仓库:
- 在Podfile末尾添加这段代码:
pre_install do |installer| installer.pod_targets.each do |pod| if pod.name == 'OneSignalXCFramework' pod.specs.each do |spec| spec.source[:git] = 'git@github.com:OneSignal/OneSignal-iOS-SDK.git' spec.source.delete(:depth) end end end end - 清理缓存后重新执行
pod install
内容的提问来源于stack exchange,提问作者Shehan DMG

