I\'d like to display the app icon inside my app. The icon is in the default assets catalog (Images.xcassets
).
How do you load it? I tried the following and
Following Ortwin answer, a Swift 4 approach:
func getHighResolutionAppIconName() -> String? {
guard let infoPlist = Bundle.main.infoDictionary else { return nil }
guard let bundleIcons = infoPlist["CFBundleIcons"] as? NSDictionary else { return nil }
guard let bundlePrimaryIcon = bundleIcons["CFBundlePrimaryIcon"] as? NSDictionary else { return nil }
guard let bundleIconFiles = bundlePrimaryIcon["CFBundleIconFiles"] as? NSArray else { return nil }
guard let appIcon = bundleIconFiles.lastObject as? String else { return nil }
return appIcon
}
Then it can be used like:
let imageName = getHighResolutionAppIconName()
myImageView.image = UIImage(named: imageName)
By inspecting the bundle I found that the icon images were renamed as:
AppIcon76x76~ipad.png
AppIcon76x76@2x~ipad.png
AppIcon60x60@2x.png
And so on.
Thus, using [UIImage imageNamed:@"AppIcon76x76"]
or similar works.
Is this documented somewhere?
I recommend retrieving the icon URL by inspecting the Info.plist
since there's no guarantee how the Icon files are named:
NSDictionary *infoPlist = [[NSBundle mainBundle] infoDictionary];
NSString *icon = [[infoPlist valueForKeyPath:@"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles"] lastObject];
imageView.image = [UIImage imageNamed:icon];
In this case we're fetching the last image URL of the CFBundleIconFiles array. It has the largest resolution. Change this if you need a smaller resolution.