运行 dSYM 生成后的脚本阶段 Xcode 10(构建时)

Run Script Phase after dSYM is generated with Xcode 10 (on build)

New Features 部分,它指出:

  • In the new build system, shell scripts can't rely on the state of build artifacts not listed in other build phases (for example, the Info.plist file or .dSYM files.) Add files the script build phase depends on as explicit input dependencies to the shell script build phase. (40852184)

之前Xcode脚本执行成功,现在dSYM文件大小为0时可以执行。

如何让 运行 脚本阶段仅在 生成 dSYM 文件后 开始?
我怎样才能按照他们的要求创建一个 "explicit input dependencies to the shell script build phase"?

可以在这里找到类似的问题:

Build phase script is running before needed files are created in Xcode 10

您需要将 dSYM 添加为 运行 脚本阶段的输入文件依赖项:

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 文件本身。

我实际上完全解决了这个问题,而无需在我的脚本中使用睡眠。输入文件路径需要如下:

${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}

我在构建阶段尝试将 dSYM 上传到 Sentry 时遇到了这个问题。当指定这个完整的文件路径时,脚本在执行之前等待 dSYM 完全生成 - 不需要睡眠调用!

根据一些回答我整理如下:

${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 文件不正确。