它指向官方文档,其中说:
CFBundleName
CFBundleName(String - iOS,OS X)标识捆绑包的短名称。此名称长度应少于16个字符,并且适合在菜单栏和应用程序的“信息”窗口中显示。您可以将此密钥包含在相应.lproj子目录的InfoPlist.strings文件中,以便为其提供本地化值。如果您本地化此密钥,则还应包括密钥“CFBundleDisplayName”。
任何人都可以告诉如何在iOS中显示此名称?
我从来没有能够在我的iPhone中显示这个值。
在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图标下。
您可以像这样访问这些密钥。
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]
infoDicitonary
是A dictionary, constructed from the bundle's Info.plist file
。在那里,您可以找到有关您的应用程序的此类信息。 NSBundle
注意:您可以通过打开App-info.plist
文件并右键单击任意位置然后选择Show Raw Keys/Values
选项来检查实际键。
在本地化MacOS Cocoa应用程序时,使用CFBundleName作为应用程序名称在Mac OS MenuBar中(从文件菜单中)。所以它肯定有意义。不知道,如果它被使用并显示在其他地方。但最好不要在本地化您的应用时将其遗漏!
在macOS上,它用作决定应用程序名称是否应在Finder中本地化的方法。如果捆绑包的实际名称(当然由'.app'扩展)与CFBundleName
匹配,Finder将显示其本地化的显示名称。但是,用户可能会将应用程序重命名为他认为更合适的内容,在这种情况下,macOS需要一种方法来判断名称是否已自定义。
如果您通过上下文在项目树中单击它并选择“打开为>源代码”打开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"];
Bundle name是文件系统上实际应用程序包的名称。
捆绑显示名称是用户将在其iOS设备上或OSX上的图标标题上看到的应用程序图标的标题。