【问题标题】:Set bundle display name to version string via run script in Xcode通过 Xcode 中的运行脚本将包显示名称设置为版本字符串
【发布时间】:2018-04-10 06:45:01
【问题描述】:

如果满足特殊条件,我正在尝试通过 Xcode 运行脚本更改包显示名称。到目前为止,我有这个:

if [ MY_CONDITION ]; then
BUNDLE_DISPLAY_NAME = ${BUNDLE_VERSION};

fi

我收到这个错误

第 3 行:BUNDLE_DISPLAY_NAME:找不到命令

我在哪里可以找到这些花哨的变量名?我正在尝试用脚本做些什么吗?

【问题讨论】:

  • 不会在Info.plist文件中设置显示名称吗?
  • @trojanfoe 你的意思是我可以更改 Info.plist 文件中的 Bundle 显示名称?当然。但是我可以在那里设置条件结果吗?我不这么认为。如果我错了,请指导我。
  • 是的;您需要创建一个新的 external tool 目标(我认为它就是这样)。该脚本然后评估条件并使用Plistbuddy 更改Info.plist 文件中的值。然后,您使您的捆绑目标依赖于这个外部工具目标。

标签: xcode build-script


【解决方案1】:

删除 = 符号 (BUNDLE_DISPLAY_NAME=${BUNDLE_VERSION};) 周围的空格,否则 bash 将 BUNDLE_DISPLAY_NAME 解释为单独的命令并尝试执行 BUNDLE_DISPLAY_NAME,但找不到此命令。但是 bash 将 BUNDLE_DISPLAY_NAME=${BUNDLE_VERSION} 解释为操作赋值 ${BUNDLE_VERSION} 和变量 BUNDLE_DISPLAY_NAME

【讨论】:

  • 请详细说明您的答案。也许是为什么有人不应该添加空格等。
【解决方案2】:

为了清楚起见并正式将@trojanfoe 的评论放在答案中,BUNDLE_DISPLAY_NAME 不是构建变量。这是您目标的 Info.plist 中的一个值。您需要在此处进行更改。

为了保持您的源代码管理干净,您应该将以下脚本放在您的 Copy Bundle Resources 阶段之后

if [ MY_CONDITION ]; then
  newDisplayName="${BUNDLE_VERSION}"
  command="Set :CFBundleDisplayName $newDisplayName"

  echo "Updating display name in app package to \"$newDisplayName\""
  /usr/libexec/PlistBuddy -c "$command" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"

  filepath="${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}.dSYM/Contents/Info.plist"
  if [ -f "$filepath" ]; then
    echo "Updating display name in dsym to \"$newDisplayName\""
    /usr/libexec/PlistBuddy -c "$command" "$filepath"
  fi;
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-05
    • 2021-01-04
    • 1970-01-01
    • 2012-07-30
    • 2015-01-20
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多