IOS прыкладанне, праграмна атрымаць білд

Ці ёсць спосаб праграмна атрымаць версію зборкі майго прыкладання? Мне трэба, каб быць у стане вызначыць, калі карыстальнік абнавіў прыкладанне праз AppStore, каб выканаць некаторы код для карэкціроўкі

110
Глядзіце таксама iOS праекта ў кодзе "> stackoverflow.com/questions/7608632/…
дададзена аўтар Alex Nolasco, крыніца
дададзена аўтар rodamn, крыніца

7 адказы

Зададзенае значэнне ў полі Xcode Кароткі прагноз аналітыкаў па «Version» знаходзіцца тут:

Swift 3

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

ObjC

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

Swift 2

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

і «Build»:

Swift 3

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

ObjC

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

Swift 2

let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String
257
дададзена
Выкарыстанне радковага литерала, а не канстанта ня будучыню доказ; см адказу Anupdas для пастаянных ключоў.
дададзена аўтар Aaron Brager, крыніца
Вы маеце рацыю на @ «CFBundleVersion» - Я адрэдагаваў мой адказ. Аднак для @ «CFBundleShortVersionString» няма пастаяннай AFAIK.
дададзена аўтар e1985, крыніца
Для Swift, NSBundle.mainBundle() цяпер Bundle.main
дададзена аўтар Todd, крыніца

Вы можаце паспрабаваць выкарыстоўваць infoDictionary

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

NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]; 
83
дададзена
kCFBundleVersionKey з'яўляецца «зборка» не «версія»
дададзена аўтар powerj1984, крыніца

Пры выкарыстанні 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 bellow:", 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>
<body><div class='div'>
App: %@
Device:
%@
iOS Version:
%@

App Version and Build:
%@ (%@)
Date:
%@ </div>%@

</body></html>",screenWidth,appName,deviceModel,iOSVersion,version,build,dateString,comments]; [self setMessageBody:emailBody isHTML:YES];

Гэта вынік пры атрыманні паведамлення:

enter image description here

10
дададзена

Swift версія як для асобна:

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

Яго уключаны ў гэтым рэпазітары, праверыць гэта:

https://github.com/goktugyil/EZSwiftExtensions

3
дададзена
Вы павінны зразумець, што ў вас ёсць, што РЭПО. Вы не хочаце, каб адарвацца, як спамер.
дададзена аўтар JAL, крыніца

<�Моцнага> Swift 3 прыбудзе версію расслаення і пабудаваць радкі

код

  extension UIApplication {
    class var Build: String? {
        get {
            return Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String
        }
    }

    class var Version: String? {
        get {
            return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
        }
    }
}

выкарыстанне

print("Version \(UIApplication.Version!)")
print("Build \(UIApplication.Build!)")

вынік

Параметры <�моцны> Праект

enter image description here

<�Моцны> Кансоль

enter image description here

2
дададзена

Я напісаў гэтую з адкрытым зыходным кодам праекта менавіта з гэтай мэтай. Маё паведамлення праекта апавяшчэнне, калі адбываюцца значныя падзеі, напрыклад, калі карыстальнік адкрывае прыкладанне ў першы раз, або адкрывае прыкладанне пасля абнаўлення (у камплекце з інфармацыяй аб версіі карыстальнік павышаны з). Крыніцай з'яўляецца простым і павінна быць лёгка зразумець. Дайце мне ведаць, калі ў вас ёсць якія-небудзь пытанні/запыты.

Акрамя таго, я нядаўна напісаў блог пра гэта.

1
дададзена

1) Для атрымання версіі прыкладання вы павінны выкарыстоўваць:

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

2) Для атрымання зборкі версіі вы павінны выкарыстоўваць:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
1
дададзена