ios - número - extensiones de aplicaciones moviles
Obtenga el paquete principal de aplicaciones desde la extensión (1)
¿Es posible obtener el NSBundle
la aplicación NSBundle
dentro de una extensión de la aplicación? Me gustaría obtener el nombre para mostrar de la aplicación principal, no el nombre para mostrar de la extensión.
El método +mainBundle
devuelve el paquete que contiene el "ejecutable de la aplicación actual", que es una subcarpeta de su aplicación cuando se llama desde una extensión.
Esta solución implica quitar dos niveles de directorio de la URL del paquete, cuando termina en "appex".
C objetivo
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")
Esto se romperá si alguna vez cambia la extensión o la estructura del directorio para una extensión de iOS.