如何为不同的目标分配特定位置的 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.lproj
、fr.lproj
重复第 6 步,每次从 Finder 中拖动整个 .lproj
,并与相应的目标关联。
某些.lproj
可能包含其他本地化文件,您希望享受第 3 步的魔力。只需删除它们的引用即可。
你已经完成了。
最后的设置,比如说德语,在File Inspector中将如下所示:
参考文献:
跨目标共享本地化:
这是实现本地化的一般方法。见https://***.com/a/33749062/218152。
针对特定目标的特定本地化:
这仅在您想明确控制哪些语言进入哪个目标时才有用。见https://***.com/a/33791181/218152。
【讨论】:
亲爱的 SwiftArchitect。非常感谢您的解释。这听起来非常好,我将对此进行测试。实际上,我有自己的 hack,我对此并不满意。所以我会在我的下一个版本中肯定地检查这一点。我会回到这个。非常感谢。以上是关于如何为不同的目标分配特定位置的 BundleDisplayNames的主要内容,如果未能解决你的问题,请参考以下文章
Xcode:如何为指向两个不同团队帐户(企业和公司)的两个不同目标选择两个不同的应用程序组