2009-08-07 16 views
62

यह कैसे प्राप्त किया जा सकता है? मैं नाम प्राप्त करना चाहता हूं ताकि मैं इसे एक ऐप के भीतर प्रदर्शित कर सकूं, हर बार जब मैं एक नाम बदलता हूं तो कोड में इसे बदलने के बिना।रनटाइम पर एक आईफोन ऐप का उत्पाद नाम प्राप्त करना?

उत्तर

134

प्रयास करें इस

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

मिठास, धन्यवाद! –

+20

CFBundleDisplayName बंडल प्रदर्शन नाम देता है। ओपी ने उत्पाद का नाम मांगा। इस के लिए CFBundleName का उपयोग करें। ज्यादातर मामलों में दोनों एक जैसे होंगे, लेकिन यदि आप एक नया प्रदर्शन नाम सेट करते हैं (आइकन के नीचे प्रदर्शित कुछ के लिए जो फ़ाइल नाम के रूप में उपयुक्त नहीं है) तो अलग हो सकता है। –

+3

ऐप्पल इस पर एक तकनीकी लेख [http://developer.apple.com/library/mac/#qa/qa1544/_index.html) पर चर्चा करता है। विशेष ध्यान में यह है कि 'CFBundleDisplayName' के लिए कोई स्थिर नहीं है - एक स्ट्रिंग अक्षर का उपयोग करने के लिए सही बात है। –

12

जब मैं InfoPlist.strings का उपयोग करके अपने आवेदन नाम स्थानीय बनाना, जैसे

CFBundleDisplayName = "My Localized App Name"; 

मैं स्थानीय आवेदन नाम प्राप्त नहीं कर सकता है अगर मैं infoDictionary का उपयोग मैं एक समस्या थी।

उस स्थिति में मैंने नीचे स्थानीयकृत इन्फ्रायरेक्टरी का उपयोग किया था।

NSDictionary *locinfo = [bundle localizedInfoDictionary]; 
7

आप प्रत्यक्ष दृष्टिकोण का उपयोग कर सकते हैं,

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


अच्छा यहाँ जवाब।
हालांकि मैं एक चीज़ जोड़ूंगा।
बल्कि @ "CFBundleDisplayName" है, जो संभावित भविष्य में बदल गया है का उपयोग करने से, यह बहुत तरह स्ट्रिंग निरंतर CFBundle.h में आपूर्ति कास्ट करने के लिए सबसे अच्छा है:

अपने कोड
[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; 


इस प्रकार भविष्य-प्रूफिंग।

+6

यह एक अलग कुंजी है और शायद सभी मामलों में प्रदर्शन नाम नहीं हो सकता है। आश्चर्य की बात है, इस विशेष मामले के लिए एक स्ट्रिंग अक्षरशः [ऐप्पल अनुशंसा करता है] (http://developer.apple.com/library/mac/#qa/qa1544/_index.html) है। –

+0

भयानक उत्तर .. – svmrajesh

-2

आप इस शब्दकोश "जानकारी" से सभी बंडल विवरण प्राप्त कर सकते हैं। इस शब्दकोश को प्रिंट करें और जो भी आप चाहते हैं उसे प्राप्त करें।

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

एप्पल के अनुसार, NSBundle वस्तु पर सीधे - objectForInfoDictionaryKey: का उपयोग कर पसंद किया जाता है:

इस विधि का

उपयोग अन्य अभिगम विधि से अधिक पसंद किया जाता है क्योंकि यह एक प्रमुख के स्थानीय मान देता है जब एक ही उपलब्ध है । - धन्यवाद Jef स्विफ्ट 3 के लिए

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

अद्यतन:

यहाँ स्विफ्ट में एक उदाहरण है।

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

लोगों पर आओ ... यह गुणवत्ता का उत्तर है। – Jonny

+0

स्विफ्ट 3 के लिए महत्वपूर्ण रूप से बदल गया है - ऐपनाम = Bundle.main.object (forInfoDictionaryKey: "CFBundleName") के रूप में दें! स्ट्रिंग – Jef

0

यह इस पुराने प्रश्न के लिए बस एक तेज़ अपडेट है। मैं तेजी से जवाब की जरूरत होती थी और यह एक तरह से मुश्किल तेजी से वाक्य रचना में (optionals unwrapping) तो यह यहाँ

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

पूर्णता के लिए साझा करने, स्विफ्ट 3.0 होता था;

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

कोई टिप्पणी के साथ वोट क्यों दें? कोड काम करता है और उत्तर डुप्लिकेट नहीं है:/ – Patrick

+1

मैं आपको एक अपवित्र व्यक्ति दूंगा - मुझे आपको –

+1

मिल गया है, यह वास्तव में उस प्रश्न का उत्तर नहीं दे रहा है जो उत्पाद नाम मांग रहा है जिसे बंडल डिस्प्ले से अलग सेट किया जा सकता है नाम। – awolf

2

यहाँ साफ दृष्टिकोण मैं स्विफ्ट 3 का उपयोग के साथ आ सकता है।

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

निम्नलिखित कोड बेहतर होगा:

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

यहां एक्समरिन है।@ एपटेल के उत्तर का आईओएस संस्करण:

var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString; 
संबंधित मुद्दे