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")