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
이 저장소에 포함되어 있으므로 확인하십시오.