如何在 Xcode 中动态填充 Info.plist 值?

Posted

技术标签:

【中文标题】如何在 Xcode 中动态填充 Info.plist 值?【英文标题】:How to populate Info.plist values dynamically in Xcode? 【发布时间】:2010-08-12 17:00:21 【问题描述】:

无法弄清楚如何使用 $BUNDLE_VERSION 动态填充 CFBundleVersion,我想将其定义为

BUNDLE_VERSION=`date "+%y%m%d"`

【问题讨论】:

【参考方案1】:

如果您使用 xcodebuild 进行命令行构建,您可以执行类似的操作

xcodebuild -target MyApp -configuration AppStore BUNDLE_VERSION=`date "+%y%m%d"`

但是,我建议不要这样做。 App Store 应用具有三个版本:

iTunes Connect 版本号(这是通常向用户显示的唯一版本) CFBundleVersion CFBundleShortVersionString

我认为它们都应该是[0-9]+.[0-9]+(.[0-9]+)? 的形式。为了避免混淆,我将它们都设置为 App Store 构建的相同内容(我们在错误报告中包含 CFBundleVersion/CFBundleShortVersionString,如果它们匹配 CFBundleVersion 很好)。非 App Store 构建可以包含更多信息,因为它们不需要提交。

我不知道 iTunes Connect 是否允许您使用不包含“.”的 CFBundleVersion 提交应用,但我没有对此进行广泛测试。

【讨论】:

CFBundleShortVersionString 是 AppStore.app 和 iTunes Store 所使用的。 CFBundleVersion 只能从 iTunesConnect 的元数据中看到。自 2008 年以来,我将 CFBundleVersion 作为无符号整数使用,没有任何问题。我正在尝试使该字段对识别构建时间而不是应用程序版本稍微有用。 否;商店会在 iTunes Connect 中显示作为“版本”输入的任何内容。如果您要将它用作时间戳,我也很想包括时间(yyyyMMdd.HHmmss);这意味着更容易区分同一天的多个构建。也就是说,标记构建的更好方法是包含您自己的 Info.plist 键(也许是“DetailVersion”),它可以是您喜欢的任何格式。我包括分支、SVN 版本、配置和内部版本号。 如果您使用企业部署模型(或 Ad-hoc),则不涉及 iTunes Connect。在桌面 iTunes 软件中,它显示 CFBundleShortVersionString 作为版本。 我特意说的是App Store。 App Store 上不显示 Ad Hoc 应用程序。【参考方案2】:

您需要一个 Xcode 配置文件和一个在构建时设置的配置变量。这是 Diego Massanti 博客上的 described in some detail。您需要修改他描述的构建阶段,将变量设置为当前日期,而不是增加现有值。

【讨论】:

我研究了 xcode 构建的生命周期。它首先评估 Info.plist,然后才执行构建阶段。它不是真正动态的,因为它创建了一个用于下一次构建迭代的状态。我对迭戈有一个改进。他应该真正编辑(后处理)已构建文件夹中的 Info.plist 并获得动态方面。多亏了你,我知道它是如何实现的,但它非常难看

以上是关于如何在 Xcode 中动态填充 Info.plist 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 15 Xcode 13 中将填充图标更改为未填充 TabView tabItem?

如何更改状态栏颜色?

如何在 Xcode 中获取 UI 对象

如何在多个文件输入中动态填充文件

在Xcode中设置图像高度填充自动布局

ios:在当前应用中打开已安装的另外一个ios应用