如何获得AppIcon的UIImage?

sam*_*ize 35 xcode objective-c uiimage ios

我正在使用资产目录,并且可以向资产添加各种大小的应用程序图标.

但是当我尝试以编程方式获取UIImage时,它返回nil.

UIImage *appIcon = [UIImage imageNamed"AppIcon"];
Run Code Online (Sandbox Code Playgroud)

应用程序图标命名AppIcon(默认),实际文件app-icon-256.png等.

我还注意到,与普通图像不同,应用程序图标位于目录中的"应用程序图标"集中AppIcon.appiconset.正常图像在目录中someimage.imageset.

rck*_*nes 66

问题是编译后资产目录中的AppIcon没有放在目录中.将其复制到您的应用包中,就像之前一样.

将图标复制到应用程序包时使用的名称转换AppIcon<size>.png是,例如,40x40或者72x72

您可以通过指定所需应用程序图标的大小来获取应用程序图标:

UIImage *appIcon = [UIImage imageNamed:@"AppIcon40x40"];
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不再适用于iOS 10,Xcode 8,Swift. (5认同)

Ruf*_*rza 9

>iOS10的答案是:

复制并粘贴此扩展名。

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
  }
}
Run Code Online (Sandbox Code Playgroud)

然后就这样调用:

Bundle.main.icon
Run Code Online (Sandbox Code Playgroud)

斯威夫特用户界面

Image(uiImage: Bundle.main.icon ?? UIImage())
Run Code Online (Sandbox Code Playgroud)

  • @ViktorSec也许,但不幸的是,简单地使用“AppIcon”作为文件名将加载图像的最小分辨率,而这个答案加载最高分辨率。 (2认同)

Rog*_*Oba 8

2022 年 9 月 12 日更新:这不再有效,至少从 iOS 16.0.0 开始。

其他答案中突出显示的加载主应用程序图标的方法(例如来自 Rufat Mirza 的答案)曾经有效,并且对于调试版本仍然有效,但我收到了 Apple 的应用程序拒绝,称该应用程序在启动时崩溃。事实证明,包含此代码的构建在 iOS 16 上开始崩溃,但仅限于通过 App Store/TestFlight 安装时(使用“发布”配置构建)。更奇怪的是,使用通过 Xcode 编译的“Release”配置进行的构建也不会崩溃,只有在上传到 App Store 并从 TestFlight 下载时才会崩溃,所以请记住这一点。

不幸的是,修复方法是创建一个与 AppIcon 资产内容相同的新图像资产。

请注意,从 12.5.1 开始,此解决方法仍然适用于 macOS,以及 Apple 在今天审查其应用程序时使用的任何 macOS 版本,但由于我已经必须为 iOS 复制资产,所以我还为 macOS 使用了相同的资产避免这个小黑客:)