7

在“新功能”部分中,它指出:

  • 在新的构建系统中,shell 脚本不能依赖未在其他构建阶段(例如,Info.plist 文件或 .dSYM 文件)中列出的构建工件的状态。添加脚本构建阶段所依赖的文件作为显式输入依赖于 shell 脚本构建阶段。(40852184)

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

如何让运行脚本阶段仅生成 dSYM 文件后才开始?
如何按照他们的要求创建“对 shell 脚本构建阶段的显式输入依赖项”?

4

4 回答 4

13

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

在 Xcode 10 中创建所需文件之前,构建阶段脚本正在运行

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

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}
于 2018-11-08T11:36:09.283 回答
4

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 在执行之前完全生成 - 无需睡眠调用!

于 2019-06-21T20:51:14.117 回答
2

对我来说,提出的解决方案不起作用。就我而言,我必须知道何时生成 dSYM 中的 Info.plist 文件。虽然脚本在文件存在时启动,但它的大小为零并且脚本失败。

对我有用的是 5s sleep 作为我脚本中的第一行:

sleep 5
于 2019-02-14T10:07:21.707 回答
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 文件不正确。

于 2021-04-02T17:38:14.100 回答