iOS: accede a las variables app-info.plist en el código

Estoy trabajando en una aplicación universal y me gustaría acceder a los valores almacenados en el archivo app-info.plist en mi código.

Motivo: instanciar un UIViewController dinámicamente desde un guión gráfico usando:

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

Ahora, tener el nombre del guión gráfico @ “MainStoryboard_iPhone” de arriba es feo.

Quiero hacer algo como:

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

donde appInfo puede ser un NSDictionary de todos los valores en app-info.plist

Los atributos de 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, puede hacer lo siguiente

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

Hay un problema con el número de versión que ahora tiene dos atributos en el info.plist, pero ¿entiendes la idea? 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.

Sintaxis de Swift 4+ para la solución de Damo

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

Ejemplo

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

Bueno, puedes acceder al info.plist muy fácilmente:

Obtener el nombre del guión gráfico:

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

No estoy seguro si detectará si está en un iPad y debería usar la clave UIMainStoryboardFile~ipad instalada.

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

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

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