使用fastlane构建时Swift Package Manager无法下载Firebase依赖
问题场景
执行Fastlane的gym(skip_package_dependencies_resolution: false)命令构建项目时,解析Firebase iOS SDK(依赖仓库https://github.com/firebase/firebase-ios-sdk.git)过程中,出现下载二进制目标GoogleAppMeasurement失败的错误,具体报错为:
无法下载二进制目标GoogleAppMeasurement所需的文件https://dl.google.com/firebase/ios/swiftpm/8.15.0/GoogleAppMeasurement.zip,错误为downloadError("Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." ...")
但直接通过浏览器下载该文件、使用Xcode构建项目均能正常完成。
可行解决方案
1. 清理缓存并重置网络配置
Fastlane的独立缓存或网络会话可能出现异常,执行以下命令清理相关缓存:
rm -rf ~/Library/Caches/fastlane rm -rf ~/Library/Caches/com.google.Firebase rm -rf ~/Library/Caches/org.swift.swiftpm/repositories/firebase-ios-sdk-*
若使用代理环境,可提前导出系统代理配置后再执行构建:
export HTTP_PROXY=$(scutil --proxy | grep 'HTTPProxy' | awk '{print $3}') export HTTPS_PROXY=$(scutil --proxy | grep 'HTTPSProxy' | awk '{print $3}') fastlane gym
2. 预下载依赖文件复用本地缓存
手动下载GoogleAppMeasurement.zip后,放入Swift Package的缓存目录:
- 找到Xcode中Firebase依赖的缓存路径:
~/Library/Caches/org.swift.swiftpm/repositories/firebase-ios-sdk-<随机哈希值>/artifacts/GoogleAppMeasurement/8.15.0/ - 将下载好的文件放入该目录,修改gym命令参数禁用自动更新:
gym( skip_package_dependencies_resolution: false, disable_package_automatic_updates: true )
3. 延长构建超时时间
网络连接丢失可能是下载超时导致,在Fastfile中设置更长的超时时间:
lane :your_build_lane do ENV["FASTLANE_XCODEBUILD_TIMEOUT"] = "1200" # 设置为20分钟超时 gym(skip_package_dependencies_resolution: false) end
4. 复用Xcode的依赖解析结果
让Fastlane跳过自身的依赖解析,先调用Xcode完成依赖处理:
gym( skip_package_dependencies_resolution: true, pre_build_script: "xcodebuild -resolvePackageDependencies -project YourProject.xcodeproj -scheme YourScheme" )
将YourProject.xcodeproj和YourScheme替换为实际项目的工程文件和Scheme名称。
内容的提问来源于stack exchange,提问作者2Grey

