Как получить текущую версию моего проекта iOS в коде?



Я хотел бы иметь возможность получить текущую версию моего проекта/приложения iOS как NSString объект без необходимости определять константу в файле где-то. Я не хочу менять значение моей версии в 2 местах.



значение должно быть обновлено, когда я поднимаю свою версию в сводке целевого объекта проекта.

512   7  

7 ответов:

вы можете получить версию и номер сборки выглядит следующим образом:

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

или в Objective-C

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

у меня есть следующие методы, в категории 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))"
    }
}

суть:https://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b


вот эквивалент в 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;
}

суть: https://gist.github.com/ashleymills/c37efb46c9dbef73d5dd

вот что сработало на 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)")

В Объективе C:

1)Для получения версии приложения вы должны использовать:

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

2)для получения версии сборки нужно использовать:

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

в Swift, вы можете получить версию пакета с помощью:

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

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

versionLabel.text = "Version:" + version

мой проект с открытым исходным кодом, App Update Tracker, предлагает эту функциональность (и многое другое) в виде методов класса:

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

вы бы использовали его так:

#import "AppUpdateTracker.h"

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

просто для Примечание

для получения локализованного значения любого ключа необходимо использовать CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)

Итак, вот быстрая версия для обоих из них отдельно:

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

Он включен в это РЕПО, проверьте его:

https://github.com/goktugyil/EZSwiftExtensions

Comments

    Ничего не найдено.