ios 设置备用应用程序图标时,代码=3072“操作已取消”

zqry0prt  于 2023-03-24  发布在  iOS
关注(0)|答案(2)|浏览(317)

我试图在我的iOS应用程序中设置一个名为MyIconalternate app icon。我的项目包中有一个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."

如何解决此问题?

vmdwslir

vmdwslir1#

我得到这个错误有两个原因,

  • 首先(而且不是因为),我没有通过将png文件添加到项目中来执行 “将文件添加到'ProjectNameFoo'”。否则它不起作用。之后它开始看到图标。
  • 第二(也是很有可能的原因),我得到这个错误是因为我试图在viewDidLoad中更改图标。当我尝试像下面的代码一样延迟时,无论我给它多少秒,它都在工作。
override func viewDidLoad() {
    super.viewDidLoad()

    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        UIApplication.shared.setAlternateIconName("MyIcon")
    }
}
fgw7neuy

fgw7neuy2#

这个错误困扰了我很长一段时间,我尝试了各种方法,但都找不到我做错了什么。我把AppDelegate.application(didFinishLaunchingWithOptions:)的图标改了。用上面建议的计时器延迟呼叫确实解决了这个问题。
值得注意的是,这个问题是由于UIKit试图显示一个带有消息的UIAlertController
您已更改$(PRODUCT_NAME)的图标
你需要等待直到一个根视图控制器被加载。
这是因为这个API并不是让开发者随意更新图标,而是让用户有意识地选择一个。

相关问题