Як отримати назву запущеної програми в iOS


78

Якщо ім'я програми під піктограмою на головному екрані "My Awesome App", як отримати цей рядок у програмі під час виконання?

Відповіді:


134

Я б спробував

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];

хоча, мабуть, ви знаєте назву власного додатка і можете просто використовувати його ...


5
Це працює, хоча константа не існує. Здогадуючись, це @ "CFBundleDisplayName". Я не хочу жорстко кодувати назву програми, оскільки код, який я пишу, може використовуватися в інших програмах.
— Джонатан,

Ах, ти маєш рацію, константи немає (я скопіював якийсь існуючий код, який схопив інший ключ). Хоча сира струнка повинна бути тонкою.
— Девід Данхем,

Це спрацювало для мене після того, як я додав Bundle display nameвластивість у свій Info.plistфайл.
— pasql

5
не CFBundleDisplayName, а CFBundleName. Не обманюйте
— LKM

1
Ну це залежить. Перевірте документацію щодо CFBundleDisplayName.
— Девід Данхем,

28

Свіфт 3 і 4

Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""
Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? ""


Свіфт 2.2

NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName")
NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleDisplayName")


Докладніше про "CFBundleName" та "CFBundleDisplayName"

Далі йдеться з документації Apple щодо Core Foundation Keys

CFBundleName , “Назва пакета”, Коротка назва пакета; не призначений для перегляду користувачем. Детальніше див. У розділі CFBundleName . (Рекомендовано, Локалізується)

CFBundleDisplayName , “Ім'я пакета , що відображається”, ім’я пакета, яке відображається користувачем; використовується Siri та відображається на головному екрані в iOS. Докладніше див. У розділі CFBundleDisplayName . (Обов’язково, Локалізується)


1
У документації сказано, що CFBundleDisplayName є обов’язковим ключем ... також, там сказано, що CFBundleName - це «коротка назва пакета; не призначений для перегляду користувачем ".
— Девід Данхем,

Дякую @DavidDunham! Я оновив текст у своїй відповіді в розділі "Докладніше про" CFBundleName "та" CFBundleDisplayName "", щоб відповідати поточній документації Apple.
— Mobile Dan

Цікавість: Який сенс використовувати цей код, якщо він може бути нульовим і слід вказати значення за замовчуванням? Чому б просто не використовувати це значення?
— Даніель Спрінгер,

19
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];

14

Просто тому, що я люблю Xcode 4.5 новий спосіб отримати елемент масиву. :)

- (NSString*)project_getAppName {
    return NSBundle.mainBundle.infoDictionary[@"CFBundleDisplayName"];
}

1
що це за чаклунство? Я не знав, що ти можеш зробити це так.
— Почі

Чи існує це в Swft?
— Деніел Спрінгер,


7
#include <stdlib.h>

// work for iOS and MacOSX and ~23 times faster than get name from bundle
NSString *app = [NSString stringWithUTF8String:getprogname()];

Також корисно, якщо ви пишете інструмент командного рядка, який не входить до структури набору або не має файлу Info.plist для заповнення infoDictionary.
— user2067021

5

Стрім 3/4

let appName =  Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as? String

4

Стрімкий 3, 4 і 5

let appName = Bundle.main.infoDictionary?["CFBundleName"] as? String

3
NSString* applicationName = [entry objectForKey:(id)kCGWindowOwnerName];

Ось хороший допис із прикладами того, що ви шукаєте. ОП нічого не прийняв, що шкода, але відповіді корисні.


Дякую, чудова інформація в цьому дописі. Віддайте перевагу одному лайнеру у відповіді Девідса;) +1
— Джонатан,

1

Увага :

Якщо ви робите це localizationsу своєму додатку, вам слід скористатись продутим кодом, щоб отримати справжнє локалізоване відображуване ім'я:

Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""
Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? ""

а не :

Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as? String
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.