কোডটিতে আমি কীভাবে আমার আইওএস প্রকল্পের বর্তমান সংস্করণটি পাব?


151

আমি NSStringকোথাও কোথাও একটি ফাইলের ধ্রুবককে সংজ্ঞায়িত না করেই আমার আইওএস প্রকল্প / অ্যাপ্লিকেশনটির বর্তমান সংস্করণটি একটি বিষয় হিসাবে পেতে সক্ষম হতে চাই । আমি আমার সংস্করণ মানটি 2 জায়গায় পরিবর্তন করতে চাই না।

আমি যখন প্রকল্প টার্গেটের সারাংশে আমার সংস্করণটি টুকরো টুকরো করে তখন মানটি আপডেট করা দরকার be

উত্তর:


381

আপনি নিম্নলিখিত হিসাবে সংস্করণ এবং সংখ্যা তৈরি করতে পারেন:

let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String

বা উদ্দেশ্য-সি

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];

আমার এখানে একটি বিভাগে নিম্নলিখিত পদ্ধতি রয়েছে UIApplication:

extension UIApplication {

    static var appVersion: String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    }

    static var appBuild: String {
        return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
    }

    static var versionBuild: String {
        let version = appVersion, build = appBuild            
        return version == build ? "v\(version)" : "v\(version)(\(build))"
    }
}

বক্তব্য: https://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b


এখানে উদ্দেশ্য-সি এর সমতুল্য:

+ (NSString *) appVersion
{
    return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];    
}

+ (NSString *) build
{
    return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
}

+ (NSString *) versionBuild
{
    NSString * version = [self appVersion];
    NSString * build = [self build];

    NSString * versionBuild = [NSString stringWithFormat: @"v%@", version];

    if (![version isEqualToString: build]) {
        versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build];
    }

    return versionBuild;
}

বক্তব্য: https://gist.github.com/ashleymills/c37efb46c9dbef73d5dd


1
আপনি এই [[এনএসবান্ডেল মেইনবান্ডেল] অবজেক্টফোর্ডফোর্ডোরিজ কেই ব্যবহার করতে পারেন: @ "সিএফবান্ডেল ভার্শন"] এর পরিবর্তে [[এনএসবান্ডেল মেইনবান্ডেল] অব্জেক্টফরইনডোরিওকি:: (এনএসএসটিং *) কেসিএফবান্ডেল ভার্শনকী] পূর্বসূরিটি "সিএনবি'র ফর্মেন্টের জন্য সিএনভিউন্ডারশিয়ান [ফরাসী] এর জন্য সিঞ্চিরভিউ'র সিলেকব্রেয়ারশ্রুচকে বলেছেন:" মূল সিলেক্টরিংয়ের জন্যই সিআরবি'র জন্য সিআরভিউয়ারশিয়ারকে [সিএনএসব্রান্ডিং] " ]; সুতরাং এখন স্মৃতিতে রাখা সহজ হয়ে গেছে
— দুরাই আমুথান H

4
@ দুরাইমুথান আমি এর (NSString *)kCFBundleVersionKeyপরিবর্তে ব্যবহারের পরামর্শ দেব @"CFBundleVersion"। যদিও এটি টাইপ করতে দীর্ঘতর (স্বয়ংক্রিয় সম্পূর্ণ এখানে সহায়তা করবে), এটি একটি ধ্রুবক হিসাবে এটি সংকলনের সময় পরীক্ষা করা হয়।
— অ্যাশলে মিলস

বিটিডব্লিউ, এর NSBundleপরিবর্তে এই এক্সটেনশানটি করা আরও সঠিক UIApplicationহবে উদাহরণস্বরূপ স্থায়ী কলগুলি প্রতিস্থাপনের অনুমতি দেবে।
— জ্যাপকো

@ জাপকো - আমি শ্রদ্ধার সাথে একমত নই। ধারণাটি অনুসারে এটি এর সাথে খাপ খায় UIApplication, যেহেতু প্রত্যাবর্তিত তথ্যগুলি প্রয়োগ সম্পর্কিত তথ্য। এছাড়াও, এটি কেবল mainবান্ডিলের জন্যই প্রযোজ্য - এটি কোনও বান্ডেলে উদাহরণস্বরূপ পদ্ধতি তৈরি করার কোনও মানে হবে না।
— অ্যাশলে মিলস

আপনি buildযখন বলেছিলেন appBundle(আপনার কোডের ২ য় লাইনে) আপনি কি বলতে চাচ্ছেন ?
— ব্যবহারকারী 1046037

14

এক্সকোড 8, সুইফট 3 এ কী কাজ করেছে তা এখানে :

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"

print("Version: \(gAppVersion)")
print("Build: \(gAppBuild)")

3

উদ্দেশ্য সি:

1) অ্যাপ্লিকেশন সংস্করণ পাওয়ার জন্য আপনাকে একটি ব্যবহার করতে হবে:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

2) বিল্ড সংস্করণ পাওয়ার জন্য আপনাকে একটি ব্যবহার করতে হবে:

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

1

সুইফটে, আপনি ব্যবহার করে বান্ডিল সংস্করণটি পেতে পারেন:

let info:NSDictionary = NSBundle.mainBundle().infoDictionary!

let version:String = info.objectForKey("CFBundleShortVersionString") as! String

versionLabel.text = "Version:" + version

0

আমার একটি ওপেন সোর্স প্রকল্প, অ্যাপ আপডেট ট্র্যাকার , শ্রেণি পদ্ধতিগুলির আকারে এই কার্যকারিতাটি (এবং আরও অনেক কিছু) সরবরাহ করে:

  • + (NSString *)getShortVersionString
  • + (NSString *)getLongVersionString

আপনি এটির মতো ব্যবহার করবেন:

#import "AppUpdateTracker.h"

NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);

0

শুধু নোট জন্য

আপনার ব্যবহার করা উচিত এমন কোনও কীটির স্থানীয়ীকৃত মান অর্জন করতে CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)


-1

সুতরাং পৃথকভাবে এই উভয়ের জন্য একটি সুইফ্ট সংস্করণ:

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

এটি এই রেপোতে অন্তর্ভুক্ত রয়েছে, এটি পরীক্ষা করে দেখুন:

https://github.com/goktugyil/EZSwiftExtensions


CFBundleVersionKey আর এক্সকোড 8 এবং সুইফট 3 এ কাজ করে না আপনি কি নতুন কী জানেন?
— ক্র্যাশলোট

এখানে একটি আপ টু ডেট রয়েছে: github.com/goktugyil/EZSwiftExtensions/blob/…
— এসকরোথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.