Как это можно достичь? Я хотел бы получить имя, чтобы я мог отображать его в приложении, не меняя его в коде каждый раз, когда я меняю имя, конечно.
Получение названия продукта приложения 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];