আইওএস অ্যাপ্লিকেশন, প্রোগ্রামের ভিত্তিতে বিল্ড সংস্করণ পান


127

প্রোগ্রামের মতো আমার অ্যাপ্লিকেশনটির বিল্ড সংস্করণ পাওয়ার কোনও উপায় আছে কি? সামঞ্জস্যকরণের জন্য কিছু কোড কার্যকর করার জন্য যখন ব্যবহারকারী অ্যাপস্টোরের মাধ্যমে অ্যাপটি আপডেট করেছেন তখন আমাকে সনাক্ত করতে সক্ষম হওয়া দরকার



আরো দেখুন stackoverflow.com/questions/458632/...
rodamn

উত্তর:


284

এক্সকোড লক্ষ্য সংক্ষিপ্তসার "সংস্করণ" ক্ষেত্রে আপনি যে মানটি সেট করেছেন তা এখানে রয়েছে:

সুইফট 3

let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String

ObjC

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

সুইফট 2

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String

এবং "বিল্ড":

সুইফট 3

let build = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String

ObjC

NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];

সুইফট 2

let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String

5
আক্ষরিক স্ট্রিং ব্যবহার করে এবং ধ্রুবকটি ভবিষ্যতের প্রমাণ নয়; অবিচ্ছিন্ন কীগুলির জন্য অনুপদাসের উত্তর দেখুন।
অ্যারন ব্রাজার

9
আপনি @ "সিএফবান্ডেল ভার্সন" এর জন্য ঠিক বলেছেন - আমি আমার উত্তরটি সম্পাদনা করেছি। তবে @ "সিএফবান্ডলশার্টভিশন স্ট্রিং" এর জন্য কোনও ধ্রুবক এএফআইকে নেই।
e1985

সুইফ্টের জন্য, NSBundle.mainBundle()এখনBundle.main
টড

85

আপনি তথ্য অভিধানটি ব্যবহার করে দেখতে পারেন

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

NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]; 

13
কেসিএফবান্ডেল ভার্সনকি হ'ল 'বিল্ড' নন 'সংস্করণ'
পাওয়ারজ 1984

11

যখন ব্যবহার MFMailComposeViewControllerএকটি "আমাদের সঙ্গে যোগাযোগ করুন" বোতামে জন্য, আমি ব্যবহারকারীর কাছ থেকে ই-মেইলে পেতে, একটি ফরম্যাট HTML এ এই কোডটি ব্যবহার করুন। এটি আমাকে সমস্ত তথ্য দেয় যা আমার যে কোনও সমস্যা সমাধানে সহায়তা করা শুরু করতে হবে:

struct utsname systemInfo;
uname(&systemInfo);

NSDateFormatter *formatter = [[NSDateFormatter alloc]  init];
NSDate  *date = [NSDate date];
[formatter setDateFormat:@"MM/dd/yyyy 'at' hh:mm a"];
NSString *dateString = [formatter stringFromDate:date];

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width - 65.0;

NSString *comments = NSLocalizedString(@"Please write your comments below:", nil);
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
NSString *iOSVersion = [[UIDevice currentDevice] systemVersion];

NSString *emailBody = [NSString stringWithFormat:@"<!DOCTYPE html><html><style> .div {background-color: lightgrey; width: %fpx; padding: 10px; border: 5px solid navy; margin: 2px;}</style><body><div class='div'><p><b>App:</b> %@</p><b><p>Device:</b> %@</p><b><p>iOS Version:</b> %@</p><b><p><p>App Version and Build:</b> %@ (%@)</p><b><p>Date:</b> %@</p> </p></div><font color='red'><b>%@</b></font><br><br></body></html>",screenWidth,appName,deviceModel,iOSVersion,version,build,dateString,comments];

[self setMessageBody:emailBody isHTML:YES];

বার্তাটি পাওয়ার সময় এটি ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


3

উভয়ের জন্য আলাদাভাবে সুইফট সংস্করণ:

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

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

https://github.com/goktugyil/EZSwiftExtensions


আপনার স্পষ্ট করে দেওয়া উচিত যে সেই রেপোর মালিক আপনার। আপনি কোনও স্প্যামার হিসাবে আসতে চান না।
জাল

2

বিস্তারিত

  • এক্সকোড সংস্করণ 10.3 (10 জি 8), সুইফ্ট 5

সমাধান

class Info {
    static let dictionary = Bundle.main.infoDictionary ?? [:]
    enum Value {
        case build, version
    }
}

extension Info.Value {

    var key: String {
        switch self {
            case .build: return kCFBundleVersionKey as String
            case .version: return kCFBundleInfoDictionaryVersionKey as String
        }
    }

    var string: String? { return Info.dictionary[key] as? String }
}

ব্যবহার

if let value = Info.Value.version.string { print("Version: \(value)") }
if let value = Info.Value.build.string { print("Build: \(value)") }

ফলাফল

প্রকল্প সেটিংস

এখানে চিত্র বর্ণনা লিখুন


1

আমি এই ওপেন সোর্স প্রকল্পটি অবশ্যই এই উদ্দেশ্যে লিখেছি । আমার প্রকল্পটি উল্লেখযোগ্য ইভেন্টগুলি ঘটে যখন বিজ্ঞপ্তিগুলি পোস্ট করে, যেমন কোনও ব্যবহারকারী যখন প্রথমবারের জন্য অ্যাপটি খুলবে, বা আপগ্রেড করার পরে অ্যাপটি খুলবে (ব্যবহারকারী কোন সংস্করণ থেকে আপগ্রেড হয়েছিল সে সম্পর্কিত তথ্য সহ)। উত্সটি সোজা এবং এটি বুঝতে সহজ হওয়া উচিত। আপনার যদি কোন প্রশ্ন / অনুরোধ থাকে তবে আমাকে জানান।

আমি সম্প্রতি এটি সম্পর্কে একটি ব্লগ পোস্ট লিখেছি ।


1

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

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

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

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.