2014-10-04 14 views

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.

+0

Dzięki za to! Czy udało Ci się uzyskać zatwierdzoną aplikację AppStore w ten sposób? – ewindsor

+0

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

+0

Ah niesamowite. Dzięki za wgląd. – ewindsor

Powiązane problemy