2009-08-07 83 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; 
相關問題