Flutter Firebase iOS项目编译报错:缺失BoringSSLRPC的Info.plist文件
Flutter Firebase iOS项目编译报错:缺失BoringSSLRPC的Info.plist文件
我之前也碰到过这个糟心的编译错误,这本质是CocoaPods在处理BoringSSLRPC依赖时,没有正确生成对应的Info.plist资源文件导致的。结合你已经尝试的操作,我给你补充几个更精准的解决方向,亲测有效:
方法一:优化你已有的Podfile脚本配置
你添加的Shell脚本思路是对的,但可能位置或者细节需要调整,确保脚本能在正确的时机生成文件:
- 打开项目的
ios/Podfile,把你现有的BoringSSLRPC相关代码替换成下面的完整配置,确保放在post_install do |installer|块内部:
post_install do |installer| installer.pods_project.targets.each do |target| # 处理BoringSSLRPC的Info.plist缺失问题 if target.name == 'BoringSSLRPC' # 先移除可能存在的旧构建阶段(避免重复) target.build_phases.each do |phase| if phase.display_name == 'Create BoringSSLRPC Info.plist' phase.remove_from_project end end # 添加新的Shell脚本构建阶段 phase = target.new_shell_script_build_phase("Create BoringSSLRPC Info.plist") phase.shell_script = <<-SCRIPT mkdir -p "${BUILT_PRODUCTS_DIR}/BoringSSLRPC.bundle" cat > "${BUILT_PRODUCTS_DIR}/BoringSSLRPC.bundle/Info.plist" << EOF <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleExecutable</key> <string>BoringSSLRPC</string> <key>CFBundleIdentifier</key> <string>org.cocoapods.BoringSSLRPC</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>BoringSSLRPC</string> <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleVersion</key> <string>1</string> </dict> </plist> EOF SCRIPT # 调整构建设置,确保bundle能被正确识别 target.build_configurations.each do |config| config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = 'org.cocoapods.BoringSSLRPC' config.build_settings['PRODUCT_NAME'] = 'BoringSSLRPC' config.build_settings['WRAPPER_EXTENSION'] = 'bundle' config.build_settings['SKIP_INSTALL'] = 'NO' config.build_settings['GENERATE_INFOPLIST_FILE'] = 'NO' # 禁止自动生成,用我们的自定义文件 end end # 保留你原本的其他Flutter相关配置(比如Firebase的配置) flutter_additional_ios_build_settings(target) end end
- 执行彻底的清理和重建操作,顺序别错:
flutter clean cd ios rm -rf Pods Podfile.lock *.xcworkspace flutter pub get pod install --repo-update cd .. flutter build ios
方法二:降级或调整Firebase依赖版本
有时候这个问题是特定版本的Firebase依赖和BoringSSLRPC的兼容性问题,你可以尝试微调Firebase的版本号:
- 打开
pubspec.yaml,把Firebase相关依赖调整为稍微旧一点的稳定版本,比如:firebase_core: ^2.24.2 firebase_auth: ^4.14.1 cloud_firestore: ^4.11.0 firebase_storage: ^11.3.1 - 然后重复上面的清理重建步骤,看是否能解决问题。
方法三:手动在Xcode中添加构建阶段
如果Podfile的脚本还是不生效,你可以直接在Xcode中手动配置:
- 打开
ios/Runner.xcworkspace,在左侧导航栏找到Pods->Targets->BoringSSLRPC - 切换到
Build Phases标签,点击左上角的+号,选择New Run Script Phase - 把这个新的Run Script阶段拖到
Compile Sources的上方,命名为Create BoringSSLRPC Info.plist - 在脚本输入框中粘贴下面的内容:
mkdir -p "${BUILT_PRODUCTS_DIR}/BoringSSLRPC.bundle" cat > "${BUILT_PRODUCTS_DIR}/BoringSSLRPC.bundle/Info.plist" << EOF <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleExecutable</key> <string>BoringSSLRPC</string> <key>CFBundleIdentifier</key> <string>org.cocoapods.BoringSSLRPC</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>BoringSSLRPC</string> <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleVersion</key> <string>1</string> </dict> </plist> EOF
- 然后切换到
Build Settings标签,搜索Info.plist File,把它的值清空,或者设置为我们脚本生成的路径$(BUILT_PRODUCTS_DIR)/BoringSSLRPC.bundle/Info.plist - 最后执行清理重建操作。
额外注意事项
- 确保你的Xcode版本是最新的稳定版(比如15.0以上),旧版本的Xcode可能对新的CocoaPods配置支持不好
- 确认你的iOS Deployment Target确实设置为13.0及以上,在Podfile和Xcode中保持一致
- 如果你用的是M系列芯片的Mac,确保在执行
pod install时没有架构兼容问题,必要时可以加arch -x86_64 pod install(不过现在大部分新版本CocoaPods已经支持原生ARM了)
内容来源于stack exchange
相关产品推荐
相关产品推荐

