Czy można pobrać aplikację zawierającą aplikację NSBundle
z rozszerzenia aplikacji? Chciałbym uzyskać nazwę wyświetlaną głównej aplikacji, a nie nazwę wyświetlaną rozszerzenia.Pobierz główny pakiet aplikacji z rozszerzenia
9
A
Odpowiedz
18
Metoda +mainBundle
zwraca pakiet zawierający "bieżący plik wykonywalny aplikacji", który jest podfolderem aplikacji po wywołaniu z poziomu rozszerzenia.
Rozwiązanie to polega na oderwaniu dwóch poziomów katalogów od adresu URL pakietu, który kończy się na "appex".
Cel 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")
To pęknąć PATHE xtension lub struktura katalogów dla rozszerzenia iOS uległa zmianie.
Dzięki za to! Czy udało Ci się uzyskać zatwierdzoną aplikację AppStore w ten sposób? – ewindsor
Tak, nie są używane żadne prywatne interfejsy API. Użyliśmy tego w naszym rozszerzeniu watchOS 1 do załadowania modelu zarządzanego obiektu dla 'UIManagedDocument' z głównego pakietu aplikacji na iOS. – phatblat
Ah niesamowite. Dzięki za wgląd. – ewindsor