iOS: dostęp do informacji o aplikacji.zmienne plist w kodzie

Pracuję nad uniwersalną aplikacją i chciałbym uzyskać dostęp do wartości przechowywanych w App-info.plik plist w kodzie.

Powód: uruchamiam UIViewController dynamicznie ze storyboardu za pomocą:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];

Teraz, posiadanie nazwy storyboardu @"MainStoryboard_iPhone" powyżej jest brzydkie.

Chcę zrobić coś takiego:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:appInfo.mainStoryboardBaseNamePhone bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];

Gdzie appInfo może być NSDictionary wszystkich wartości w App-info.plist

Author: sherlock, 2012-03-02

5 answers

Atrybuty z info.plist dla Twojego projektu są bezpośrednio dostępne przez następujące...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

Na przykład, aby uzyskać numer wersji, możesz wykonać następujące czynności

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

Jest taka sytuacja, że Numer wersji ma teraz dwa atrybuty w info.plist - ale masz pomysł? Jeśli wyświetlasz swoje informacje.plist jako kod źródłowy (kliknij prawym przyciskiem myszy info.plist-wybierz Otwórz jako), a następnie zobaczysz wszystkie różne nazwy kluczy, których możesz użyć.

 234
Author: Damo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-02 08:24:43

Swift 4 + składnia dla Damo ' s solution

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

Przykład

let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
 12
Author: Maverick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 10:11:11

Możesz uzyskać dostęp do informacji.plist bardzo łatwo:

Uzyskanie nazwy storyboardu:

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

Nie wiem, czy wykryje, czy jest w iPadzie i powinien użyć zainstalowanego klucza UIMainStoryboardFile~ipad.

 11
Author: rckoenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-02 08:26:42
NSString *path = [[NSBundle mainBundle] pathForResource: @"YOURPLISTNAME" ofType: @"plist"]; 
NSMutableDictionary *dictplist =[[NSMutableDictionary alloc] initWithContentsOfFile:path];
 8
Author: James Lobo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-10 04:16:01

Możesz również użyć metody infoDictionary na NSBundle:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
 5
Author: svth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-23 16:03:25