74 votes

Obtenir le nom du produit d'une application iPhone au moment de l'exécution ?

Comment y parvenir ? J'aimerais obtenir le nom pour pouvoir l'afficher dans une application, sans avoir à le modifier dans le code à chaque fois que je change de nom, bien sûr.

143voto

epatel Points 32451

Essayez ceci

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

24 votes

CFBundleDisplayName renvoie le nom d'affichage de l'offre groupée. OP a demandé le nom du produit. Pour cela, utilisez CFBundleName. Dans la plupart des cas, les deux seront identiques, mais ils peuvent être différents si vous définissez un nouveau nom d'affichage (pour un élément affiché sous l'icône qui ne convient pas comme nom de fichier).

4 votes

Apple aborde ce sujet dans un article technique. . Il est particulièrement intéressant de noter qu'il n'y a pas de constante pour CFBundleDisplayName -- une chaîne littérale est la bonne chose à faire.

2 votes

@ChrisNewman est incorrect : CFBundleName n'est absolument PAS le Product Name (vous pouvez le vérifier en changeant l'un mais pas l'autre dans vos paramètres xcode). Ils sont identiques par défaut. (J'ai découvert cela à la dure).

57voto

imnk Points 2576

De bonnes réponses ici. J'ajouterais cependant une chose.

Plutôt que d'utiliser @"CFBundleDisplayName", qui est susceptible de changer à l'avenir, il est préférable de convertir la constante de type chaîne de caractères fournie dans CFBundle.h de la manière suivante :

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

Ainsi, votre code est à l'épreuve du temps.

8 votes

Il s'agit d'une clé différente qui peut ne pas correspondre au nom affiché dans tous les cas. Il est surprenant de constater qu'une chaîne littérale est ce que Apple recommande pour ce cas particulier.

14voto

tokentoken Points 344

J'ai rencontré un problème lorsque j'ai localisé le nom de mon application en utilisant InfoPlist.strings, comme par exemple

CFBundleDisplayName = "My Localized App Name";

Je n'ai pas pu obtenir le nom de l'application localisée en utilisant l'infoDictionnaire.

Dans ce cas, j'ai utilisé localizedInfoDirectory comme ci-dessous.

NSDictionary *locinfo = [bundle localizedInfoDictionary];

9voto

karim Points 4704

Vous pouvez utiliser l'approche directe,

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

-2voto

aaban tariq Points 4

Vous pouvez obtenir tous les détails de la liasse à partir de ce dictionnaire "info". Imprimez ce dictionnaire et obtenez ce que vous voulez.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X