it-swarm.com.de

iOS: Greifen Sie auf app-info.plist-Variablen im Code zu

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

93
sherlock

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.

247
Damo

Swift 4 + Syntax für Damos Lösung

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

Beispiel

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

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.

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

Sie können die infoDictionary-Methode auch für NSBundle verwenden:

NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = infoPlistDict[@"CFBundleVersion"];
6
svth