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

86 голосов | спросил sherlock 2 MarpmFri, 02 Mar 2012 12:18:58 +04002012-03-02T12:18:58+04:0012 2012, 12:18:58

5 ответов


0

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

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

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

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

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

ответил Damo 2 MarpmFri, 02 Mar 2012 12:24:43 +04002012-03-02T12:24:43+04:0012 2012, 12:24:43
0

Swift 4 + синтаксис для решения Damo

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

Пример

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
ответил Maverick 1 32017vEurope/Moscow11bEurope/MoscowWed, 01 Nov 2017 11:03:38 +0300 2017, 11:03:38
0

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

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

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

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

ответил rckoenes 2 MarpmFri, 02 Mar 2012 12:26:42 +04002012-03-02T12:26:42+04:0012 2012, 12:26:42
0
NSString *path = [[NSBundle mainBundle] pathForResource: @"YOURPLISTNAME" ofType: @"plist"]; 
NSMutableDictionary *dictplist =[[NSMutableDictionary alloc] initWithContentsOfFile:path];
ответил James Lobo 7 FebruaryEurope/MoscowbThu, 07 Feb 2013 16:06:10 +0400000000pmThu, 07 Feb 2013 16:06:10 +040013 2013, 16:06:10
0

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

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
ответил svth 23 12015vEurope/Moscow11bEurope/MoscowMon, 23 Nov 2015 19:03:25 +0300 2015, 19:03:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132