有没有办法在ios中动态更改应用程序图标?

Is there any way to change the app icon dynamically in ios?

提问人:user3467582 提问时间:9/15/2017 最后编辑:Nadeem Iqbaluser3467582 更新时间:1/3/2020 访问量:2797

问:

我想动态更改应用程序图标。我从服务器接收图像。如何使用该图像作为替代应用程序图标。请确保答案清楚。(但据我所知,替代应用程序图标文件应该在我们的项目 plist 文件中)。

提前致谢。

IOS的 Objective-C Cocos2D-iPhone

评论

0赞 Anbu.Karthik 9/15/2017
查看此 stackoverflow.com/questions/43097604/alternate-icon-in-ios-10-3
0赞 user3467582 9/15/2017
感谢您的回复,但我想要动态的回复。

答:

7赞 Michael Hulet 9/15/2017 #1

您无法在运行时使用从服务器下载的图像更改应用图标。从文档中:

您必须使用应用文件的键来声明应用的主图标和备用图标。有关如何为应用配置备用图标的信息,请参阅信息属性列表键参考中的键说明。CFBundleIconsInfo.plistCFBundleIcons

为了动态设置应用程序图标,您必须能够在 中定义它,但 your 包含在 app bundle 中,并且 app bundle 是只读的,因此您没有对文件的运行时写入权限。因此,您无法将应用图标更改为在运行时动态下载的图像Info.plistInfo.plistInfo.plist

评论

0赞 zumzum 1/4/2020
是否可以将 INFO PLIST 设置为将在运行时下载的图像?
0赞 Michael Hulet 1/4/2020
我不这么认为。我相信它们需要被编译到你的应用程序的捆绑包中,这样 iOS 才能知道在哪里可以找到它们。没有办法将其设置为特定文件,只能将其设置为您在 中列出的名称,而且我认为 iOS 不会检查您应用程序的运行时可写目录Info.plist
1赞 Byka 1/2/2020 #2

Apple 推出了一个很酷的功能,以便开发人员能够以编程方式更改应用程序图标。

在 Apple 的 API 文档中,有 3 件事值得一看:

var supportsAlternateIcons: Bool { get }
var alternateIconName: String? { get }
func setAlternateIconName(String?, completionHandler: ((Error?) -> Void)? = nil)

信息.plist

现在我们只需调用该方法:

changeIcon(to: "icon-imageName")

参考: https://developer.apple.com/documentation/uikit/uiapplication/2806815-supportsalternateicons