使用Xcode 10生成dSYM之后(在构建中)运行脚本阶段

时间:2018-11-08 09:46:35

标签: ios xcode xcode10 dsym run-script

New Features部分中,其指出:

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

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

我怎样才能有一个运行脚本阶段,该阶段仅在生成dSYM文件后之后开始?
如何根据他们的要求创建“对Shell脚本构建阶段的明确输入依赖项”?

4 个答案:

答案 0 :(得分:2)

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

Build phase script is running before needed files are created in 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}

答案 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 文件不正确。