【问题标题】:What's the difference between "bundle display name" and "bundle name" in cocoa application's info plist可可应用程序的 info plist 中的“bundle display name”和“bundle name”有什么区别
【发布时间】:2011-03-28 19:19:07
【问题描述】:

这是一个很好的问题:

Bundle Name, Executable Name, Product Name...anything else?

但我只是想知道 cocoa 应用程序的 info plist 中的“bundle display name”和“bundle name”之间的区别。

【问题讨论】:

    标签: iphone objective-c cocoa macos


    【解决方案1】:

    我认为其他任何答案都不能简明扼要地回答这个问题。

    • CFBundleDisplayName - 显示:图标下方。根据文档,应该本地化,但前提是应用程序本身已本地化,否则会有某种惩罚(如果这是真的我不能说)

    • CFBundleName - 显示:我不知道。文档建议它将在列表中使用,因此建议最多 16 个字符,但例如设置→常规→应用程序使用列表确实使用 CFBundleDisplayName。到目前为止,我从来没有弄清楚这个到底是在哪里使用的。

    哦,这是针对 iOS 应用的,不能代表其他操作系统。

    【讨论】:

    • CFBundleDisplayName 也是显示为通知标题的内容(在通知中心、锁定屏幕等)。
    • “我不知道”的答案是如何获得复选标记和赞成票的?
    • 我的意思是,似乎没有人知道它在哪里使用,也没有人回答。如果您确实知道答案,请随时点击“添加另一个答案”来添加它。
    • CFBundleDisplayName 也用于 iTunes 文件共享功能。如果保持黑色,即使启用了该功能,该应用也不会显示在 iTunes 列表中。
    • 我认为 CFBundleName 是存储所有内容的应用文件夹或“捆绑包”的名称。
    【解决方案2】:

    感谢 Wevah 的回答。以下是对这两个常量混淆的人的描述。

    CFBundleDisplayName

    CFBundleDisplayName(字符串 - iOS、Mac OS X)指定捆绑包的显示名称。如果您支持包的本地化名称,请在您的信息属性列表文件和语言子目录的 InfoPlist.strings 文件中包含此键。如果您将此键本地化,您还应该包含 CFBundleName 键的本地化版本。

    如果你不打算本地化你的包,不要在你的 Info.plist 文件中包含这个键。包含此键不会影响包名称的显示,但会导致搜索此键的本地化版本时的性能损失。

    在显示包的本地化名称之前,Finder 会将此键的值与文件系统中包的实际名称进行比较。如果这两个名称匹配,Finder 会继续显示来自您的包的相应 InfoPlist.strings 文件的本地化名称。如果名称不匹配,Finder 将显示文件系统名称。

    有关 Mac OS X 中显示名称的更多信息,请参阅文件系统概述。


    CFBundleName

    CFBundleName(字符串 - iOS、Mac OS X)标识捆绑包的短名称。此名称的长度应少于 16 个字符,并且适合显示在菜单栏和应用程序的信息窗口中。您可以将此键包含在适当的 .lproj 子目录的 InfoPlist.strings 文件中,以便为其提供本地化值。如果你本地化这个键,你还应该包含键CFBundleDisplayName.

    【讨论】:

    • 什么是“菜单栏和应用程序的信息窗口”??? - 这是指 Xcode、模拟器或 iOS 设备中的东西吗? @xhan - 有什么帮助吗?
    • @BeemerFan 它指的是 OS X 菜单栏。 xhan 引用了 Apple 的文档,如果你注意到的话,上面写着“iOS、Mac OS X”,所以它适用于两者(显然,有些细节是特定于平台的)。
    • 只是为了引用来源,这里是苹果文档中关于 CFBundleDisplayName 的信息:developer.apple.com/library/ios/documentation/General/Reference/…
    • 除非计划本地化,否则不要包含此键是错误的。苹果文件说你必须包含这个密钥,因为 Siri 使用它。 developer.apple.com/library/archive/documentation/General/…
    • Apple 现在似乎至少在 2019-06-28 或最近的某个地方需要 CFBundleDisplayName。您现在收到无效的二进制拒绝。
    【解决方案3】:

    根据苹果的说法,

    捆绑显示名称:

    显示的应用名称on the iPhone home screen来自 CFBundleDisplayName(或“捆绑显示名称”作为人类可读的 Xcode 中的字符串)iOS 应用的 Info.plist 条目

    同样,您在WatchKit app's launch screen 中看到的应用名称 notifications 来自 WatchKit 的 CFBundleDisplayName 应用的Info.plist

    捆绑包名称:

    The Apple Watch app on the iPhone 当前使用包名(不是 您的 iOS 应用程序的包显示名称),由 其 Info.plist 的 CFBundleName(或“Bundle name”)条目

    您可以通过clicking here 在 Apple 开发者页面查看其他相关屏幕截图并获取更多信息。

    【讨论】:

    • 我不禁想知道:如果您要费心截取屏幕截图来显示这些值的使用方式,给它们不同的值不是更好吗所以它们看起来不一样?
    【解决方案4】:

    根据我的经验:

    • CFBundleDisplayName 用于 iOS 设备上的应用网格
    • CFBundleName 用于存储在 iTunes 库中的应用列表

    【讨论】:

    • 只有 Apple 才能让简单的事情变得复杂。
    • 这似乎是对的,Google Hangouts 的显示名称很短,而 iTunes 库名称很长,就像垃圾邮件一样。
    • CFBundleName 如果您在安装应用时收到错误消息,例如“(CFBundleName) 目前无法安装”,也会出现。
    【解决方案5】:

    仅当未指定Bundle Display Name (CFBundleDisplayName) 时,才会使用Bundle Name (CFBundleName) 的值显示在App Icon 下方。

    请注意CFBundleDisplayName 是可本地化的,它应该用于设置iOS Springboard 菜单和Mac OS X Applications / Mission Control 中显示的App 名称。

    简而言之,不要触摸 CFBundleName 并将其值保留为默认值,即 ${PRODUCT_NAME}

    【讨论】:

      【解决方案6】:

      请注意,捆绑包名称也用作 HTTP 用户代理的前缀。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多