আইওএস অ্যাপ্লিকেশনে কীভাবে প্রোগ্রামিয়ালি সংস্করণ / টার্গেটের সংখ্যা তৈরি করবেন?


135

target versionনীচের চিত্রের মতো আমি কীভাবে প্রোগ্রামাগুলিভাবে এর মান পেতে পারি ?

আমার এক্সকোড প্রকল্পের টার্গেটের প্রোপার্টি উইন্ডোতে যেমন দেখা যায়। আমি এটি আমার অ্যাপ্লিকেশনটির স্প্ল্যাশ স্ক্রিনে প্রদর্শন করতে চাই যাতে আমি জানতে পারি লোকেরা বর্তমানে কোন সংস্করণ ব্যবহার করছে?

উত্তর:


392

আছে 2 নাম্বার!

বিপণন প্রকাশের সংখ্যাটি গ্রাহকদের জন্য, সংস্করণ নম্বর বলে । এটি 1.0 দিয়ে শুরু হয় এবং 2.0 , 3.0 এ বড় আপডেটগুলির জন্য 1.1 , 1.2 এ ছোটখাট আপডেটের জন্য এবং বাগ ফিক্সের জন্য 1.0.1 , 1.0.2 এ যায় । এই সংখ্যাটি রিলিজ এবং নতুন বৈশিষ্ট্যগুলিকে কেন্দ্র করে। এটি 9, 1.11.23 এ থামতে হবে না একটি যুক্তিসঙ্গত সংস্করণ নম্বর।

বিল্ড সংখ্যা বেশিরভাগই হয় অভ্যন্তরীণ সংখ্যা তৈরী করে এর যে তখন পর্যন্ত করা হয়েছে। তবে কেউ কেউ অন্যান্য নম্বর ব্যবহার করে যেমন সংগ্রহস্থলের শাখা নম্বর বা এর কমিট নম্বর। এই সংখ্যাটি বিভিন্ন বিল্ডগুলির মধ্যে পার্থক্য করার জন্য অনন্য হওয়া উচিত , যার কেবলমাত্র সামান্য বৃদ্ধি বৃদ্ধি রয়েছে।


সংস্করণ নম্বর পেতে :

উদ্দেশ্য গ:

NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

সুইফ্ট <3.0

let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String

সুইফট ৩.০+ (৫.০ এর সাথে পরীক্ষিত):

let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String

বিল্ড নম্বর পেতে :

উদ্দেশ্য গ:

NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

সুইফ্ট <3.0

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

সুইফট ৩.০+ (৫.০ অবধি পরীক্ষিত):

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

যদি আপনি উভয় এক চান :

প্রথমে উপরের লাইনগুলি এবং তারপরে নিম্নলিখিতটি ব্যবহার করুন।

উদ্দেশ্য গ:

NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

সুইফ্ট (5.0 অবধি পরীক্ষিত):

let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"

মন্তব্য:

মূল বান্ডেলের মানগুলি সর্বদা উপস্থিত থাকে না, উদাহরণস্বরূপ একটি কমান্ড লাইন অ্যাপ্লিকেশনটিতে কোনও হয় না CFBundleShortVersionStringবা হয় CFBundleVersion, সুতরাং পদ্ধতিগুলি ফিরে আসবে nilএবং এটি ক্র্যাশ হবে কারণ কোডটিতে এটি একটি ভুল ডাউনকাস্ট করে। তবে সাধারণ কোকো আইওএস এবং ম্যাক অ্যাপ্লিকেশনগুলিতে এই মানগুলি সংজ্ঞায়িত করা হয় এবং মোছা হবে না।

এটি এক্সকোড সংস্করণ 7.3 (7D175) দিয়ে পরীক্ষা করা হয় । বিল্ড নম্বর প্রায়শই প্রথম বন্ধনী / বন্ধনীতে লেখা হয়। বিল্ড নম্বর হেক্সাডেসিমাল বা দশমিক in

buildandversion


ইন Xcode আপনি স্বতঃ-বাড়ায় পারেন বিল্ড সংখ্যা হিসেবে দশমিক সংখ্যা নিম্নোক্ত স্থাপন দ্বারা Run scriptপ্রকল্প সেটিংসে বিল্ড ফেজ

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

জন্য হেক্সাডেসিমেল বিল্ড সংখ্যা এই স্ক্রিপ্ট ব্যবহার

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber)) 
buildNumber=$(($buildNumber + 1)) 
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

জন্য Xcodeনিচের কাজগুলো করুন:

ধাপ 1

ধাপ 1

ধাপ ২

ধাপ ২

ধাপ 3

ধাপ 3


4
উপরের উদাহরণের জন্য কেবল যুক্ত করতে, "সিএফবান্ডেল ভার্সন" বিল্ড = 300, "সিএফবান্ডেলশার্টভিশন স্ট্রিং" হল সংস্করণ = 0.41। ভিক্টরের উত্তরটি সঠিক উত্তর হওয়া উচিত।
justinkoh

1
হেক্স নম্বর নিয়ে আমার একবার সমস্যা হয়েছিল। অ্যাপল পূর্ণসংখ্যা ব্যবহার করতে বলেছে: বিকাশকারী
অ্যাপ্লিকেশন

আপনি কি জানেন যে @ "সিএফবান্ডেলশার্টভিশন স্ট্রিং" এবং @ "সিএফবান্ডেল ভার্সন" এর জন্য কোনও স্ট্রিং ধ্রুবক রয়েছে কিনা?
igrek

এখন যেহেতু সিআই / সিডি সিস্টেমগুলি বেশ সাধারণ, আপনি সেগুলির সাথে সংস্করণ # এর সেট করতে বিল্ড স্ক্রিপ্টগুলি ব্যবহারের অসুবিধাগুলি নির্দেশ করতে চাইতে পারেন।
স্যাম বালান্টিনে

1
জিনিসের নাম পরিবর্তন করা হয়েছে সুইফট ৩.০: এটি Bundle.main.object(forInfoDictionaryKey: "...")এখন।
রাফেল

13

আপনার প্রকল্প বা এক্সকোডে আপনাকে কোনও পরিবর্তন করার দরকার নেই। উভয়ের জন্য আলাদাভাবে সুইফট সংস্করণটি এখানে:

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

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

https://github.com/goktugyil/EZSwiftExtensions


কোন উত্তর? আমি এটি দেখতে পাচ্ছি না
Esqarrouth

একটি মাত্র উত্তর আছে, এটি তার দ্বিতীয় অনুচ্ছেদে রয়েছে
ড্যানিয়েল গালাসকো

3
হ্যাঁ, 1. তার উত্তরে খুব বেশি শব্দ এবং খুব বেশি সংকেত নেই। ২. এটি দ্রুত, এটি অবজেক্টিভ সি। 3. আইওএস 5 যুগের থ্যাটস
এসকরারথ

জিনিসের নাম পরিবর্তন করা হয়েছে সুইফট ৩.০: এটি Bundle.main.object(forInfoDictionaryKey: "...")এখন।
রাফেল

5

সুইফট 3 এর জন্য এখানে একই কোড :

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

Bundle.maininfoDictionaryআমার জন্য একটি খালি ছিল ; সম্ভবত কারণ আমি এটি একটি কাঠামোর মধ্যে থেকে করছি, একটি এক্সিকিউটেবল বা অ্যাপ্লিকেশন নয়? Bundle(for: MyClass.self)প্রত্যাশিত মান রয়েছে।
রাফেল

4

প্রোগ্রামগতভাবে সংস্করণ এবং বিল্ড নম্বর প্রদর্শন করুন - সুইফট ৪.০

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"

let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"            

let versionAndBuildNumber = "Ver #\(versionNumber) ( Build #\(buildNumber) )"

1

আপনি যেমন ব্যবহার করতে পারেন

var appVersion: String {
  //versionNumber
  let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"

  //buildNumber
  let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"

  return "Version: #\(versionNumber) (#\(buildNumber))"
}

তারপরে আপনি বিশ্বব্যাপী ঘোষণা করার সময় আপনি যে কোনও জায়গা ব্যবহার করতে পারেন।

print(appVersion)

আউটপুট:

Version: #1.0 (#1.0.3)

1

আমি বান্ডিলের জন্য একটি এক্সটেনশন করেছি যাতে এটি ব্যবহার করা সহজ হবে

extension Bundle {
    var releaseVersionNumber: String? {
        return infoDictionary?["CFBundleShortVersionString"] as? String
    }

    var buildVersionNumber: String? {
        return infoDictionary?["CFBundleVersion"] as? String
    }

    var applicationName: String {
        return infoDictionary?["CFBundleDisplayName"] as? String ?? "ADKATech"
    }

    var applicationReleaseDate: String {
        return infoDictionary?["ApplicationReleaseDate"] as? String ?? Date().description
    }

    var applicationReleaseNumber: Int {
        return infoDictionary?["ApplicationReleaseNumber"] as? Int ?? 0
    }

    var releaseVersionNumberPretty: String {
        return "\(releaseVersionNumber ?? "1.0.0")"
    }

    var buildVersionNumberPretty: String {
        return "\(buildVersionNumber ?? "1")"
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.