2009-08-07 74 views

回答

134

试试这个

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"]; 
+0

甜蜜,谢谢! – 2009-08-08 00:20:52

+20

CFBundleDisplayName返回Bundle显示名称。 OP询问产品名称。为此使用CFBundleName。在大多数情况下,两者将是相同的,但如果您设置新的显示名称(对于不适合作为文件名的图标下显示的内容),则可能会有所不同。 – 2011-10-28 10:39:24

+3

Apple在[技术文章]中讨论了这个问题(http://developer.apple.com/library/mac/#qa/qa1544/_index.html)。特别值得注意的是,CFBundleDisplayName没有常量 - 字符串文字是正确的。 – 2012-11-21 20:00:16

12

我有一个问题,当我用InfoPlist.strings本地化我的应用程序的名称,如

CFBundleDisplayName = "My Localized App Name"; 

如果我使用infoDictionary我无法获得本地化的应用程序名称。

在这种情况下,我使用像下面这样的localizedInfoDirectory。

NSDictionary *locinfo = [bundle localizedInfoDictionary]; 
7

您可以用直接的方法,

NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]; 
51


这里很好的答案。
我会添加一件事。
而不是使用@“CFBundleDisplayName”,它在将来改变的潜力,这是最好的投在CFBundle.h提供的字符串常量,像这样:

[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; 


因此,面向未来的代码。

+6

这是一个不同的键,可能不是所有情况下的显示名称。令人惊讶的是,字符串文字是[Apple推荐](http://developer.apple.com/library/mac/#qa/qa1544/_index.html)。 – 2012-11-21 20:01:34

+0

真棒回答.. – svmrajesh 2014-04-03 11:22:38

-2

您可以从此字典“信息”中获取所有包的详细信息。打印这本字典,并得到你想要的。

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
29

据苹果,直接使用- objectForInfoDictionaryKey:NSBundle对象上是优选的:

使用这种方法优于其他接入方法,因为它返回一个键的本地值时有一个可用。

下面是斯威夫特的例子:

let appName = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String 
// Or use key "CFBundleDisplayName" 

更新斯威夫特3 - 感谢杰夫。

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String 
+0

来吧人...这是质量的答案。 – Jonny 2015-11-18 09:28:59

+0

已经发生了很大的变化 - 让appName = Bundle.main.object(forInfoDictionaryKey:“CFBundleName”)成为!字符串 – Jef 2017-03-20 12:48:48

0

这只是这个非常古老的问题的迅速更新。我需要迅速的答案,这是一种棘手的(通过拆自选)在迅速语法所以这里

let productName = NSBundle.mainBundle().infoDictionary!["CFBundleName"]! 
6

出于完整性共享它,雨燕3.0是;

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String 
+0

为什么投票没有评论?代码的作品和答案是不重复的:/ – Patrick 2016-09-05 10:13:46

+1

我会给你一个upvote男人 - 我得到你 – 2016-11-17 14:23:43

+1

这实际上不回答这个问题是要求产品名称可以设置不同于捆绑显示名称。 – awolf 2017-02-06 17:27:00

2

这是我能想出用斯威夫特3最干净的方法:

let productName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String 
0

下面的代码会更好。

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
self.appName = [info objectForKey:@"CFBundleExecutable"]; 
1

这里是Xamarin。@ epatel的iOS版的回答:

var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString; 
相关问题