iOS : 코드에서 app-info.plist 변수에 액세스


103

Universal 앱에서 작업 중이며 내 코드의 app-info.plist 파일에 저장된 값에 액세스하고 싶습니다.

이유 : 다음을 사용하여 스토리 보드에서 UIViewController를 동적으로 인스턴스화합니다.

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];

이제 위의 스토리 보드 이름이 @ "MainStoryboard_iPhone"인 것은 추악합니다.

다음과 같이하고 싶습니다.

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:appInfo.mainStoryboardBaseNamePhone bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];

여기서 appInfo는 아마도 app-info.plist에있는 모든 값의 NSDictionary 일 수 있습니다.

답변:


253

프로젝트에 대한 info.plist의 속성은 다음을 통해 직접 액세스 할 수 있습니다.

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

예를 들어 버전 번호를 얻으려면 다음을 수행하십시오.

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

버전 번호가 이제 info.plist에 두 가지 속성을 가지고 있다는 점에 문제가 있습니다.하지만 아이디어를 얻었습니까? info.plist를 소스 코드로 보는 경우 (info.plist를 마우스 오른쪽 버튼으로 클릭-다른 이름으로 열기 선택) 사용할 수있는 모든 다양한 키 이름을 볼 수 있습니다.


5
@Answerbot이이 게시물에서 언급했듯이 : stackoverflow.com/a/4059118/1210822 : "CFBundleVersion은 빌드로 용도가 변경되었으며 버전은 CFBundleShortVersionString입니다", 이제 plist에서 버전 번호를 검색하려면 다음을 사용해야합니다. NSString * 버전 = [[NSBundle mainBundle] objectForInfoDictionaryKey : @ "CFBundleShortVersionString"];
sonoshin

11.3의 경우 NSBundle의 이름이 바뀌었고 새 번들에 아직 포함되지 않았기 때문에 작동하지 않습니다. xou에 업데이트가 있습니까?
Yvonne Marggraf

웹을 통해 배포되는 엔터프라이즈 iOS 앱이있는 경우 PLIST 파일에 키 / 값 쌍을 추가 한 다음 다운로드 할 때 앱에서 해당 값을 읽을 수 있습니까?
Brant

AppDelegate.m에서 CFBundleVersion 값을 어떻게 업데이트 할 수 있습니까?
pragnesh

26

Damo 솔루션을 위한 Swift 4+ 구문

Bundle.main.object(forInfoDictionaryKey: "KEY_NAME")

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")

나 같은 초보자를위한, Bundle필요import SystemConfiguration
GrafOrlov

12

info.plist에 매우 쉽게 액세스 할 수 있습니다.

스토리 보드의 이름 얻기 :

NSString *storyboard  = [[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"];

iPad에 있는지 감지 할 것인지 확실하지 않으며 UIMainStoryboardFile~ipadinstated 키를 사용해야합니다 .


6
XCode는 장치에 따라 'UIMainStoryboardFile'키를 iPhone / iPad Storyboard 파일로 자동으로 채 웁니다. :)
sherlock

8
NSString *path = [[NSBundle mainBundle] pathForResource: @"YOURPLISTNAME" ofType: @"plist"]; 
NSMutableDictionary *dictplist =[[NSMutableDictionary alloc] initWithContentsOfFile:path];

NSDictionary를 사용할 수도 있습니다.NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
Darius Miliauskas 2015 년

6

NSBundle에서 infoDictionary 메서드를 사용할 수도 있습니다.

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.