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?

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 ...


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)


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

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

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();

7
#include <stdlib.h>

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

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

4

Swift 3, 4 & 5

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.