你可以在 Xcode 的构建阶段更改运行脚本中的 info.plist 吗?

Posted

技术标签:

【中文标题】你可以在 Xcode 的构建阶段更改运行脚本中的 info.plist 吗?【英文标题】:Can you change info.plist inside a Run Script in Xcode's Build Phase? 【发布时间】:2021-11-12 08:02:14 【问题描述】:

我正在尝试在构建阶段运行脚本中为我的Info.plist 添加一个值:

/usr/libexec/PlistBuddy -c "Add :BuildDate date `date`" "$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"

# For debugging:
cat "$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" | grep BuildDate

这行得通(正如 cat 所证明的那样),但似乎结果几乎立即被其他 Xcode 构建步骤覆盖。

在构建阶段根本不可能修改Info.plist 吗?我已经在网上看到了很多建议来做到这一点。

【问题讨论】:

我也试过$TARGET_BUILD_DIR/$INFOPLIST_PATH;像上面一样,我可以看到它已添加到已编译应用程序的 plist 中,但在构建完成之前,新条目消失了。 【参考方案1】:

我假设您正在尝试修改 Info.plist(而不是 plist.info,因为我不知道那是什么)。

在构建阶段绝对可以创建、修改或删除Info.plist。但是,您需要在构建过程需要使用Info.plist 之前这样做。具体时间有所不同,但越早越好 - 我建议在 Dependencies 步骤之后立即这样做。

我有一个 sample Xcode project 为 macOS 应用程序和 macOS 命令行工具执行此操作。它比您可能尝试做的要复杂得多,但看看它的配置方式可能会有所帮助。

【讨论】:

将此标记为已接受的答案,因为它是对我提出的问题的准确答案,并附有提供研究证据的回购,谢谢!但是,我想与我和其他有相同问题的人更相关的是,为什么它在特定情况下不起作用和/或可以做些什么来哄它这样做。我相信我已经在这方面发现了一两件事,因此将添加另一个描述它们的答案。【参考方案2】:

所以我从来没有真正发现为什么这对我不起作用但对其他人起作用。但是,我确实遇到了a post,它为我解决了这个问题。解决方案是将Info.plist 文件添加为构建阶段的输入文件。

$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH

【讨论】:

以上是关于你可以在 Xcode 的构建阶段更改运行脚本中的 info.plist 吗?的主要内容,如果未能解决你的问题,请参考以下文章

在Xcode中切换运行脚本构建阶段

仅为 Xcode 4 中的“存档”构建运行脚本

在 Xcode 构建阶段运行脚本中设置全局环境变量

Xcode 运行脚本构建阶段“仅在安装时运行脚本”选项

在 FirebaseCrashlytics 的构建阶段运行脚本中上传符号时,Xcode 构建永远不会完成

如何在 Xcode 中临时禁用运行脚本阶段