Ich arbeite an einer Universal-App und möchte auf die in der Datei app-info.plist in meinem Code gespeicherten Werte zugreifen.
Grund: Ich instanziiere einen UIViewController dynamisch aus einem Storyboard mit:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];
Nun, den Storyboard-Namen @ "MainStoryboard_iPhone" oben zu haben, ist hässlich.
Ich möchte etwas machen wie:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:appInfo.mainStoryboardBaseNamePhone bundle:nil];
self = [storyboard instantiateViewControllerWithIdentifier:@"ExampleViewController"];
dabei kann appInfo möglicherweise ein NSDictionary aller Werte in app-info.plist sein
Attribute aus der info.plist für Ihr Projekt sind direkt über folgende ...
[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];
Um beispielsweise die Versionsnummer abzurufen, gehen Sie folgendermaßen vor
NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
Es gibt ein Manko, dass die Versionsnummer jetzt zwei Attribute in der info.plist hat - aber Sie haben die Idee? Wenn Sie Ihre info.plist als Quellcode anzeigen (klicken Sie mit der rechten Maustaste auf die info.plist - wählen Sie Öffnen als), werden alle verschiedenen Schlüsselnamen angezeigt, die Sie verwenden können.
Swift 4 + Syntax für Damos Lösung
Bundle.main.object(forInfoDictionaryKey: "KEY_NAME")
Beispiel
let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
Nun, Sie können ganz einfach auf die info.plist zugreifen:
Den Namen des Storyboards erhalten:
NSString *storyboard = [[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"];
Ich bin mir nicht sicher, ob es erkennt, ob es sich in einem iPad befindet und ob es das UIMainStoryboardFile~ipad
key instated.
NSString *path = [[NSBundle mainBundle] pathForResource: @"YOURPLISTNAME" ofType: @"plist"];
NSMutableDictionary *dictplist =[[NSMutableDictionary alloc] initWithContentsOfFile:path];
Sie können die infoDictionary-Methode auch für NSBundle verwenden:
NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];