使用CFBundleName的地方

时间:2012-08-27 17:36:49

标签: iphone objective-c ios xcode cocoa

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

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

  

CFBundleName

     

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

有谁能说出如何在iOS中显示此名称?

我无法在iPhone中显示此值。

7 个答案:

答案 0 :(得分:17)

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

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

+- HelloWorld.app
    - HelloWorldApplication

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

我看过很多引用说明{X}应该将CFBundleName设置为${PRODUCT_NAME},这就是我一直以来所做的。不是技术限制,但作为Apple审核标准,我也看到有人声称CFBundleDisplayName必须与CFBundleName密切相关 。例如,如果它是CFBundleName的缩短版本,则可以,但如果它完全不相关,则可能会拒绝该应用。

我还检查了 Settings.app 中的商家信息,在iTunes中,我没有看到其中任何一个地方的包名称

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


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

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


更新2 :根据以下@ honus的评论,向用户显示CFBundleName 可以的一个异常方案是您的应用在其Info.plist文件中的CFBundleDisplayName条目中包含条目。在这种情况下,CFBundleName将显示在SpringBoard中的应用程序图标下。

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

ASWebAuthenticationSession Dialog Example

答案 5 :(得分:-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"];

答案 6 :(得分:-4)

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

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