iOS: доступ к app-info.plist в переменные в коде

Я работаю над универсальным приложением и хотел бы получить доступ к значениям, хранящимся в 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 может быть NSDictionary всех значений в app-info.файл plist

5 ответов


атрибуты инфо.plist для вашего проекта непосредственно доступны следующие...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

например, чтобы получить номер версии, вы можете сделать следующее

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

есть gotcha в том, что номер версии теперь имеет два атрибута в информации.plist-но вы поняли идею? Если вы просматриваете свою информацию.plist как исходный код (правой кнопкой мыши На "информация".plist-выберите Открыть как), то вы получите, чтобы увидеть все различные имена ключей, которые вы можете использовать.


Swift 4+ синтаксис решение Дамо

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

пример

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

Ну, вы можете получить информацию.плист очень спокойно:

получение названия раскадровки:

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

не уверен, что он обнаружит, если он находится в iPad, и он должен использовать UIMainStoryboardFile~ipad ключ вводили.


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

вы также можете использовать метод infoDictionary в NSBundle:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];