icon apple app ios cocoa-touch nsbundle uiapplication

apple - Cómo obtener el ícono de la aplicación actual en ios



apple store (9)

Aquí hay una extensión Swift 4.x && 3.x para UIApplication para obtener el ícono de la aplicación. Puede elegir si desea obtener el ícono más pequeño o más grande en función de la ubicación de la ruta del ícono que iconFiles matriz de iconFiles .

extension UIApplication { var icon: UIImage? { guard let iconsDictionary = Bundle.main.infoDictionary?["CFBundleIcons"] as? NSDictionary, let primaryIconsDictionary = iconsDictionary["CFBundlePrimaryIcon"] as? NSDictionary, let iconFiles = primaryIconsDictionary["CFBundleIconFiles"] as? NSArray, // First will be smallest for the device class, last will be the largest for device class let lastIcon = iconFiles.lastObject as? String, let icon = UIImage(named: lastIcon) else { return nil } return icon } }

Para acceder al icono, llame a lo siguiente:

let icon = UIApplication.shared.icon

Para obtener puntos de bonificación, incluso podría hacer dos vars para obtener el ícono más pequeño y más grande si su aplicación lo necesita.

¿Hay alguna manera de obtener el ícono de la aplicación actual en una aplicación de cocoa-touch? Gracias.


Así es como se establecen los íconos dentro de la lista de información,

//try doing NSLog(@"%@",[[NSBundle mainBundle] infoDictionary]); CFBundleIcons = { CFBundlePrimaryIcon = { CFBundleIconFiles = ( "icon.png",//App icon added by you "[email protected]"//App icon in retina added by you ); UIPrerenderedIcon = 1; }; };

Si desea obtener el ícono de la aplicación, utilice el siguiente código:

UIImage *appIcon = [UIImage imageNamed: [[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIcons"] objectForKey:@"CFBundlePrimaryIcon"] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];

PS: UIImage selecciona automáticamente el ícono adecuado para la visualización de la retina.

¡¡Espero que ayude!!


Debido a que me tomó un poco de tiempo entrenar, aquí hay una solución Swift que funciona.

let primaryIconsDictionary = NSBundle.mainBundle().infoDictionary?["CFBundleIcons"]?["CFBundlePrimaryIcon"] as? NSDictionary let iconFiles = primaryIconsDictionary!["CFBundleIconFiles"] as NSArray let lastIcon = iconFiles.lastObject as NSString //last seems to be largest, use first for smallest let theIcon = UIImage(named: lastIcon) let iconImageView = UIImageView(image: theIcon)


Eso es fácil, porque el nombre de archivo del icono actual se establece en Info.plist:

NSString *filePath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];

Si desea elegir la versión de alta resolución, debe utilizar:

NSString *filePath = nil; for (NSString *fileName in [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIconFiles"]) { if ([fileName rangeOfString:@"@2x"].location != NSNotFound) { filePath = [[NSString alloc] initWithString:fileName]; } }


La respuesta aceptada no me funcionó, estoy usando el método Images.xcassets de Xcode 5 para almacenar iconos de aplicaciones. Esta modificación funcionó para mí:

UIImage *appIcon = [UIImage imageNamed: [[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIcons"] objectForKey:@"CFBundlePrimaryIcon"] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];

En caso de duda, simplemente explore el infoDictionary del paquete principal utilizando lldb.


Si estás usando Xamarin:

var iconNames = NSBundle.MainBundle.InfoDictionary.ValueForKeyPath((NSString)"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles") as NSArray; var name = iconNames.GetItem<NSString>(iconNames.Count - 1); //Grabs last item, call with 0 for the first item var icon = UIImage.FromBundle(name);

Basado en la respuesta de Andy usando el método KVC. Un poco largo, pero usar KeyPath es mejor que encadenar llamadas a ValueForKey.


Si usa catálogos de activos, simplemente puede usar:

UIImage* appIcon = [UIImage imageNamed:@"AppIcon60x60"];

Los catálogos de activos parecen estandarizar los nombres de archivos para los íconos de aplicaciones.

Ciertamente, si necesita listar todos los íconos de aplicaciones en su paquete, puede buscarlo en la rama de CFBundleIconFiles del diccionario de información.

Usando KVC puede obtenerlo fácilmente en una sola línea de código:

NSArray* allIcons = [[[NSBundle mainBundle] infoDictionary] valueForKeyPath:@"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles"];

La matriz resultante contendrá todos los nombres de íconos de aplicaciones disponibles en su paquete. Cualquiera de estos nombres se puede usar para recuperar el icono usando +[UIImage imageNamed:]

<__NSCFArray 0x15d54260>( AppIcon29x29, AppIcon40x40, AppIcon60x60 )


Trabaja para Swift 4.1 y se extiende para Bundle.

extension Bundle { public var icon: UIImage? { if let icons = infoDictionary?["CFBundleIcons"] as? [String: Any], let primaryIcon = icons["CFBundlePrimaryIcon"] as? [String: Any], let iconFiles = primaryIcon["CFBundleIconFiles"] as? [String], let lastIcon = iconFiles.last { return UIImage(named: lastIcon) } return nil } }

Para usar en una aplicación, llame a Bundle.main.icon .


moosgummi''s mi respuesta completamente en la de moosgummi''s , pero moosgummi''s un UIImage lugar.

UIImage *appIcon = [UIImage imageNamed: [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];

El UIImage selecciona automáticamente la versión adecuada (normal, @2x , ~ipad , ~ipad@2x o cualquier sufijo futuro). (Por cierto, ¿no odias este estúpido esquema para identificar versiones de imágenes? Se estaba yendo de las manos. ¡Gracias a Dios por los catálogos de activos!)