wake-up-neo.com

Wie bekomme ich die aktuelle Version meines iOS-Projekts im Code?

Ich möchte gerne die aktuelle Version meines iOS-Projekts/meiner App als NSString-Objekt erhalten, ohne irgendwo eine Konstante in einer Datei definieren zu müssen. Ich möchte meinen Versionswert nicht an zwei Stellen ändern.

Der Wert muss aktualisiert werden, wenn ich meine Version in der Projektzielzusammenfassung störe.

137
Jovan

Sie können die Versions- und Build-Nummern wie folgt erhalten:

let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String

oder in Objective-C

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];

Ich habe die folgenden Methoden in einer Kategorie zu UIApplication:

extension UIApplication {

    class func appVersion() -> String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    }

    class func appBuild() -> String {
        return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
    }

    class func versionBuild() -> String {
        let version = appVersion(), build = appBuild()

        return version == build ? "v\(version)" : "v\(version)(\(build))"
    }
}

Gist:https://Gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b


Hier ist das Äquivalent in Objective-C:

+ (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

357
Ashley Mills

Folgendes funktionierte auf Xcode 8, Swift 3:

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"

print("Version: \(gAppVersion)")
print("Build: \(gAppBuild)")
13
Crashalot

In Ziel C: 

1) Um eine App-Version zu erhalten, müssen Sie Folgendes verwenden:

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

2) Um eine Build-Version zu erhalten, müssen Sie Folgendes verwenden:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
2

In Swift können Sie die Bundle-Version erhalten, indem Sie Folgendes verwenden:

let info:NSDictionary = NSBundle.mainBundle().infoDictionary!

let version:String = info.objectForKey("CFBundleShortVersionString") as! String

versionLabel.text = "Version:" + version
1
Ravindra Kishan

Ein Open-Source-Projekt von mir, App Update Tracker , bietet diese Funktionalität (und mehr) in Form von Klassenmethoden:

  • + (NSString *)getShortVersionString
  • + (NSString *)getLongVersionString

Du würdest es so benutzen:

#import "AppUpdateTracker.h"

NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
0
Stunner

Nur zur Kenntnisnahme

Um einen lokalisierten Wert eines Schlüssels zu erhalten, sollten Sie CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString) verwenden.

0
akaDuality