Получение названия продукта приложения iPhone во время выполнения?

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

Ответ 1

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

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

Ответ 2


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

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


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

Ответ 3

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

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

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

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

Обновление для Swift 3 - спасибо Jef.

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

Ответ 4

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

CFBundleDisplayName = "My Localized App Name";

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

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

NSDictionary *locinfo = [bundle localizedInfoDictionary];

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Здесь самый чистый подход, который я мог бы использовать с помощью Swift 3:

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

Ответ 8

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

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

Ответ 9

Это просто быстрое обновление для этого очень старого вопроса. Мне нужен был быстрый ответ, и это было довольно сложно (Unwrapping optionsals) в быстром синтаксисе, так что обмен его здесь

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

Ответ 10

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

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

Ответ 11

Вы можете получить всю информацию о пакете из этого словаря "информация". напечатайте этот словарь и получите то, что хотите.

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