आईओएस: कोड में ऐप-इंफो.प्लेस्ट वैरिएबल एक्सेस करें


103

मैं एक यूनिवर्सल ऐप पर काम कर रहा हूं और अपने कोड में app-info.plist फ़ाइल में संग्रहीत मूल्यों तक पहुंचना चाहूंगा।

कारण: मैं एक स्टोरीबोर्ड से गतिशील रूप से एक UIViewController का उपयोग करता हूं:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];

अब, ऊपर स्टोरीबोर्ड नाम @ "MainStoryboard_iPhone" बदसूरत है।

मैं कुछ ऐसा करना चाहता हूं:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:appInfo.mainStoryboardBaseNamePhone bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];

जहाँ appInfo शायद app-info.plist में सभी मूल्यों का एक NS रिटेल हो सकता है

जवाबों:


253

आपकी परियोजना के लिए info.plist से विशेषताएँ निम्नलिखित द्वारा सीधे सुलभ हैं ...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

उदाहरण के लिए संस्करण संख्या प्राप्त करने के लिए आप निम्नलिखित कार्य कर सकते हैं

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

वहाँ एक गोचा है कि संस्करण संख्या अब info.plist में दो विशेषताएँ हैं - लेकिन आपको यह विचार है? यदि आप अपनी जानकारी को देखते हैं। स्रोत कोड के रूप में देखें। (राइट क्लिक करें। सूचना - ओपन अस का चयन करें) तो आपको उन सभी प्रमुख नामों को देखने को मिलेगा जिनका आप उपयोग कर सकते हैं।


5
जैसा कि इस पोस्ट में @Answerbot ने उल्लेख किया है: stackoverflow.com/a/4059118/1210822 : "CFBundleVersion को बिल्ड बनाने के लिए वापस कर दिया गया है और संस्करण CFBundleShortVersionString है, इसलिए अब plist से वर्जन नंबर प्राप्त करने के लिए, हमें उपयोग करने की आवश्यकता है: NSString * संस्करण = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"];
सोनाशिन

11.3 के लिए यह काम नहीं करता है, क्योंकि NSBundle का नाम बदल दिया गया था और नए बंडल में इसे अभी तक शामिल नहीं किया गया है। क्या xou में अपडेट है?
यवोन मार्ग्राफ

अगर मेरे पास एंटरप्राइज़ आईओएस ऐप है जो वेब के माध्यम से वितरित किया जाता है, तो क्या मैं पीएलआईएसटी फ़ाइल में कुंजी / मूल्य जोड़े जोड़ सकता हूं, और बाद में डाउनलोड के समय ऐप से उन मूल्यों को पढ़ सकता हूं?
Brant

हम AppDelegate.m से CFBundleVersion का मूल्य कैसे अपडेट कर सकते हैं?
प्रग्नेश

26

दामो के समाधान के लिए 4+ सिंटैक्स स्विफ्ट करें

Bundle.main.object(forInfoDictionaryKey: "KEY_NAME")

उदाहरण

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")

मेरे जैसे शुरुआती लोगों के लिए, Bundleआवश्यक हैimport SystemConfiguration
GrafOrlov

12

वैसे आप बहुत आसानी से info.plist का आरोप लगा सकते हैं:

स्टोरीबोर्ड का नाम प्राप्त करना:

NSString *storyboard  = [[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"];

यकीन नहीं होता है कि यह पता लगाएगा कि क्या यह एक iPad में है और इसे UIMainStoryboardFile~ipadइंस्टेंट कुंजी का उपयोग करना चाहिए ।


6
XCode स्वचालित रूप से डिवाइस के आधार पर iPhone / iPad स्टोरीबोर्ड फ़ाइलों के साथ कुंजी 'UIMainStoryboardFile' को पॉप्युलेट करता है :)
sherlock


6

आप NSBundle पर भी इन्फर्मेशन विधि का उपयोग कर सकते हैं:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.