मेरे iPhone ऐप अपने स्वयं के संस्करण संख्या का पता कैसे लगा सकता है?


254

मैं एक iPhone ऐप लिख रहा हूं। यह पहले ही प्रकाशित हो चुका है, लेकिन मैं एक ऐसी सुविधा जोड़ना चाहूँगा जहाँ इसका संस्करण संख्या प्रदर्शित हो।

मैं नहीं बल्कि मैन्युअल रूप से मैं जारी प्रत्येक संस्करण के साथ यह करना होगा ...

क्या यह पता लगाने का एक उद्देश्य है कि सी मेरे ऐप का संस्करण क्या है?


1
यह सवाल पहले से ही यहाँ उत्तर दिया गया है stackoverflow.com/a/16888788/2890157
अक्षत सिंघल

1
.. जुड़ा हुआ प्रश्न 4 साल बाद का है, इसलिए यहाँ असली मुद्दा यह है कि cmos ने कभी एक उत्तर स्वीकार नहीं किया । बावजूद, जुड़े हुए प्रश्न के उत्तर उपयोगी हैं, जैसा कि यहाँ उत्तर हैं। दोनों थ्रेड्स पर, पहले उत्तर से परे देखें - कभी-कभी बाद के उत्तर पर अधिक अप-टू-डेट जानकारी होती है।
टूलमेकरसेव

जवाबों:


222

जैसा कि मैं यहाँ वर्णन करता हूं , मैं अपने वर्तमान तोड़फोड़ संशोधन संख्या के साथ एक हेडर फ़ाइल को फिर से लिखने के लिए एक स्क्रिप्ट का उपयोग करता हूं। वह संशोधन संख्या kRevisionNumber स्थिर में संग्रहीत है। फिर मैं संस्करण और संशोधन संख्या का उपयोग कर सकते हैं जो निम्न के समान है:

[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]

जो "संस्करण 1.0 (51)" प्रारूप की एक स्ट्रिंग बनाएगा।


152
इसने मेरे बिल्ड वर्जन को वापस कर दिया इसलिए मैंने इसे इस्तेमाल किया। [[[NSBundle mainBundle] इन्फोर्मेशन] objectForKey: @ "CFBundleShortVersionString"]
jspooner

6
CFBundleVersion गलत है, क्योंकि Xcode गलत तरीके से बिल्ड नंबर और संस्करण संख्या के साथ उस प्लिस्ट प्रविष्टि को पॉप्युलेट करता है। jspooner सही है।
ऑस्कर

4
संस्करण बनाम बिल्ड नंबरों की शानदार व्याख्या के लिए stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4 देखें । पुष्टि करता है CFBundleShortVersionStringकि आप सामान्य रूप से 'संस्करण' के लिए और CFBundleVersionबिल्ड नंबर के लिए क्या चाहते हैं ।
रोरी

3
kRevisionNumber मेरे लिए काम नहीं करता है। निर्दिष्ट उत्पादन प्राप्त करने के लिए मैंने ऐसा किया (@jspooner के फिक्स का उपयोग करके):[NSString stringWithFormat:@"Version: %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]]
एडम

147

ब्रैड लार्सन के उत्तर पर निर्माण करना, यदि आपके पास प्रमुख और मामूली संस्करण की जानकारी इन्फो प्लिस्ट में संग्रहीत है (जैसा कि मैंने एक विशेष परियोजना पर किया था), तो यह मेरे लिए अच्छी तरह से काम करता है:

- (NSString *)appNameAndVersionNumberDisplayString {
    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
    NSString *appDisplayName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    NSString *majorVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    NSString *minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"];

    return [NSString stringWithFormat:@"%@, Version %@ (%@)", 
                appDisplayName, majorVersion, minorVersion];
}

अब एक मामूली संस्करण को मैन्युअल रूप से प्रकट करना एक दर्द हो सकता है, और इसलिए स्रोत रिपॉजिटरी संशोधन संख्या चाल का उपयोग करना आदर्श है। यदि आपने ऐसा नहीं किया है (जैसा कि मेरे पास नहीं था), तो उपरोक्त स्निपेट उपयोगी हो सकता है। यह ऐप के डिस्प्ले नाम को भी खींचता है।


59

दोनों के लिए अलग से स्विफ्ट संस्करण:

स्विफ्ट 3

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

स्विफ्ट 2

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

इस रेपो में इसके शामिल हैं, इसे देखें:

https://github.com/goktugyil/EZSwiftExtensions


42

यह मैंने अपने आवेदन में किया है

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

उम्मीद है कि यह आसान जवाब किसी की मदद करेगा ...


1
मेरी जरूरतों के लिए, यह बहुत अच्छा है। धन्यवाद। +1
डेविड डेलमोनेट

1
यह बिल्ड नाम
लौटाता है

@chancyWu, CFBundleShortVersionString संस्करण देता है।
ब्रायन एफ लेटी

31

आप CFBundleShortVersionStringअपने plist.info में स्ट्रिंग निर्दिष्ट कर सकते हैं और दिए गए एपीआई का उपयोग करके प्रोग्राम को पढ़ सकते हैं ।


30

दो चीजें हैं- बिल्ड वर्जन और ऐप वर्जन।

  1. एप्लिकेशन संस्करण प्राप्त करने के लिए:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
  2. बिल्ड संस्करण प्राप्त करने के लिए:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

क्या इन दोनों में कोई अंतर है? वे दोनों मेरे लिए समान लौटाते हैं।
jjnevis

हां, आपकी बिल्ड संख्या और ऐप संस्करण सेटिंग में समान हो सकते हैं।
शैक रियाज़

ठीक है, मेरे पास केवल एक सेटिंग है मेरे RAKEFILE - app.version (मैं रूबीमोशन का उपयोग कर रहा हूं)। मुझे लगता है कि मेरी जरूरतों के लिए या तो करेंगे। धन्यवाद
jjnevis

धन्यवाद दोस्त। सहजता से काम लिया।
फेलिप

1
FYI करें क्योंकि objectForInfoDictionaryKey:इसके बजाय इसका उपयोग करना बेहतर होता है infoDictionary] objectForKey:क्योंकि पूर्व में स्थानीयकृत मान (यदि कोई है) लौटाता है। शायद यहाँ कोई फर्क नहीं पड़ेगा;)
deanWombourne

17
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

1
वास्तव में मुझे क्या चाहिए!
जूलियस

16

XYZ प्रारूप में एक संस्करण स्ट्रिंग प्राप्त करने का एक संक्षिप्त तरीका है:

[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]

या, सिर्फ XY के लिए:

[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]

इन दोनों स्निपेट्स के तार आप अपने लेबल ऑब्जेक्ट की टेक्स्ट प्रॉपर्टी, जैसे को सौंपेंगे

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];

7

आप शब्दकोश का उपयोग करने की कोशिश कर सकते हैं: -

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]

4

अपने ऐप की info.plist फ़ाइल पढ़ें और कुंजी CFBundleShortVersionString के लिए मान प्राप्त करें। Info.plist को पढ़ना आपको एक NS नॉडर ऑब्जेक्ट देगा


4

आप इनफॉर्मेशन का उपयोग कर सकते हैं, जो आपको ऐप के info.plist से संस्करण विवरण प्राप्त करता है। यह कोड स्विफ्ट के लिए काम करता है। 3. इस पद्धति को कॉल करें और किसी भी पसंदीदा UI तत्व में संस्करण प्रदर्शित करें।

Swift-3  

func getVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let version = dictionary["CFBundleShortVersionString"] as! String
    let build = dictionary["CFBundleVersion"] as! String
    return "v\(version).\(build)"
}

3

स्विफ्ट 5:

दो चीजें हैं - ऐप संस्करण और बिल्ड संस्करण

  • एप्लिकेशन संस्करण प्राप्त करने के लिए:

     if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
          // present appVersion
    }
  • बिल्ड संस्करण प्राप्त करने के लिए:

     if let buildVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
          // present buildVersion
     }

@Brad Larson♦बहुत बहुत धन्यवाद


1

यदि आपको दोनों संस्करण के संयोजन की आवश्यकता है और संख्या का निर्माण करना है , तो यहां स्विफ्ट 3 का उपयोग करने का एक छोटा तरीका है :

let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]!
let versionInfo = "\(appVersion) (build \(buildNum))"
// versionInfo is now something like "2.3.0 (build 17)"

किसी वस्तु के रूप में केवल उस हिस्से को प्राप्त करने के लिए या as! Stringतो रेखा के अंत में एक जोड़ें । यदि आप पूर्ण की तलाश कर रहे हैं तो इसके लिए कोई ज़रूरत नहीं है ।appVersionbuildNumStringversionInfo

आशा है कि ये आपकी मदद करेगा!


1
func getAppVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let versionValue = dictionary["CFBundleShortVersionString"] ?? "0"
    let buildValue = dictionary["CFBundleVersion"] ?? "0"
    return "\(versionValue) (build \(buildValue))"
}

मजबूरन बिना @ राज चौहान के जवाब के आधार पर String


0

रिवीजन कंट्रोल सिस्टम के साथ हैंडल करना अच्छी बात है। इस तरह जब आप किसी उपयोगकर्ता से बग रिपोर्ट प्राप्त करते हैं, तो आप कोड के उस संशोधन की जांच कर सकते हैं और (उम्मीद है) उपयोगकर्ता के समान सटीक कोड चलाने वाले बग को पुन: उत्पन्न कर सकते हैं।

विचार यह है कि हर बार जब आप एक निर्माण करते हैं, तो आप एक स्क्रिप्ट चलाएंगे जो आपके कोड का वर्तमान संशोधन नंबर प्राप्त करती है और आपकी परियोजना के भीतर एक फ़ाइल को अपडेट करती है (आमतौर पर टोकन प्रतिस्थापन के कुछ रूप के साथ)। फिर आप एक त्रुटि हैंडलिंग दिनचर्या लिख ​​सकते हैं जिसमें हमेशा त्रुटि आउटपुट में संशोधन संख्या शामिल होती है, या आप इसे "लगभग" पृष्ठ पर प्रदर्शित कर सकते हैं।


0

आप इस विधि को आजमा सकते हैं:

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