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"];