So erhalten Sie den Namen der laufenden Anwendung in iOS

78

Wenn der Anwendungsname unter dem Symbol auf dem Startbildschirm "My Awesome App" lautet, wie erhalten Sie diese Zeichenfolge zur Laufzeit in der Anwendung?

Jonathan
quelle

Antworten:

133

Ich würde es versuchen

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

obwohl Sie vermutlich den Namen Ihrer eigenen App kennen und ihn einfach verwenden können ...

David Dunham
quelle
5
Dies funktioniert, obwohl die Konstante nicht existiert. Vermutlich ist es @ "CFBundleDisplayName". Ich möchte den App-Namen nicht fest codieren, da der Code, den ich schreibe, möglicherweise in anderen Apps verwendet wird.
Jonathan
Ah, Sie haben Recht, es gibt keine Konstante (ich habe einen vorhandenen Code kopiert, der einen anderen Schlüssel gepackt hat). Die rohe Zeichenfolge sollte jedoch in Ordnung sein.
David Dunham
Dies funktionierte für mich, nachdem ich die Bundle display nameEigenschaft in meine Info.plistDatei aufgenommen hatte.
Pasql
5
nicht CFBundleDisplayName, sondern CFBundleName. Lassen Sie sich nicht täuschen
LKM
1
Es hängt davon ab. Überprüfen Sie die Dokumentation für CFBundleDisplayName.
David Dunham
28

Schnelle 3 & 4

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


Swift 2.2

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


Weitere Informationen zu 'CFBundleName' und 'CFBundleDisplayName'

Das Folgende stammt aus der Apple-Dokumentation zu Core Foundation Keys

CFBundleName , "Bundle-Name", Der Kurzname des Bundles; nicht dazu gedacht, vom Benutzer gesehen zu werden. Weitere Informationen finden Sie unter CFBundleName . (Empfohlen, lokalisierbar)

CFBundleDisplayName , "Bundle-Anzeigename", Der vom Benutzer sichtbare Name des Bundles; Wird von Siri verwendet und ist auf dem Startbildschirm in iOS sichtbar. Weitere Informationen finden Sie unter CFBundleDisplayName . (Erforderlich, lokalisierbar)

Mobiler Dan
quelle
1
In der Dokumentation heißt es, dass CFBundleDisplayName ein erforderlicher Schlüssel ist. Außerdem heißt es, dass CFBundleName der „Kurzname des Bundles“ ist. nicht für den Benutzer vorgesehen. “
David Dunham
Vielen Dank, dass Sie @DavidDunham! Ich habe den Text in meiner Antwort unter "Weitere Informationen zu 'CFBundleName' und 'CFBundleDisplayName'" an die aktuelle Dokumentation von Apple angepasst.
Mobile Dan
Neugier: Was bringt es, diesen Code zu verwenden, wenn er Null ist und ein Standardwert angegeben werden sollte? Warum nicht einfach diesen Wert verwenden?
Daniel Springer
19
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];

quelle
14

Nur weil ich den neuen Xcode 4.5-Weg liebe, um ein Array-Element zu erhalten. :) :)

- (NSString*)project_getAppName {
    return NSBundle.mainBundle.infoDictionary[@"CFBundleDisplayName"];
}
Franck
quelle
1
was ist das für eine Zauberei? Ich wusste nicht, dass du es so machen kannst.
Pochi
Existiert das in Swft?
Daniel Springer
8

Für Xamarin.iOS verwenden Sie:

return ((NSString)NSBundle.MainBundle.InfoDictionary["CFBundleName"]).ToString();
Kraig McConaghy
quelle
7
#include <stdlib.h>

// work for iOS and MacOSX and ~23 times faster than get name from bundle
NSString *app = [NSString stringWithUTF8String:getprogname()];
Roman Solodyashkin
quelle
Nützlich auch, wenn Sie ein Befehlszeilentool schreiben, das sich nicht in einer Bundle-Struktur befindet oder keine Info.plist-Datei zum Auffüllen von infoDictionary hat.
user2067021
5

Swift 3/4

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

Swift 3, 4 & 5

let appName = Bundle.main.infoDictionary?["CFBundleName"] as? String
mpatzer
quelle
3
NSString* applicationName = [entry objectForKey:(id)kCGWindowOwnerName];

Hier ist ein guter Beitrag mit Beispielen dafür, wonach Sie suchen. Das OP hat nichts akzeptiert, was bedauerlich ist, aber die Antworten sind nützlich.

Billy Coover
quelle
Vielen Dank, einige großartige Informationen in diesem Beitrag. Bevorzugen Sie jedoch den Einzeiler in Davids Antwort;) +1
Jonathan
1

Achtung :

Wenn Sie eine localizationsin Ihrer App ausführen, sollten Sie den geblasenen Code verwenden, um den tatsächlichen lokalisierten Anzeigenamen zu erhalten:

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

eher als :

Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as? String
Yuanjilee
quelle