iOS에서 실행중인 애플리케이션의 이름을 얻는 방법


78

홈 화면의 아이콘 아래에있는 응용 프로그램 이름이 "My Awesome App"인 경우 런타임에 응용 프로그램 내에서 해당 문자열을 어떻게 얻습니까?

답변:


134

나는 시도 할 것이다

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

아마도 여러분은 자신의 앱 이름을 알고 있고 그냥 사용할 수 있습니다.


5
상수가 존재하지 않더라도 작동합니다. @ "CFBundleDisplayName"이라고 생각합니다. 작성중인 코드가 다른 앱에서 사용될 수 있으므로 앱 이름을 하드 코딩하고 싶지 않습니다.
Jonathan

아, 맞습니다. 상수가 없습니다 (다른 키를 잡은 기존 코드를 복사했습니다). 하지만 원시 문자열은 괜찮을 것입니다.
David Dunham

이것은 Bundle display nameInfo.plist파일에 속성을 추가 한 후에 저에게 효과적이었습니다 .
pasql

5
CFBundleDisplayName이 아니라 CFBundleName입니다. 속지 마십시오
LKM 2015 년

1
글쎄요. CFBundleDisplayName에 대한 문서를 확인하십시오.
David Dunham

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'에 대한 추가 정보

다음은 Core Foundation Keys에 대한 Apple의 문서에서 가져온 것입니다.

CFBundleName ,“Bundle name”, 번들의 짧은 이름. 사용자가 볼 수 없습니다. 자세한 내용은 CFBundleName 을 참조하십시오. (권장, 현지화 가능)

CFBundleDisplayName ,“Bundle display name”, 사용자가 볼 수있는 번들 이름. Siri에서 사용되며 iOS의 홈 화면에 표시됩니다. 자세한 내용은 CFBundleDisplayName 을 참조하십시오. (필수, 현지화 가능)


1
문서에는 CFBundleDisplayName이 필수 키라고 나와 있습니다. 또한 CFBundleName이“번들의 짧은 이름입니다. 사용자가 볼 수 없습니다. "
David Dunham

@DavidDunham 감사합니다! Apple의 현재 문서와 일치하도록 " 'CFBundleName'및 'CFBundleDisplayName'에 대한 추가 정보"아래의 내 답변 텍스트를 업데이트했습니다.
Mobile Dan

호기심 :이 코드가 nil이고 기본값을 제공해야한다면이 코드를 사용하는 이유는 무엇입니까? 왜 그 값을 사용하지 않습니까?
Daniel Springer

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

14

배열 항목을 얻는 새로운 방법 인 Xcode 4.5를 좋아하기 때문입니다. :)

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

1
이 마법은 무엇입니까? 이렇게 할 수있을 줄 몰랐어요.
Pochi

이것이 Swft에 존재합니까?
Daniel Springer

8

Xamarin.iOS의 경우 다음을 사용합니다.

return ((NSString)NSBundle.MainBundle.InfoDictionary["CFBundleName"]).ToString();

7
#include <stdlib.h>

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

번들 구조에 없거나 infoDictionary를 채우기위한 Info.plist 파일이없는 명령 줄 도구를 작성하는 경우에도 유용합니다.
user2067021 aug

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];

여기에 당신이 찾고있는 것에 대한 좋은 글 이 있습니다. OP는 아무것도 받아들이지 않았는데, 이는 안타깝지만 답변은 유용합니다.


감사합니다. 해당 게시물에 유용한 정보가 있습니다. 그래도 Davids 대답의 한 라이너를 선호하십시오;) +1
Jonathan

1

주의 :

localizations앱에서 a를 수행하는 경우 Blew 코드를 사용하여 실제 현지화 된 표시 이름을 가져와야합니다.

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

보다는 :

Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as? String
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.