কীভাবে আমার আইফোন অ্যাপটি তার নিজস্ব সংস্করণ নম্বর সনাক্ত করতে পারে?


254

আমি একটি আইফোনের অ্যাপ লিখছি। এটি ইতিমধ্যে প্রকাশিত হয়েছে, তবে আমি একটি বৈশিষ্ট্য যুক্ত করতে চাই যেখানে এর সংস্করণ নম্বর প্রদর্শিত হবে।

আমি প্রকাশিত প্রতিটি সংস্করণ দিয়ে ম্যানুয়ালি এটি করার দরকার ছিল না ...

আমার অ্যাপ্লিকেশনটির সংস্করণটি কী তা জানার জন্য উদ্দেশ্য-সি-তে কোনও উপায় আছে?


1
এই প্রশ্নের ইতিমধ্যে এখানে stackoverflow.com/a/16888788/2890157 উত্তর দেওয়া হয়েছে ।
অক্ষত সিংহল

1
.. লিঙ্কযুক্ত প্রশ্নটি 4 বছর পরে, সুতরাং এখানে আসল সমস্যাটি হ'ল সেমিওরা কোনও উত্তর কখনই গ্রহণ করেনি । নির্বিশেষে, লিঙ্কযুক্ত প্রশ্নের উত্তরগুলি এখানে দরকারী উত্তর হিসাবে কার্যকর। উভয় থ্রেডে, প্রথম উত্তরের বাইরে তাকান - কখনও কখনও পরবর্তী উত্তরে আরও আধুনিক তথ্য থাকে।
টুলমেকারস্টেভ

উত্তর:


222

আমি এখানে বর্ণনা হিসাবে , আমি আমার বর্তমান সাবভার্সন রিভিশন নম্বর সহ একটি শিরোনাম ফাইল পুনরায় লেখার জন্য একটি স্ক্রিপ্ট ব্যবহার করি। এই পুনর্বিবেচনা নম্বরটি কে-রেভিশন নাম্বার ধ্রুব্যে সংরক্ষণ করা হয়। তারপরে আমি নীচের মতো কিছু ব্যবহার করে সংস্করণ এবং সংশোধন নম্বর অ্যাক্সেস করতে পারি:

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

যা "সংস্করণ 1.0 (51)" বিন্যাসের একটি স্ট্রিং তৈরি করবে।


152
এটি আমার বিল্ড সংস্করণটি ফিরিয়ে দিয়েছে তাই আমি এটি ব্যবহার করেছি। [[[এনএসবান্ডেল মেইনবান্ডেল] তথ্যসূত্র] অবজেক্টফোকে: @ "সিএফবান্ডেলশোর্ট ভার্সন স্ট্রিং"]
জাসপুনার

6
সিএফবান্ডেল ভার্সনটি ভুল, কারণ এক্সকোড ভুলভাবে বিল্ড নম্বরটি সহ ভার্সন নম্বরটি দিয়ে সেই প্লিস্ট এন্ট্রিটিকে জনপ্রিয় করে তোলে। jspooner সঠিক।
অস্কার

4
সংস্করণ বনাম বিল্ড সংখ্যার দুর্দান্ত ব্যাখ্যার জন্য stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4 দেখুন । নিশ্চিত করে CFBundleShortVersionStringযে আপনি সাধারণত 'সংস্করণ' এবং CFBundleVersionবিল্ড নম্বরের জন্য যা চাইবেন ।
ররি

3
kRevisionNumber আমার জন্য কাজ করে না বলে মনে হচ্ছে। আউটপুট নির্দিষ্ট করার জন্য আমি এটি করেছি (@ জাসপুনারের ফিক্স ব্যবহার করে):[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

আমি আমার আবেদনে এটি করেছি did

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

আশা করি এই সাধারণ উত্তরটি কারও পক্ষে সহায়তা করবে ...


1
আমার প্রয়োজনের জন্য, এটি দুর্দান্ত। ধন্যবাদ। +1
ডেভিড ডেলমন্টে 8'14


@ চ্যান্সইউইউ, সিএফবান্ডেলশোর্টটি ভার্সন স্ট্রিং সংস্করণটি দেবে বলে মনে হচ্ছে।
ব্রায়ান এফ শক্তিমান


30

দুটি জিনিস রয়েছে - বিল্ড সংস্করণ এবং অ্যাপ্লিকেশন সংস্করণ।

  1. অ্যাপ্লিকেশন সংস্করণ পেতে:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
  2. বিল্ড সংস্করণ পেতে:

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

এই দুজনের মধ্যে কি কোনও পার্থক্য আছে? তারা উভয়ই আমার জন্য একই ফিরিয়ে দেয়।
jjnevis

হ্যাঁ, আপনার বিল্ড নম্বর এবং অ্যাপ্লিকেশন সংস্করণ সেটিংসে একই হতে পারে।
শাইখ রিয়াজ

ঠিক আছে, আমার কেবলমাত্র আমার RAKEFILE - app.version এ আমি একটি সেটিংস রেখেছি (আমি রুবিমোশন ব্যবহার করছি)। আমার ধারণা হয় আমার প্রয়োজনের জন্যই তা করবে। ধন্যবাদ
jjnevis

ধন্যবাদ বন্ধু. সাবলীলভাবে কাজ করেছেন।
ফিলিপ

1
এফওয়াইআই এর objectForInfoDictionaryKey:পরিবর্তে ব্যবহার করা পছন্দনীয় infoDictionary] objectForKey:কারণ পূর্ববর্তী লোকালাইজড মান (যদি থাকে তবে) প্রদান করে। সম্ভবত এখানে কোনও পার্থক্য করা হবে না;)
ডিনবম্বর্ন


16

এক্সওয়াইজেড ফর্ম্যাটে একটি সংস্করণ স্ট্রিং প্রাপ্ত করার একটি সংক্ষিপ্ত উপায় :

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

অথবা, কেবল এক্সওয়াইয়ের জন্য:

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

এই উভয় স্নিপেটই স্ট্রিং প্রদান করে যা আপনি আপনার লেবেল অবজেক্টের পাঠ্য সম্পত্তিকে অর্পণ করবেন eg

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

7

আপনি অভিধানটি এইভাবে ব্যবহার করে দেখতে পারেন: -

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

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

4

আপনার অ্যাপ্লিকেশনটির তথ্য.পলিট ফাইলটি পড়ুন এবং কী সিএফবান্ডলশার্টভিশন স্ট্রিংয়ের মান পান। তথ্য.পল্লিস্ট পড়া আপনাকে একটি এনএসডিকোরিয়ানো অবজেক্ট দেবে


4

আপনি সেই অ্যাপ্লিকেশনটির তথ্য.পুলিস্টেশন থেকে সংস্করণ বিবরণ পায় এমন তথ্য অভিধান ব্যবহার করতে পারেন। এই কোডটি দ্রুত 3 এর জন্য কাজ করে Just কেবল এই পদ্ধতিটি কল করুন এবং পছন্দসই 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:

দুটি জিনিস রয়েছে - অ্যাপ সংস্করণ এবং বিল্ড সংস্করণ version

  • অ্যাপ্লিকেশন সংস্করণ পেতে:

     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

আপনি যদি একটি প্রয়োজন সমন্বয় উভয়ের সংস্করণ এবং বিল্ড NUM , এখানে ব্যবহার করে একটি সংক্ষিপ্ত উপায় সুইফট 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পারেন শেষে appVersionবা buildNumলাইন হিসেবে শুধু তাই অংশ পেতে Stringঅবজেক্ট। এর জন্য প্রয়োজন নেই যদিও আপনি পুরোটি সন্ধান করছেন versionInfo

আশা করি এটা কাজে লাগবে!


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

বাধ্য ঢালাই ছাড়া চৌহান উত্তর @rajat উপর ভিত্তি করে String


0

এটি একটি পুনর্বিবেচনা নিয়ন্ত্রণ সিস্টেমের সাহায্যে পরিচালনা করা ভাল। আপনি যখন কোনও ব্যবহারকারীর কাছ থেকে বাগ রিপোর্ট পান, আপনি কোডটি পুনর্বিবেচনাটি পরীক্ষা করে দেখতে পারেন এবং (আশা করি) ব্যবহারকারী হিসাবে ঠিক একই কোডটি চালিয়ে থাকা বাগটি পুনরুত্পাদন করতে পারেন।

ধারণাটি হ'ল প্রতিবার আপনি কোনও বিল্ড করবেন, আপনি এমন একটি স্ক্রিপ্ট চালাবেন যা আপনার কোডের বর্তমান সংশোধন নম্বর পেয়েছে এবং আপনার প্রকল্পের মধ্যে একটি ফাইল আপডেট করে (সাধারণত টোকেন প্রতিস্থাপনের কোনও ফর্ম সহ)। এরপরে আপনি একটি ত্রুটি পরিচালনার রুটিন লিখতে পারেন যা সর্বদা ত্রুটি আউটপুটে সংশোধন নম্বর অন্তর্ভুক্ত করে বা আপনি এটি "সম্পর্কে" পৃষ্ঠাতে প্রদর্শন করতে পারেন।


0

আপনি এই পদ্ধতিটি চেষ্টা করতে পারেন:

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