使用CFBundleName的地方

问题描述 投票:12回答:6

从这个老问题:What's the difference between "bundle display name" and "bundle name" in cocoa application's info plist

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

CFBundleName

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

任何人都可以告诉如何在iOS中显示此名称?

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

iphone objective-c ios xcode cocoa
6个回答
17
投票

在iOS上,它看起来不像CFBundleName在用户的任何地方显示。我相信我已经看过Mac OS X的文档(显然iOS继承了很多遗留基础设施),说Bundle Name用于别的东西......我想它可能是上层菜单中的名字酒吧,或下部码头酒吧。当然,iOS中都不存在任何东西。

我也找到了this Stack Overflow answer,它现在很老了(但有很多赞成)。这个答案声称CFBundleName将是应用程序存储在其中的文件夹的名称。例如,CFBundleName = HelloWorld应该生成

+- HelloWorld.app
    - HelloWorldApplication

如果可执行文件名称设置为HelloWorldApplication。但是,我刚刚构建了一个简单的程序并在iOS 5.0上运行它,并且.app文件夹的命名不等于CFBundleName。所以,如果它以这种方式工作,它似乎就不再存在了。

我看过很多参考文献,说CFBundleName应该在Xcode中设置为${PRODUCT_NAME},这就是我一直以来所做的。不是技术限制,但作为Apple审查标准,我也看到人们声称CFBundleDisplayName必须与CFBundleName密切相关。例如,如果它是CFBundleName的缩短版本就可以了,但如果它完全不相关,他们可能会拒绝该应用程序。

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

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


更新:但是,我没有检查任何辅助功能是否可以在任何地方使用此名称。

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


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


0
投票

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

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

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

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


0
投票

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


0
投票

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


-1
投票

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

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

要实际获取值,您可以使用此SO帖子作为指导:How to display the current project version of my App to the user?只需用CFBundleVersion替换CFBundleDisplayName键。

在本质上:

NSString *displayName = [[[NSBundle mainBundle] infoDictionary] 
                                          valueForKey:@"CFBundleDisplayName"];

-4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.