如何为不同的目标分配特定位置的 BundleDisplayNames

Posted

技术标签:

【中文标题】如何为不同的目标分配特定位置的 BundleDisplayNames【英文标题】:How to assign location specific BundleDisplayNames for different Targets 【发布时间】:2015-11-02 14:14:04 【问题描述】:

我有 2 个应用程序:免费和完整 我有 2 种语言:英语和德语

这会产生 4 个不同的应用程序名称

我怎样才能做到这一点。

实际上我所有的目标都有“免费”的名字,即使是完整版。

我知道: 我有 1 个 InfoPlist.strings 文件,它乘以本地化,我可以将它们分配给目标。所以对于 1 个应用程序,我可以本地化 BundleDisplayName。

但是如何为第二个应用分配具体的名称?

【问题讨论】:

【参考方案1】:

PlistBuddy 是你的朋友。您需要做的是在构建时更新您的 plist。

    您必须为您拥有的每个目标创建自定义方案(我假设您已经拥有) 在您的 xcode 中转到方案并将类似的发布操作添加到自定义方案目标:

代码如下:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
/usr/libexec/PlistBuddy -c "Set CFBundleName some_new_name_here" "$infoplist"

使用这种方法的重要一点是,您不会更改 plist 文件中的任何内容,但通过后操作,您已经更改了为设备准备的数据包,因此您可以保持代码存储库整洁。

【讨论】:

感谢您的帮助。真的没有其他方法可以实现这一目标。在我看来,这听起来更像是一种黑客行为。我的意思是我们不能用开箱即用的 XCode 做到这一点吗? 嗯,对于德语和英语,你有两个本地化的 plist,对于免费和高级你有 plist buddy,什么是官方的 Apple 工具。我不认为是否有更“官方”的方式来做到这一点。【参考方案2】:

将 InfoPlist.strings 关联到目标

来自Apple Developer Technical Notes:

如果您的应用支持本地化,请务必通过将 CFBundleDisplayName 添加到所有特定语言的 InfoPlist.strings 文件来本地化它。此外,请务必为您的应用使用符合应用审核指南的名称。

先决条件

我假设您已经有多个目标。

我还假设您已经有一个 InfoPlist.strings 文件。如果你不这样做,代码 > 文件 > 文件... > 资源 > 字符串文件 > 下一步 > 另存为:InfoPlist > Base.lproj > 目标:英文目标 > 创建

确保您已在 Info.plist 中启用此功能:

<key>LSHasLocalizedDisplayName</key>
<true/>

一步一步

    项目导航器中,选择InfoPlist.strings。 在文件检查器 > 本地化中,选择所有语言。这将创建和/或复制所说的InfoPlist.strings 到它们各自的位置。 您想添加语言吗,您可以在 Project Navigator > project > Project & Target List > Project > Info > Localizations 中实现> +。同样,保持Use Base Internationalization。 不幸的是,当您执行第 2 步时,Xcode 会为您完成所有魔法。值得注意的是,在 Xcode 版本中没有发生这种魔法,您必须手动进行关联。第 5 步是关于恢复魔法。 从 Project Navigator 中删除 InfoPlist.strings。当然,只有在提示时删除引用。 在 Finder 中,找到 en.lproj,将其拖到您的 Project Navigator,选择 Create Groups,添加到目标您的英语或基础目标,完成 使用 de.lprojfr.lproj 重复第 6 步,每次从 Finder 中拖动整个 .lproj,并与相应的目标关联。 某些.lproj 可能包含其他本地化文件,您希望享受第 3 步的魔力。只需删除它们的引用即可。 你已经完成了。

最后的设置,比如说德语,在File Inspector中将如下所示:


参考文献:

跨目标共享本地化:

这是实现本地化的一般方法。见https://***.com/a/33749062/218152。

针对特定目标的特定本地化:

这仅在您想明确控制哪些语言进入哪个目标时才有用。见https://***.com/a/33791181/218152。

【讨论】:

亲爱的 SwiftArchitect。非常感谢您的解释。这听起来非常好,我将对此进行测试。实际上,我有自己的 hack,我对此并不满意。所以我会在我的下一个版本中肯定地检查这一点。我会回到这个。非常感谢。

以上是关于如何为不同的目标分配特定位置的 BundleDisplayNames的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:如何为指向两个不同团队帐户(企业和公司)的两个不同目标选择两个不同的应用程序组

如何为R中向量的特定元素分配名称

如何为不同的 SDK 目标管理同一类文件的多个版本?

如何为特定图片分配评级?

(Swift) 如何为单独的 iCarousels 分配特定数量的项目?

如何为numpy数组中的特定行和列分配字符串值?