web-dev-qa-db-fra.com

iOS: accès aux variables app-info.plist dans le code

Je travaille sur une application universelle et souhaite accéder aux valeurs stockées dans le fichier app-info.plist dans mon code.

Raison: j'instancie un UIViewController de manière dynamique à partir d'un storyboard en utilisant:

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

Maintenant, avoir le nom du storyboard @ "MainStoryboard_iPhone" ci-dessus est moche.

Je veux faire quelque chose comme:

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

où appInfo peut peut-être être un NSDictionary de toutes les valeurs dans app-info.plist

93
sherlock

Les attributs de info.plist pour votre projet sont directement accessibles par le biais des éléments suivants ...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

Par exemple, pour obtenir le numéro de version, procédez comme suit:

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

Il ya un truc dans le fait que le numéro de version a maintenant deux attributs dans info.plist - mais vous avez l’idée? Si vous affichez votre info.plist en tant que code source (cliquez avec le bouton droit de la souris sur info.plist - sélectionnez Ouvrir en tant que), vous aurez alors accès à tous les noms de clé que vous pouvez utiliser.

247
Damo

Swift 4 + syntaxe pour solution de Damo

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

Exemple

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

Eh bien, vous pouvez accéder très facilement au fichier info.plist:

Obtenir le nom du storyboard:

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

Je ne sais pas s'il détectera s'il se trouve dans un iPad et il devrait utiliser le UIMainStoryboardFile~ipad clé installée.

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

Vous pouvez également utiliser la méthode infoDictionary sur NSBundle:

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