I am using Assets Catalog, and adding app icon of various size to the assets is okay.
But when I tried to get the UIImage programmatically, it returned nil.
UIImage *appIcon = [UIImage imageNamed"AppIcon"];
The app icon is named AppIcon
(the default), and the actual files are app-icon-256.png
etc.
I also noticed that unlike normal images, app icons are in an "App Icon" set, in the directory AppIcon.appiconset
. Normal images are in the directory someimage.imageset
.
UIImage *img = [[UIImage alloc] init]; [img setImage:[UIImage imageNamed:@"anyImageName"]];
UIImage contains the data for an image. UIImageView is a custom view meant to display the UIImage .
The problem is that the AppIcon from the asset catalog is not placed in the the catalog after compiling. Instated it it copied into your apps bundle, just like before.
The name conversion used when copying the icon to the app bundle is AppIcon<size>.png
, where the size is for example 40x40
or 72x72
You can get your apps icons by specifying the size of the app icon you want:
UIImage *appIcon = [UIImage imageNamed:@"AppIcon40x40"];
The >iOS10 answer is:
Copy & paste this extension.
extension Bundle { var icon: UIImage? { if let icons = infoDictionary?["CFBundleIcons"] as? [String: Any], let primary = icons["CFBundlePrimaryIcon"] as? [String: Any], let files = primary["CFBundleIconFiles"] as? [String], let icon = files.last { return UIImage(named: icon) } return nil } }
Then just call this:
Bundle.main.icon
SwiftUI:
Image(uiImage: Bundle.main.icon ?? UIImage())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With