【问题标题】:Run Script Phase after dSYM is generated with Xcode 10 (on build)使用 Xcode 10 生成 dSYM 后运行脚本阶段(构建时)
【发布时间】:2019-04-11 19:20:59
【问题描述】:

New Features 部分,它声明:

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

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

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

【问题讨论】:

    标签: ios xcode xcode10 dsym run-script


    【解决方案1】:

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

    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}
    

    【讨论】:

      【解决方案2】:

      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 完全生成,然后再执行 - 无需 sleep 调用!

      【讨论】:

      • 对于任何也需要这个作为哨兵的人,我强烈建议将以下检查添加到您的哨兵脚本中,以便在找不到 dSYM 时运行脚本将失败:sentry-cli difutil check "$DWARF_DSYM_FOLDER_PATH/$DWARF_DSYM_FILE_NAME/Contents/Resources/DWARF/$TARGET_NAME"
      【解决方案3】:

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

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

      sleep 5
      

      【讨论】:

      • 这对我也有用。我们的项目一年多来没有对 dsym 上传进行任何更改,它突然开始崩溃,所以我猜我们达到了一定的大小,这意味着我们需要休眠以允许操作系统及时复制内容。
      【解决方案4】:

      根据一些答案,我编译了以下内容:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        • 2015-11-26
        • 1970-01-01
        • 2010-11-23
        • 2015-01-18
        • 1970-01-01
        • 2010-11-24
        相关资源
        最近更新 更多