14

我正在尝试设置在我的 iOS 应用程序中命名的备用应用程序图标。MyIcon我的项目包中有一个MyIcon.png图像(不在我的 Assets 文件夹中),它在我的 Info.plist 中声明,如下所示:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>MyIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>MyIcon</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

在我的代码中,我尝试更改应用程序图标:

UIApplication.shared.setAlternateIconName("MyIcon")

但是,图标没有改变,而是在控制台中给出了这个错误:

Error Domain=NSCocoaErrorDomain Code=3072 "The operation was cancelled."

我该如何解决这个问题?

4

2 回答 2

22

由于两个原因,我收到此错误,

  • 首先,我没有通过将 png 文件添加到项目来执行“将文件添加到 'ProjectNameFoo'” 。否则它不起作用。之后它开始看到图标。
  • 其次,我收到此错误是因为我试图更改viewDidLoad. 当我尝试像下面的代码这样的延迟时,无论我给出什么秒数,它都能正常工作。
override func viewDidLoad() {
    super.viewDidLoad()

    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        UIApplication.shared.setAlternateIconName("MyIcon")
    }
}
于 2017-05-24T07:14:47.740 回答
12

我被这个错误困住了很长一段时间,尝试了各种各样的事情,但无法弄清楚我做错了什么。我正在将图标从AppDelegate.application(didFinishLaunchingWithOptions:). 如上所述使用计时器延迟呼叫确实解决了这个问题。

值得注意的是,这个问题是由于 UIKit 试图显示UIAlertController带有消息的

您更改了 $(PRODUCT_NAME) 的图标

那时这似乎不起作用。您需要等到加载根视图控制器。

这是因为这个 API 并不是为了让开发者随意更新图标,而是为了让用户选择一个交付能力。

于 2019-11-19T11:34:52.523 回答