Получить название продукта приложения iPhone во время выполнения? - PullRequest
68 голосов
/ 08 августа 2009

Как этого достичь? Я хотел бы получить имя, чтобы я мог отображать его в приложении без необходимости менять его в коде каждый раз, когда я меняю имя, конечно.

Ответы [ 12 ]

138 голосов
/ 08 августа 2009

Попробуйте это

NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"];
53 голосов
/ 13 сентября 2011

Хорошие ответы здесь. Хотя я бы добавил одну вещь.

Вместо использования @ "CFBundleDisplayName", которое может измениться в будущем, лучше привести строковую константу, указанную в CFBundle.h, примерно так:

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

Таким образом, ваш код на будущее.

37 голосов
/ 19 апреля 2015

Согласно Apple, использование - objectForInfoDictionaryKey: непосредственно на объекте NSBundle является предпочтительным:

Использование этого метода предпочтительнее, чем других методов доступа, поскольку он возвращает локализованное значение ключа, когда он доступен.

Вот пример в Swift:

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

Обновление для Swift 3 - спасибо, Джеф.

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String
13 голосов
/ 11 января 2010

У меня возникла проблема при локализации имени приложения с помощью InfoPlist.strings, например

CFBundleDisplayName = "My Localized App Name";

Мне не удалось получить локализованное имя приложения, если я использую infoDictionary.

В этом случае я использовал localizedInfoDirectory, как показано ниже.

NSDictionary *locinfo = [bundle localizedInfoDictionary];
8 голосов
/ 19 мая 2010

Вы можете использовать прямой подход,

NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
6 голосов
/ 05 сентября 2016

Для полноты, Swift 3.0 будет;

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
2 голосов
/ 09 февраля 2017

Вот самый чистый подход, который я мог придумать, используя Swift 3:

let productName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String
1 голос
/ 28 мая 2017

Вот версия Xamarin.iOS ответа @ epatel:

var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString;
0 голосов
/ 07 июня 2018
let productName =  Bundle.main.infoDictionary?["CFBundleName"] as? String

enter image description here

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

enter image description here

0 голосов
/ 06 мая 2017

Следующий код будет лучше.

NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
self.appName = [info objectForKey:@"CFBundleExecutable"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...