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

时间:2015-11-02 14:14:05

标签: ios xcode swift localization plist

我有2个应用程序:Free&充分 我有2种语言:英语&德国

这导致4个不同的应用程序名称

我怎样才能做到这一点。

实际上我的所有目标都有#34; Free"其中,甚至是完整版。

我知道: 我有1个InfoPlist.strings文件,它与本地化相乘,我可以将它们分配给目标。因此,对于1 App,我可以本地化BundleDisplayName。

但是如何为第二个应用分配特定名称?

2 个答案:

答案 0 :(得分:2)

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

  1. 您必须为您拥有的每个目标创建自定义方案(我假设您已经拥有该方案)
  2. 在你的xcode中转到scheme并将这样的post动作添加到自定义方案目标:
  3. enter image description here

    以下是代码:

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

    这种方法的重要之处在于,您不会在plist文件中进行任何更改,但通过后期操作,您已经更改了为设备准备的数据包,因此您可以保持代码存储库的良好和干净。

答案 1 :(得分:1)

将InfoPlist.strings与目标

相关联

来自Apple Developer Technical Notes

  

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

<强>先决条件

  • 我假设你已经有多个目标。

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

  • 确保您已在Info.plist

    中启用此功能
    <key>LSHasLocalizedDisplayName</key>
    <true/>
    

一步一步

  1. Project Navigator 中,选择InfoPlist.strings
  2. 文件检查器&gt;本地化,选择所有语言。这将创建和/或复制所述InfoPlist.strings到他们各自的位置。 Localize InfoPlist.strings
  3. 您是否想要添加语言,您可以在 Project Navigator &gt;中实现此目的。项目&gt; 项目&amp;目标列表&gt; 项目&gt;信息&gt;本地化&gt;的 + 即可。再次,保持使用基础国际化
  4. 不幸的是,当你执行第2步时,Xcode为你做了所有的魔术。值得注意的是,在Xcode的版本中,魔法没有发生,你必须手动完成关联。第5步是关于恢复魔法。
  5. Project Navigator 中删除InfoPlist.strings。当然,仅在提示时删除引用
  6. 在Finder中,找到en.lproj,将其拖到 Project Navigator ,选择创建群组,添加到目标您的英语或基地目标,完成
  7. 使用de.lprojfr.lproj重复步骤6,每次从Finder中拖动整个.lproj,并与相应的目标相关联。
  8. 某些.lproj可能包含您想要享受步骤3的魔力的其他本地化文件。只需删除其参考文献。
  9. 你已经完成了。
  10. 最后的设置,比如德语,在文件检查器中将如下所示:

    One InfoPlist.strings per target

    参考文献:

    跨目标共享本地化:

    这是实现本地化的一般方法。请参阅https://stackoverflow.com/a/33749062/218152

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

    这仅在您希望明确控制哪些语言进入哪个目标时才有用。请参阅https://stackoverflow.com/a/33791181/218152