Info.plist의 번들 버전 정보를 내 코드 (가급적이면 문자열)로 읽고 싶습니다. 어떻게 할 수 있습니까?
답변:
Info.plist를 사전으로 읽을 수 있습니다.
[[NSBundle mainBundle] infoDictionary]
그런 CFBundleVersion
식으로 키 에서 버전을 쉽게 얻을 수 있습니다 .
마지막으로 다음을 사용하여 버전을 얻을 수 있습니다.
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
경우 사용 가능한 경우 현지화 된 값을 반환하므로 대신 사용할 수 있습니다.[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
은 빌드로 용도가 변경되었으며 버전은 CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
의뢰와 답이 어느 정도 흘렀다는 것을 알고 있습니다.
iOS8부터 허용되는 답변이 작동하지 않을 수 있습니다.
이것은 이제 새로운 방법입니다.
NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);
이제 iOS 8에서는 두 필드가 모두 필요합니다. 이전에는 CFBundleShortVersionString
. 하지만 이제는 앱 스토어에서 앱을 제출하는 데 필요한 plist 필드입니다. 그리고 kCFBundleVersionKey
모든 새 빌드를 업로드하기 위해 비교되며, 이는 증분 순서 여야합니다. 특히 TestFlight 빌드 용입니다. 나는 이렇게한다.
NSString * version = nil;
version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
if (!version) {
version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
}