2012-03-02 12 views
79

Estoy trabajando en una aplicación universal & me gustaría acceder a los valores almacenados en el archivo app-info.plist en mi código.iOS: Acceso a las variables app-info.plist en el código

Motivo: Me instanciar un UIViewController dinámica de un guión usando:

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

Ahora, con el nombre del guión gráfico @ "MainStoryboard_iPhone" anterior es feo.

quiero hacer algo como:

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

donde AppInfo puede quizás ser un NSDictionary de todos los valores en APP-info.plist

Respuesta

224

Atributos del info.plist para su proyecto son directamente accesibles por el siguiente ...

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name]; 

por ejemplo, para obtener el número de versión que puede hacer lo siguiente

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

Hay un problema en cuanto a que el número de versión ahora tiene dos atributos en el info.plist, pero ¿entiendes? Si visualiza su info.plist como código fuente (haga clic con el botón secundario en info.plist - seleccione Abrir como), podrá ver todos los nombres de las teclas que puede usar.

+5

medida que los hombres por @Answerbot en esta publicación: http: //stackoverflow.com/a/4059118/1210822: "CFBundleVersion ha sido reutilizado para ser Build y la versión es CFBundleShortVersionString", así que ahora para recuperar el número de versión de plist, necesitamos usar : NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; – sonoshin

11

Bien puede acces la info.plist muy easly: ​​

Obtener el nombre del guión gráfico:

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

No está seguro de carnero se detectará si está en un iPad y se debe utilizar el UIMainStoryboardFile~ipad tecla instalada.

+6

XCode completa automáticamente la clave 'UIMainStoryboardFile' con los archivos Storyboard de iPhone/iPad, según el dispositivo :) – sherlock

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

También puede usar NSDictionary: 'NSDictionary * dict = [NSDictionary dictionaryWithContentsOfFile: ruta];' –

+0

no funciona para mí –

+0

funcionamiento buen amigo –

4

También puede utilizar el método infoDictionary en NSBundle:

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

Swift sintaxis 4+ para Damo's solution

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

Ejemplo

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