Yanıtlar:
Sürümü ve derleme sayılarını aşağıdaki gibi alabilirsiniz:
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
veya Objective-C'de
NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
Bir kategoride aşağıdaki yöntemleri var 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))"
}
}
Gist: https://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b
Objective-C'deki karşılığı:
+ (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;
}
Gist: https://gist.github.com/ashleymills/c37efb46c9dbef73d5dd
(NSString *)kCFBundleVersionKeyyerine tavsiye ederim @"CFBundleVersion". Yazmak daha uzun olsa da (otomatik tamamlama burada yardımcı olacaktır), çünkü derleme zamanında kontrol edilen bir sabittir.
NSBundlebunun yerine yapmak daha doğru olur, bunun UIApplicationyerine statik çağrıların örnek olanlarla değiştirilmesine de izin verir.
UIApplication, geri dönen bilgiler uygulama hakkında olduğu için uygundur. Ayrıca, bu sadece mainpaket için geçerlidir - bunu herhangi bir paket üzerinde bir örnek yöntemi yapmak mantıklı olmaz.
builddediğin zaman appBundle(kodunuzun 2.satır)?
Hedef C:
1) Uygulama sürümünü almak için aşağıdakileri kullanmanız gerekir:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Derleme sürümünü almak için aşağıdakileri kullanmanız gerekir:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Swift'te paket sürümünü aşağıdakileri kullanarak alabilirsiniz:
let info:NSDictionary = NSBundle.mainBundle().infoDictionary!
let version:String = info.objectForKey("CFBundleShortVersionString") as! String
versionLabel.text = "Version:" + version
Açık kaynaklı bir projem olan App Update Tracker , bu işlevselliği (ve daha fazlasını) sınıf yöntemleri şeklinde sunuyor:
+ (NSString *)getShortVersionString+ (NSString *)getLongVersionStringBunu şöyle kullanırsınız:
#import "AppUpdateTracker.h"
NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
Sadece not için
Herhangi bir anahtarın yerelleştirilmiş değerini elde etmek için CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
Bu nedenle, her ikisi için ayrı ayrı bir Swift sürümü vardır:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Bu repoya dahil, bir göz atın: