iOS:在代码中访问app-info.plist变量

she*_*ock 97 iphone objective-c info.plist ipad ios

我正在开发一个通用应用程序,并希望在我的代码中访问存储在app-info.plist文件中的值.

原因:我使用以下命令从故事板动态实例化UIViewController:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];
Run Code Online (Sandbox Code Playgroud)

现在,上面的故事板名称@"MainStoryboard_iPhone"是丑陋的.

我想做的事情如下:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:appInfo.mainStoryboardBaseNamePhone bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];
Run Code Online (Sandbox Code Playgroud)

其中appInfo可能是app-info.plist中所有值的NSDictionary

Dam*_*amo 250

您的项目的info.plist中的属性可通过以下方式直接访问...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];
Run Code Online (Sandbox Code Playgroud)

例如,要获取版本号,您可以执行以下操作

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
Run Code Online (Sandbox Code Playgroud)

有一个问题,版本号现在在info.plist中有两个属性 - 但你明白了吗?如果您将info.plist视为源代码(右键单击info.plist - 选择Open As),您将看到可以使用的所有各种键名.

  • 正如@Answerbot在这篇文章中所提到的:http://stackoverflow.com/a/4059118/1210822:"CFBundleVersion已被重新用作Build并且Version是CFBundleShortVersionString",所以现在要从plist中检索版本号,我们需要use:NSString*version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; (5认同)

Mav*_*ick 20

适用于Damo解决方案的Swift 4+语法

Bundle.main.object(forInfoDictionaryKey: "KEY_NAME")
Run Code Online (Sandbox Code Playgroud)

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
Run Code Online (Sandbox Code Playgroud)


rck*_*nes 12

那么你可以很容易地访问info.plist:

获取故事板的名称:

NSString *storyboard  = [[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"];
Run Code Online (Sandbox Code Playgroud)

不确定它是否会检测到它是否在iPad中,它应该使用UIMainStoryboardFile~ipad密钥设置.

  • XCode自动使用iPhone/iPad Storyboard文件填充关键字"UIMainStoryboardFile",具体取决于设备:) (6认同)

Jam*_*obo 8

NSString *path = [[NSBundle mainBundle] pathForResource: @"YOURPLISTNAME" ofType: @"plist"]; 
NSMutableDictionary *dictplist =[[NSMutableDictionary alloc] initWithContentsOfFile:path];
Run Code Online (Sandbox Code Playgroud)


svt*_*vth 6

您还可以在NSBundle上使用infoDictionary方法:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
Run Code Online (Sandbox Code Playgroud)