Comment get l'icône de l'application en cours dans ios

Est-il possible d'get l'icône de l'application en cours dans une application Cocoa-Touch? Je vous remercie.

J'ai basé ma réponse complètement sur moosgummi , mais en returnnant un UIImage place.

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

L' UIImage sélectionne automatiquement la version appropriée (normal, @2x , ~ipad , ~ipad@2x ou tout autre suffixe futur). (BTW, ne détestes-tu pas ce stratagème stupide pour identifier des versions d'images?

La réponse acceptée n'a pas fonctionné pour moi, j'utilise la méthode Images.xcassets de Xcode 5 pour stocker des icons d'applications. Cette modification a fonctionné pour moi:

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

En cas de doute, explorez infoDictionary du bundle principal en utilisant lldb.

Voici comment les icons sont définies dans info.plist,

 //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 vous voulez get l'icône de l'application, utilisez le code ci-dessous:

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

PS: UIImage sélectionne automatiquement l'icône appropriée pour l'affichage de la rétine.

J'espère que ça aide !!

C'est facile, parce que le nom de file de l'icône actuelle est défini dans Info.plist:

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

Si vous voulez choisir la version haute résolution, vous devez utiliser:

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

Si vous utilisez des catalogues d'actifs, vous pouvez simplement utiliser:

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

Les catalogues d'actifs semblent normaliser les noms de files pour les icons d'applications.

Certainement, si vous avez besoin de listr toutes les icons d'applications dans votre bundle, vous pouvez le searchr dans la twig CFBundleIconFiles du dictionary d'info.

En utilisant KVC vous pouvez facilement get cela dans une seule ligne de code:

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

Le tableau résultant contiendra tous les noms d'icône d'application disponibles dans votre groupe. N'importe lequel de ces noms peut être utilisé pour récupérer l'icône en utilisant +[UIImage imageNamed:]

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

Parce qu'il m'a fallu un peu de time pour m'entraîner, voici une solution Swift fonctionnelle.

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

Voici une extension Swift 3.x à UIApplication pour get l'icône de l'application. Vous pouvez choisir d'get l'icône la plus petite ou la plus grande en fonction de l'location du path d'icône que vous avez extrait du tableau 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? Ssortingng, let icon = UIImage(named: lastIcon) else { return nil } return icon } } 

Pour accéder à l'icône, appelez ce qui suit:

 let icon = UIApplication.shared.icon 

Pour les points bonus, vous pouvez même faire deux vars pour get l'icône la plus petite et la plus grande si votre application en avait besoin.

Si vous utilisez Xamarin:

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

Basé sur la réponse d'Andy en utilisant la méthode KVC. Bit long, mais l'utilisation de KeyPath est préférable à l'enstringment des appels à ValueForKey.