在New Features部分,它指出:
- 在新的构建系统中,shell脚本不能依赖于其他构建阶段中未列出的构建工件的状态(例如,Info.plist文件或.dSYM文件。)添加脚本构建阶段所依赖的文件作为显式输入依赖于shell脚本构建阶段。 (40852184)
在之前的Xcode中,脚本已成功执行,但现在可以在dSYM文件大小为0时执行。
如何才能生成仅在生成dSYM文件后启动的运行脚本阶段? 如何根据请求创建“shell脚本构建阶段的显式输入依赖项”?
类似的问题可以在这里找到:
Build phase script is running before needed files are created in 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}
对我来说,建议的解决方案没有用。在我的情况下,我必须知道何时生成dSYM中的Info.plist文件。虽然脚本在文件存在时启动,但其大小为零且脚本失败。
对我有用的是5s sleep作为我脚本中的第一行:
sleep 5
Roi Tai的回答几乎是正确的。仅指定${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
只是dSYMs文件夹而不是dSYM文件本身。
我实际上完全解决了这个问题,而不必在我的脚本中使用sleep。输入文件路径必须如下:
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
尝试在我的构建阶段将dSYM上传到Sentry时,我遇到了这个问题。指定此完整文件路径时,脚本会在执行前等待dSYM完全生成 - 不需要睡眠调用!