iOS: Доступ до змінних app-info.plist у коді


103

Я працюю над програмою Universal і хотів би отримати доступ до значень, збережених у файлі 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 може бути NSD-словником усіх значень в app-info.plist

Відповіді:


253

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

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

Наприклад, щоб отримати номер версії, ви можете зробити наступне

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

Є проблема в тому, що номер версії тепер має два атрибути в info.plist - але ви розумієте? Якщо ви розглядаєте ваш info.plist як вихідний код (клацніть правою кнопкою миші info.plist - виберіть Відкрити як), ви побачите всі різні ключові імена, які ви можете використовувати.


5
Як зазначив @Answerbot в цьому пості: stackoverflow.com/a/4059118/1210822 : «CFBundleVersion було перепрофілювати бути Додавання і версія CFBundleShortVersionString», так що тепер для отримання номера версії зі списку властивостей, ми повинні використовувати: NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"];
соношин

для 11.3 він не працює, оскільки NSBundle був перейменований, а новий Bundle ще не включений. У вас є оновлення?
Івонна Маргграф

Якщо у мене є додаток Enterprise iOS, який поширюється через Інтернет, чи можу я додати пари ключів / значень у файл PLIST і згодом прочитати ці значення з програми під час завантаження?
Брант

як ми можемо оновити значення CFBundleVersion з AppDelegate.m?
прагнеш

26

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

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

Приклад

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

Для початківців, як я, Bundleвимагаєimport SystemConfiguration
GrafOrlov

12

Ви можете легко отримати доступ до info.plist:

Отримання назви раскадровки:

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

Не впевнений, чим він виявить, чи є він в iPad, і він повинен використовувати встановлений UIMainStoryboardFile~ipadключ.


6
XCode автоматично заповнює ключ "UIMainStoryboardFile" файлами розкадрування iPhone / iPad, залежно від пристрою :)
Шерлок

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

Ви також можете використовувати NSD Dictionary:NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
Дарій Міліаускас,

6

Ви також можете використовувати метод infoDictionary на NSBundle:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.