为Dev和Prod环境配置Firebase时Run Script执行失败求助
解决Firebase环境切换Run Script执行失败问题
问题诊断
你的脚本执行失败核心原因有两个:
- 语法错误:错误提示语句的引号未闭合,导致Shell解析出错
- 路径不匹配:脚本中定义的源文件路径可能与实际文件存放位置不符
修复后的脚本
替换原脚本为以下内容,已修正语法问题并优化路径逻辑:
# 定义源文件路径(根据实际存放位置调整,若Debug/Release在项目根目录则保留此写法) GOOG_DEV="${PROJECT_DIR}/Debug/GoogleService-Info-Dev.plist" GOOG_PROD="${PROJECT_DIR}/Release/GoogleService-Info.plist" # 目标文件固定路径 GOOG_DST="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" # 根据构建配置选择对应源文件 if [ "${CONFIGURATION}" == "Release" ]; then GOOG_SRC="${GOOG_PROD}" else GOOG_SRC="${GOOG_DEV}" fi # 检查源文件是否存在 if [ ! -f "${GOOG_SRC}" ]; then echo "错误:找不到源文件 'GoogleService-Info.plist',路径为 '${GOOG_SRC}'" exit 1 fi # 复制文件到目标位置 cp "${GOOG_SRC}" "${GOOG_DST}"
关键调整说明
- 修复引号问题:原脚本
echo语句末尾缺失单引号,导致Shell语法解析失败,现已补全 - 路径修正:根据你提供的文件存放结构(项目根目录下的Debug/Release文件夹分别存放对应plist),移除了路径中的
${TARGET_NAME}(若文件实际在Target子目录下,可重新添加该变量) - 错误提示优化:将英文提示改为中文,更直观定位问题
额外配置注意事项
- 文件Target Membership:确保两个plist文件都已添加到项目中,且不要勾选任何Target的Membership,避免Xcode自动打包多余文件,由脚本负责复制正确版本
- Run Script位置:将该Run Script阶段移动到Copy Bundle Resources阶段之后,确保复制操作在资源打包前完成
- Shell环境:在Run Script设置中指定Shell为
/bin/bash,避免zsh语法差异引发问题
验证方法
- 切换到Debug配置,执行
Clean Build Folder(Cmd+Shift+K)后重新构建,检查App包内的GoogleService-Info.plist是否为Dev版本 - 切换到Release配置,重复上述操作,验证是否自动替换为Prod版本
内容的提问来源于stack exchange,提问作者lauwis premium
相关产品推荐
相关产品推荐

