iOS 14.6环境下Crashlytics结合Swift Package Manager无法正常运行的问题及脚本优化咨询
Firebase Crashlytics with SPM: Fixing Run Script & Environment Separation
问题1:适配Swift Package Manager的Crashlytics正确运行脚本
你当前的脚本核心问题是Shell语法错误——方括号[与变量之间必须有空格,否则Shell会把["${CONFIGURATION}"当成一个不存在的命令,直接导致脚本执行失败,这是写Shell脚本时很容易踩的坑。
另外,${BUILD_DIR%Build/*}的路径在部分Xcode版本下稳定性不足,改用项目根目录变量${SRCROOT}来定位SPM的Crashlytics脚本会更可靠。
修正后的正确脚本如下:
if [ "${CONFIGURATION}" == "Release" ] || [ "${CONFIGURATION}" == "Debug" ]; then "${SRCROOT}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run" elif [ "${CONFIGURATION}" == "ReleaseDev" ] || [ "${CONFIGURATION}" == "DebugDev" ]; then "${SRCROOT}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run" -gsp "${PROJECT_DIR}/iOS/SupportFiles/GoogleService-InfoDev.plist" fi
额外检查点:
- 确保你已在App初始化代码中调用
FirebaseApp.configure(),DEV环境下要传入对应的GoogleService-InfoDev.plist(PROD环境可直接用默认初始化) - 查看Xcode的Build Logs中Run Script阶段的输出,若有路径找不到或权限错误,可根据提示调整路径
问题2:优化DEV与PROD环境的清晰区分
靠硬编码CONFIGURATION值的方式不够灵活,后续新增环境时还要修改脚本。更优雅的方案是用Xcode自定义Build Settings变量统一管理配置文件路径:
步骤1:添加自定义Build Setting
- 选中项目Target,进入
Build Settings标签页 - 点击左上角
+按钮,选择Add User-Defined Setting - 命名为
FIREBASE_GOOGLE_SERVICE_PLIST_PATH - 针对每个Configuration设置对应路径:
- Debug/Release:
$(PROJECT_DIR)/iOS/SupportFiles/GoogleService-Info.plist - DebugDev/ReleaseDev:
$(PROJECT_DIR)/iOS/SupportFiles/GoogleService-InfoDev.plist
- Debug/Release:
步骤2:简化Run Script
修改脚本为直接引用自定义变量,无需复杂的条件判断:
# 自动适配所有环境的简洁脚本 RUN_SCRIPT_PATH="${SRCROOT}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run" "${RUN_SCRIPT_PATH}" -gsp "${FIREBASE_GOOGLE_SERVICE_PLIST_PATH}"
如果希望PROD环境保持默认(不强制指定plist路径),也可以做个简单判断:
RUN_SCRIPT_PATH="${SRCROOT}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run" if [ -n "${FIREBASE_GOOGLE_SERVICE_PLIST_PATH}" ]; then "${RUN_SCRIPT_PATH}" -gsp "${FIREBASE_GOOGLE_SERVICE_PLIST_PATH}" else "${RUN_SCRIPT_PATH}" fi
这种方式的优势是:所有环境配置集中在Build Settings管理,脚本逻辑简洁,后续新增环境只需在Build Settings中添加对应值,无需修改脚本,维护成本更低。
内容的提问来源于stack exchange,提问作者iKK
相关产品推荐
相关产品推荐

