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 *)kCFBundleVersionKey
yerine tavsiye ederim @"CFBundleVersion"
. Yazmak daha uzun olsa da (otomatik tamamlama burada yardımcı olacaktır), çünkü derleme zamanında kontrol edilen bir sabittir.
NSBundle
bunun yerine yapmak daha doğru olur, bunun UIApplication
yerine 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 main
paket için geçerlidir - bunu herhangi bir paket üzerinde bir örnek yöntemi yapmak mantıklı olmaz.
build
dediğ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 *)getLongVersionString
Bunu şö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: