Load app icon from xcassets

前端 未结 3 1356
暖寄归人
暖寄归人 2021-02-02 11:11

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

相关标签:
3条回答
  • 2021-02-02 11:39

    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)
    
    0 讨论(0)
  • 2021-02-02 11:59

    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?

    0 讨论(0)
  • 2021-02-02 12:00

    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.

    0 讨论(0)
提交回复
热议问题