[ios] 프로그래밍 방식으로 빌드 버전을 얻는 iOS 앱

프로그래밍 방식으로 내 앱의 빌드 버전을 얻는 방법이 있습니까? 조정을위한 일부 코드를 실행하려면 사용자가 AppStore를 통해 앱을 업데이트 한시기를 감지 할 수 있어야합니다.



답변

Xcode 대상 요약의 “버전”필드에 설정 한 값은 다음과 같습니다.

스위프트 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];

메시지를받을 때의 결과입니다.

여기에 이미지 설명을 입력하십시오


답변

둘 다 별도로 스위프트 버전 :

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

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

https://github.com/goktugyil/EZSwiftExtensions


답변

세부

  • Xcode 버전 10.3 (10G8), 스위프트 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)") }

결과

프로젝트 설정

여기에 이미지 설명을 입력하십시오


답변

오픈 소스 프로젝트를 작성했습니다이 목적을 를 . 내 프로젝트는 사용자가 앱을 처음으로 열거 나 업그레이드 후 앱을 열 때와 같이 중요한 이벤트가 발생하면 알림을 게시합니다 (사용자가 업그레이드 한 버전에 대한 정보로 완료). 출처는 간단하며 이해하기 쉬워야합니다. 질문이나 요청이 있으면 알려주십시오.

또한 최근에 블로그 게시물을 작성 했습니다.


답변

1) 앱 버전을 얻으려면 다음을 사용해야합니다.

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

2) 빌드 버전을 얻으려면 다음을 사용해야합니다.

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