在New Features部分中,其指出:
- 在新的构建系统中,shell脚本不能依赖未在其他构建阶段中列出的构建工件的状态(例如, Info.plist文件或.dSYM文件。)在脚本构建阶段添加文件 取决于作为对Shell脚本构建的显式输入依赖项 相。 (40852184)
在以前的Xcode中,脚本已成功执行,但现在它可以在dSYM文件大小为0时执行。
我怎样才能有一个运行脚本阶段,该阶段仅在生成dSYM文件后之后开始?
如何根据他们的要求创建“对Shell脚本构建阶段的明确输入依赖项”?
答案 0 :(得分:2)
可以在这里找到类似的问题:
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}
答案 1 :(得分:2)
对我来说,建议的解决方案不起作用。就我而言,我必须知道何时生成dSYM中的Info.plist文件。尽管脚本在文件存在时启动,但其大小为零,并且脚本失败。
对我有用的是5s睡眠作为脚本的第一行:
sleep 5
答案 2 :(得分:1)
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完全生成后再执行-无需睡眠调用!
答案 3 :(得分:0)
根据一些答案,我整理了以下内容:
${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 文件不正确。