2009-08-07 11 views

Respuesta

134

probar este

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"]; 
+0

dulzura, gracias! –

+20

CFBundleDisplayName devuelve el nombre de visualización del paquete. OP pidió el nombre del producto. Para este uso, CFBundleName. En la mayoría de los casos, los dos serán iguales, pero pueden ser diferentes si configura un nuevo nombre para mostrar (para algo que se muestra debajo del icono que no es adecuado como nombre de archivo). –

+3

Apple analiza esto en un [artículo técnico.] (Http://developer.apple.com/library/mac/#qa/qa1544/_index.html). De particular interés es que no hay una constante para 'CFBundleDisplayName' - una cadena literal es lo correcto para usar. –

12

que tenía un problema cuando me localizo mi nombre de la aplicación mediante el uso de InfoPlist.strings, como

CFBundleDisplayName = "My Localized App Name"; 

no pude obtener el nombre aplicación localizada si uso infoDictionary.

En ese caso utilicé localizedInfoDirectory como a continuación.

NSDictionary *locinfo = [bundle localizedInfoDictionary]; 
7

Puede utilizar el enfoque directo,

NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]; 
51


buenas respuestas aquí.
Aunque agregaría una cosa.
En lugar de utilizar @ "CFBundleDisplayName", que tiene el potencial de cambiar en el futuro, lo mejor es echar la constante de cadena suministrada en CFBundle.h así:

[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; 


este modo a prueba de futuro de su código.

+6

Esta es una clave diferente y puede que no sea el nombre para mostrar en todos los casos. Sorprendentemente, una cadena literal es lo que [recomienda Apple] (http://developer.apple.com/library/mac/#qa/qa1544/_index.html) para este caso en particular. –

+0

respuesta increíble ... – svmrajesh

-2

Puede obtener todos los detalles de este diccionario "información". imprime este diccionario y obtén lo que quieras.

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
29

Según Apple, usando - objectForInfoDictionaryKey: directamente en el objeto NSBundle se prefiere:

El uso de este método es preferido sobre otros métodos de acceso, ya que devuelve el valor localizada de una tecla cuando uno está disponible .

He aquí un ejemplo en Swift:

let appName = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String 
// Or use key "CFBundleDisplayName" 

Actualización para Swift 3 - gracias Jef.

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String 
+0

Vamos personas ... esta es la respuesta de calidad. – Jonny

+0

ha cambiado significativamente para swift3 - let appName = Bundle.main.object (forInfoDictionaryKey: "CFBundleName") como! String – Jef

0

Esto es solo una actualización rápida para esta muy vieja pregunta. Yo estaba en la necesidad de respuesta rápida y era un poco complicado (Desenvolviendo opcionales) en la sintaxis rápida lo que podrá compartir aquí

let productName = NSBundle.mainBundle().infoDictionary!["CFBundleName"]! 
6

Para completar, Swift 3.0 sería;

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String 
+0

¿Por qué votar sin ningún comentario? El código funciona y la respuesta no es un duplicado:/ – Patrick

+1

Te daré un hombre de votos negativos - Te conseguí –

+1

Esto realmente no responde la pregunta que está pidiendo el nombre del producto que se puede configurar de forma diferente a la pantalla del paquete Nombre. – awolf

2

Aquí es el enfoque más limpio que podría subir con el uso de Swift 3:

let productName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String 
0

El siguiente código sería mejor.

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
self.appName = [info objectForKey:@"CFBundleExecutable"]; 
1

Aquí está el Xamarin.Versión de iOS de la respuesta de @epatel:

var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString; 
Cuestiones relacionadas