iOS: доступ к переменным app-info.plist в коде - PullRequest
93 голосов
/ 02 марта 2012

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

247 голосов
/ 02 марта 2012

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

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

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

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

Есть ошибка в том, что номер версии теперь имеет два атрибута в info.plist - но вы поняли?Если вы просматриваете ваш info.plist в качестве исходного кода (щелкните правой кнопкой мыши info.plist - выберите Open As), вы увидите все названия различных ключей, которые вы можете использовать.

18 голосов
/ 01 ноября 2017

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

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

Пример

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
12 голосов
/ 02 марта 2012

Ну, вы можете очень легко получить доступ к info.plist:

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

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

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

8 голосов
/ 07 февраля 2013
NSString *path = [[NSBundle mainBundle] pathForResource: @"YOURPLISTNAME" ofType: @"plist"]; 
NSMutableDictionary *dictplist =[[NSMutableDictionary alloc] initWithContentsOfFile:path];
5 голосов
/ 23 ноября 2015

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

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