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


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.