Ist es möglich, die enthaltenen App NSBundle
aus einer App-Erweiterung zu bekommen? Ich möchte den Anzeigenamen der Haupt-App erhalten, nicht den Anzeigenamen der Erweiterung.Holen Sie sich das Haupt-App-Paket von innerhalb der Erweiterung
9
A
Antwort
18
Die Methode +mainBundle
gibt das Bundle zurück, das die ausführbare Datei der aktuellen Anwendung enthält. Dies ist ein Unterordner Ihrer App, wenn Sie von einer Erweiterung aus aufgerufen werden.
Bei dieser Lösung werden zwei Verzeichnisebenen von der URL des Bundles entfernt, wenn sie mit "appex" endet.
Objective-C
NSBundle *bundle = [NSBundle mainBundle];
if ([[bundle.bundleURL pathExtension] isEqualToString:@"appex"]) {
// Peel off two directory levels - MY_APP.app/PlugIns/MY_APP_EXTENSION.appex
bundle = [NSBundle bundleWithURL:[[bundle.bundleURL URLByDeletingLastPathComponent] URLByDeletingLastPathComponent]];
}
NSString *appDisplayName = [bundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
Swift 2,2
var bundle = NSBundle.mainBundle()
if bundle.bundleURL.pathExtension == "appex" {
// Peel off two directory levels - MY_APP.app/PlugIns/MY_APP_EXTENSION.appex
bundle = NSBundle(URL: bundle.bundleURL.URLByDeletingLastPathComponent!.URLByDeletingLastPathComponent!)!
}
let appDisplayName = bundle.objectForInfoDictionaryKey("CFBundleDisplayName")
Swift 3
var bundle = Bundle.main
if bundle.bundleURL.pathExtension == "appex" {
// Peel off two directory levels - MY_APP.app/PlugIns/MY_APP_EXTENSION.appex
let url = bundle.bundleURL.deletingLastPathComponent().deletingLastPathComponent()
if let otherBundle = Bundle(url: url) {
bundle = otherBundle
}
}
let appDisplayName = bundle.object(forInfoDictionaryKey: "CFBundleDisplayName")
Dies wird brechen, wenn die Pathé xtension oder die Verzeichnisstruktur für eine iOS-Erweiterung ändert sich je.
Danke dafür! Konnten Sie eine AppStore-App auf diese Weise genehmigen? – ewindsor
Ja, hier werden keine privaten APIs verwendet. Wir haben dies in unserer Erweiterung watchOS 1 verwendet, um das Modell des verwalteten Objekts für ein UIManagedDocument aus dem Hauptpaket der iOS-App zu laden. – phatblat
Ah super. Danke für die Einsicht. – ewindsor