iOS uygulaması, programlı olarak derleme sürümünü edinin


Yanıtlar:


283

Xcode hedef özetinin "Sürüm" alanında ayarladığınız değer buradadır:

Hızlı 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

ve "Yapı":

Hızlı 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

5
Sabit değil de dizge kullanmak geleceğe yönelik değildir; Anupdas'ın sabit anahtarlar için cevabına bakın.
Aaron Brager

9
@ "CFBundleVersion" için haklısınız - Cevabımı düzenledim. Ancak @ "CFBundleShortVersionString" için sabit AFAIK yoktur.
e1985

Swift NSBundle.mainBundle()için şimdiBundle.main
Todd

85

İnfoDictionary kullanmayı deneyebilirsiniz

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

NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]; 

13
kCFBundleVersionKey 'sürüm değil' sürümdür
powerj1984

11

Bir MFMailComposeViewController"Bize Ulaşın" düğmesini kullandığımda, kullanıcıdan e-postada biçimlendirilmiş bir HTML almak için bu kodu kullanıyorum. Herhangi bir sorunu çözmeye yardımcı olmaya başlamam için gereken tüm bilgileri bana veriyor:

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 below:", 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><style> .div {background-color: lightgrey; width: %fpx; padding: 10px; border: 5px solid navy; margin: 2px;}</style><body><div class='div'><p><b>App:</b> %@</p><b><p>Device:</b> %@</p><b><p>iOS Version:</b> %@</p><b><p><p>App Version and Build:</b> %@ (%@)</p><b><p>Date:</b> %@</p> </p></div><font color='red'><b>%@</b></font><br><br></body></html>",screenWidth,appName,deviceModel,iOSVersion,version,build,dateString,comments];

[self setMessageBody:emailBody isHTML:YES];

Bu mesajı alırken ortaya çıkan sonuç:

görüntü açıklamasını buraya girin


3

Her ikisi için ayrı ayrı Swift versiyonu:

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

Bu depoya dahildir, kontrol edin:

https://github.com/goktugyil/EZSwiftExtensions


Deponun sahibi olduğunuzu açıkça belirtmelisiniz. Bir spam gönderen olarak çıkmak istemezsiniz.
JAL

2

ayrıntılar

  • Xcode Sürüm 10.3 (10G8), Swift 5

Çözüm

class Info {
    static let dictionary = Bundle.main.infoDictionary ?? [:]
    enum Value {
        case build, version
    }
}

extension Info.Value {

    var key: String {
        switch self {
            case .build: return kCFBundleVersionKey as String
            case .version: return kCFBundleInfoDictionaryVersionKey as String
        }
    }

    var string: String? { return Info.dictionary[key] as? String }
}

kullanım

if let value = Info.Value.version.string { print("Version: \(value)") }
if let value = Info.Value.build.string { print("Build: \(value)") }

Sonuç

Proje ayarları

görüntü açıklamasını buraya girin


1

Bu açık kaynak projeyi yazdım tam da bu amaçla . Projem, bir kullanıcı uygulamayı ilk kez açtığında veya yükseltmeden sonra uygulamayı açtığında (kullanıcının hangi sürümden yükseltme yaptığına ilişkin bilgilerle birlikte eksiksiz) önemli olaylar meydana geldiğinde bildirim gönderir. Kaynak basittir ve anlaşılması kolay olmalıdır. Herhangi bir sorunuz / isteğiniz varsa bana bildirin.

Yakın zamanda bununla ilgili bir blog yazısı da yazdım .


1

1) Uygulama sürümünü almak için şunları kullanmanız gerekir:

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

2) Derleme sürümünü almak için bir kullanmalısınız:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.