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

Ответ 1

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

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

Синтаксис Swift 4 и выше для Damo solution

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

Пример

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