iOS 앱, 프로그래밍 방식으로 빌드 버전 가져오기
내 앱의 빌드 버전을 프로그래밍 방식으로 가져올 수 있는 방법이 있나요?사용자가 AppStore를 통해 앱을 업데이트한 것을 감지하여 조정을 위한 코드를 실행할 수 있어야 합니다.
Xcode target summary의 "Version" 필드에서 설정한 값은 다음과 같습니다.
스위프트 3
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
ObjC
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
스위프트 2
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String
및 "구축":
스위프트 3
let build = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String
ObjC
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
스위프트 2
let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String
infoDictionary를 사용해 볼 수 있습니다.
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
사용시MFMailComposeViewController
"연락처" 버튼의 경우 이 코드를 사용하여 사용자로부터 이메일의 형식화된HTML을 가져옵니다.문제 해결에 필요한 모든 정보를 얻을 수 있습니다.
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];
메시지를 받았을 때의 결과는 다음과 같습니다.
둘 다 개별적으로 Swift 버전:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
이 레포에 포함되어 있습니다.확인해 주세요.
https://github.com/goktugyil/EZSwiftExtensions
1) 앱 버전을 얻으려면 다음을 사용해야 합니다.
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) 빌드 버전을 얻으려면 다음을 사용해야 합니다.
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
세부 사항
- Xcode 버전 10.3 (10G8) Swift 5
솔루션
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 }
}
사용.
if let value = Info.Value.version.string { print("Version: \(value)") }
if let value = Info.Value.build.string { print("Build: \(value)") }
결과
프로젝트 설정
저는 이 오픈 소스 프로젝트를 바로 이 목적으로 작성했습니다.내 프로젝트는 사용자가 처음 앱을 열었을 때, 업그레이드 후 앱을 열었을 때 등 중요한 이벤트가 발생했을 때 알림을 게시합니다(사용자가 업그레이드한 버전에 대한 정보 포함).출처는 간단하고 이해하기 쉬울 것입니다.질문/요청사항이 있으시면 연락주세요.
나도 최근에 그것에 대해 블로그에 글을 쓴 적이 있다.
언급URL : https://stackoverflow.com/questions/16888780/ios-app-programmatically-get-build-version
'programing' 카테고리의 다른 글
Gem 설치 오류:먼저 개발 도구를 설치해야 합니다(Windows). (0) | 2023.04.10 |
---|---|
IList 또는 IENumerable에서 쉼표로 구분된 목록 생성 (0) | 2023.04.10 |
새로운 기준 자동 계수 메커니즘은 어떻게 작동합니까? (0) | 2023.04.10 |
실행 시 값으로 strings.xml에 플레이스 홀더를 지정할 수 있습니까? (0) | 2023.04.10 |
하위 디렉토리를 별도의 Git 저장소로 분리(이동) (0) | 2023.04.10 |