[ios] 현재 iOS 프로젝트의 현재 버전을 코드로 가져 오려면 어떻게합니까?

NSString어딘가에 파일에 상수를 정의하지 않고도 iOS 프로젝트 / 앱의 현재 버전을 객체 로 얻을 수 있기를 원합니다 . 버전 값을 2 곳에서 변경하고 싶지 않습니다.

프로젝트 대상 요약에서 버전을 충돌 시키면 값을 업데이트해야합니다.



답변

다음과 같이 버전 및 빌드 번호를 얻을 수 있습니다.

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 {

    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))"
    }
}

요지 : 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)


답변

따라서 여기 둘 다에 대한 Swift 버전이 있습니다.

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

이 저장소에 포함되어 있으므로 확인하십시오.

https://github.com/goktugyil/EZSwiftExtensions