在“新功能”部分中,它指出:
- 在新的构建系统中,shell 脚本不能依赖未在其他构建阶段(例如,Info.plist 文件或 .dSYM 文件)中列出的构建工件的状态。添加脚本构建阶段所依赖的文件作为显式输入依赖于 shell 脚本构建阶段。(40852184)
在之前的 Xcode 中,脚本执行成功,但现在可以在 dSYM 文件大小为 0 时执行。
如何让运行脚本阶段仅在生成 dSYM 文件后才开始?
如何按照他们的要求创建“对 shell 脚本构建阶段的显式输入依赖项”?
可以在这里找到类似的问题:
在 Xcode 10 中创建所需文件之前,构建阶段脚本正在运行
dSYM 默认位置是${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
你可以使用一个简短的脚本来测试它并观察它的输出:
#!/bin/sh
if [ ! -d ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME} ]; then
echo "Couldn't find dsym file"
exit 1
fi
stat -x ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
Roi Tai 的回答几乎是正确的。仅指定${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
dSYMs 文件夹,而不是 dSYM 文件本身。
我实际上完全解决了这个问题,而不必在我的脚本中使用睡眠。输入文件路径需要如下:
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
我在构建阶段尝试将 dSYM 上传到 Sentry 时遇到了这个问题。指定此完整文件路径时,脚本会等待 dSYM 在执行之前完全生成 - 无需睡眠调用!
对我来说,提出的解决方案不起作用。就我而言,我必须知道何时生成 dSYM 中的 Info.plist 文件。虽然脚本在文件存在时启动,但它的大小为零并且脚本失败。
对我有用的是 5s sleep 作为我脚本中的第一行:
sleep 5
根据一些答案,我编译了以下内容:
${PODS_ROOT}/FirebaseCrashlytics/upload-symbols -gsp ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist -p ios ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
在此过程中帮助我的是测试这个脚本的每个因素:
upload-symbols:
test -e ${PODS_ROOT}/FirebaseCrashlytics/upload-symbols && echo "upload-symbols exists" || echo "upload-symbols not found"
GoogleService-Info.plist:
test -e ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist && echo "GoogleService exists" || echo "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist not found"
dSYM:
test -e ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME} && echo "DWARF_DSYM_FILE_NAME exists" || echo "DWARF_DSYM_FILE_NAME not found"
就我而言,plist 文件不正确。