16

从这个老问题:可可应用程序的信息列表中的“捆绑显示名称”和“捆绑名称”有什么区别

它指向官方文档,其中说:

CFBundleName

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

谁能告诉如何在 iOS 中显示这个名字?

我从来没有能够在我的 iPhone 中显示这个值。

4

7 回答 7

25

在我看来,它不像在 iOS 上向用户CFBundleName展示的任何地方。我相信我已经看过 Mac OS X 的文档(显然 iOS 继承了很多遗留的基础设施),上面说 Bundle Name用于其他用途......我认为它可能是上部菜单中的名称栏,或较低的 Dock 栏。当然,iOS 中都不存在任何东西。

我还发现了这个 Stack Overflow 答案,它现在已经很老了(但有不少赞成票)。这个答案声称 CFBundleName 将是存储应用程序的文件夹的名称。因此,例如,CFBundleName = HelloWorld应该产生

+- HelloWorld.app
    - HelloWorldApplication

如果Executable Name设置为HelloWorldApplication. 但是,我只是构建了一个简单的程序并在 iOS 5.0 上运行它,而 .app 文件夹的名称等于CFBundleName. 所以,如果它曾经那样工作,它似乎不再是。

我已经看到很多参考资料说CFBundleName应该${PRODUCT_NAME}在 Xcode 中设置为,这是我一直做的。不是作为技术限制,而是作为 Apple 审查标准,我还看到有人声称CFBundleDisplayName必须. CFBundleName例如,如果它是 的缩短版本是可以的CFBundleName,但如果它完全不相关,他们可能会拒绝该应用程序。

我还检查了Settings.app和 iTunes 中的列表,但我在这些地方都没有看到Bundle Name

所以,为了回答你的问题,我不相信这个变量对用户是可见的(在 iOS 上)。


更新:但是,我没有检查任何辅助功能是否可以在任何地方说出这个名字。

此外,这个 SO answer声称这CFBundleName将是您的应用程序的 iTunes App Store URL 中使用的名称。但是,请参阅下面的@tc. 的评论/示例 URL ...


更新 2:根据下面@honus 的评论,可以向用户显示的一种不寻常的情况是,如果您的应用在其 Info.plist 文件中没有条目。在这种情况下,将显示在 SpringBoard 中的应用程序图标下。CFBundleName CFBundleDisplayNameCFBundleName

于 2012-09-02T00:45:25.867 回答
1

它没有详细记录,但在ASWebAuthenticationSessionCFBundleName显示的权限对话框中显示给用户。

ASWebAuthenticationSession 对话框示例

于 2021-06-24T15:47:26.847 回答
0

您可以像这样访问这些密钥。

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]

infoDicitonary在哪里A dictionary, constructed from the bundle's Info.plist file。在那里您可以找到有关您的应用程序的此类信息。NSBundle

App-info.plist注意:您可以通过打开文件并右键单击任意位置然后选择选项来检查实际密钥Show Raw Keys/Values

于 2012-08-27T17:43:38.750 回答
0

在本地化 MacOS Cocoa 应用程序时,在 Mac OS 菜单栏中使用 CFBundleName 作为应用程序名称(位于文件菜单的右侧)。所以它肯定是有意义的。不知道,如果它被使用并显示在其他地方。但是,在本地化您的应用程序时,最好不要忽略它!

于 2016-01-09T14:08:25.190 回答
0

在 macOS 上,它被用作决定应用程序名称是否应在 Finder 中本地化的一种方式。如果包的实际名称(当然由“.app”扩展)匹配CFBundleName,Finder 将显示其本地化显示名称。但是,用户可能会将应用程序重命名为他认为更合适的名称,在这种情况下,macOS 需要一种方法来判断名称是否是自定义的。

于 2018-12-10T22:57:47.193 回答
-1

如果您通过上下文单击项目树中的 info.plist 文件并选择“打开为 > 源代码”来打开 info.plist 文件,您将看到 plist 的 XML 表示。默认情况下,这两个键具有相同的值,因此您可以访问其中一个。

<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>

要实际获取值,您可以使用此 SO 帖子作为指导:如何向用户显示我的应用程序的当前项目版本?只需将CFBundleVersion密钥替换为CFBundleDisplayName.

在本质上:

NSString *displayName = [[[NSBundle mainBundle] infoDictionary] 
                                          valueForKey:@"CFBundleDisplayName"];
于 2012-08-27T18:06:51.530 回答
-4

Bundle name 是文件系统上实际应用程序包的名称。

捆绑显示名称是用户将在其 iOS 设备上看到的应用程序图标的标题或在 OSX 上的图标标题。

于 2012-09-05T06:45:03.373 回答