Flutter Flavors iOS Scheme切换时GoogleService-Info.plist未生效问题
问题排查与解决方案
1. 调整Build Phase脚本执行顺序
脚本必须在[CP] Pods Resources步骤之前执行,否则Pods资源复制完成后,脚本的覆盖操作不会生效。
- 操作:打开Xcode的Runner Target → Build Phases,将你的复制脚本拖拽到
[CP] Pods Resources上方。
2. 校验脚本逻辑准确性
确保脚本能正确识别当前Build Configuration,并复制对应目录的plist文件。以下是可参考的脚本模板(根据你的实际目录结构调整):
# 获取当前Build Configuration CONFIGURATION="${CONFIGURATION}" # 定义各环境plist路径 DEV_PLIST="${PROJECT_DIR}/config/dev/GoogleService-Info.plist" STAGING_PLIST="${PROJECT_DIR}/config/staging/GoogleService-Info.plist" PROD_PLIST="${PROJECT_DIR}/config/prod/GoogleService-Info.plist" # 目标路径:Runner目录下的plist文件 TARGET_PLIST="${PROJECT_DIR}/Runner/GoogleService-Info.plist" # 根据配置复制对应文件 if [ "${CONFIGURATION}" = "Debug" ]; then cp "${DEV_PLIST}" "${TARGET_PLIST}" echo "Copied dev plist to target" elif [ "${CONFIGURATION}" = "Staging" ]; then cp "${STAGING_PLIST}" "${TARGET_PLIST}" echo "Copied staging plist to target" elif [ "${CONFIGURATION}" = "Release" ]; then cp "${PROD_PLIST}" "${TARGET_PLIST}" echo "Copied prod plist to target" fi
- 可通过添加
echo日志,在Xcode的Build Log中查看脚本是否执行、路径是否正确。 - 确认
PROJECT_DIR指向的项目根目录正确,且config下的子目录与脚本中的路径完全匹配。
3. 检查plist文件的Bundle引用
确保Runner Target的Copy Bundle Resources中,GoogleService-Info.plist的引用指向Runner目录下的目标文件,而非旧的固定路径。
- 操作:在
Copy Bundle Resources中删除旧的plist引用,重新添加Runner目录下的GoogleService-Info.plist,确保引用为相对路径。
4. 清理项目缓存
- 执行
flutter clean清空Flutter缓存。 - 删除Xcode的Derived Data:打开Xcode → Preferences → Locations → Derived Data,点击路径打开文件夹后删除对应项目的缓存目录。
- 重新执行
flutter pub get,再用对应Flavor命令编译,例如:flutter run --flavor dev --debug。
5. 验证Flavor与Build Configuration的映射
确保每个Flavor对应正确的Build Configuration:
- 打开Xcode的Runner Target → Info → Configurations,确认Dev/Staging/Prod分别对应Debug/Staging/Release配置(根据你的实际命名调整)。
内容的提问来源于stack exchange,提问作者Adam Terhaerdt
相关产品推荐
相关产品推荐

