自己新建一个项目实现
自己实现需要注意两个问题:
Info.plist怎么设置?
备用图标icon放到哪里?
首先来设置Info.plist 。按照苹果官方的API说法,那就先在Info.plist里面添加CFBundleIcons 。但是查看了一下Key和Xcode name对应的表格,CFBundleIcons对应的是None,那就直接添加CFBundleIcons吧 。点击Information Property List后面的加号,输入CFBundleIcons,当点击Enter键的时候,你会惊奇发现:你添加的CFBundleIcons变成了Icon files(iOS 5)字典 。看看CFBundleIcons的官方API:
文章插图
根据英文意思可以知道:该key包含了所有app使用的icons信息 。新建的是这样的:
文章插图
可知默认的包含了CFBundlePrimaryIcon和UINewsstandIcon 。里面没有CFBundleAlternateIcons,(我理解的应该是苹果不太想支持用户添加备选icon,所以才没有) 。这里不过多介绍UINewsstandIcon了,它应该是在NewStand上展示的吧,不太清楚,想了解可以看API,里面介绍了 。现在把NewStand Icon删除,添加CFBundleAlternateIcons 。添加后如图所示:
文章插图
但是看官方API对CFBundleAlternateIcon的介绍里面,并没有UINewstandBindingType和UINewsstandBindingEdge,只有这个:
文章插图
也就是官网所说的只有CFBundleIconFiles和UIPrerenderedIcon,那就删了多余的那两个UINewstandBindingType和UINewsstandBindingEdge 。然后添加UIPrerenderedIcon:
文章插图
。按照苹果的说法,把备用图标的名字放到Items0里面 。我们先直接在左侧导航中加入两张图片:newicon@2x.png 和newicon@3x.png,一个120 * 120,一个180 * 180 。但是看到上图说的设置 , 跑起来运行代码:
@IBAction func changeToNewIconAction(_ sender: Any) { if !checkSupportChangeIcon() { return } if !UIApplication.shared.supportsAlternateIcons { return } changeToIcon("newicon") } //MARK: check system version func checkSupportChangeIcon() -> Bool { let deviceVersion = UIDevice.current.systemVersion if deviceVersion.contains("10.3") { return true } return false } //MARK: change to icon message func changeToIcon(_ iconName: String?) { UIApplication.shared.setAlternateIconName(iconName) { (error) in if (error != nil) { self.aler(str: (error!.localizedDescription)) }else { self.aler(str: "修改成功") } } } //MARK: alert message func aler(str: String) { let alert = UIAlertController.init(title: "提示", message: str, preferredStyle: .alert) let okAction = UIAlertAction.init(title: "ok", style: .cancel) { (action: UIAlertAction) in print("关闭弹出框") } alert.addAction(okAction) self.present(alert, animated: true, completion: nil) }结果却是:
The file doesn't exist看了一下官方API对CFBundleAlternateIcons的介绍,里面有一句话:
In iOS, the value of the key is a dictionary. The key for each dictionary entry is the name of the alternate icon, which is also the string you pass to the setAlternateIconName:completionHandler: method of UIApplication when changing icons. The value for each key is a dictionary containing the keys in Table 5意思是这个CFBundleAlternateIcons中的字典的key是备用icon的名字,因此需要这样修改:
文章插图
也就是CFBundleAlternateIcons字典里面的key是备用icon的名字,然后以名字为key的字典里面又包含了CFBundleIconFiles和UIPrerenderedIcon 。这样设置之后再次运行你会发现成功更改了icon 。这样就成功地改变了icon 。关于Primary Icon,直接不用设置Icon files就好了,如果你想设置为默认的icon , 就在setAlternateIconName里面传入nil就好了 。这个时候Info.plist源码长这样:
- 华为手机选购指南,华为手机应用指南
- Minecraft已经从俄罗斯区域的iOS/Android应用商店中下架
- 禁止软件访问网络 禁止应用程序访问网络
- 物联网应用领域有哪些 物联网应用领域有哪些方面
- 人工智能音箱哪个好 智能音箱应用了人工智能吗
- iOS14怎么分屏 ios14怎么分屏用两个程序
- 当前浏览器加载税务安全证书应用客户端 不成功 显示当前浏览器加载税务安全证书不成功
- 苏州大学应用技术学院怎么样 苏州大学应用技术学院官网教务管理系统
- 应用程序发生异常unknown software 应用程序异常unknownsoftwareexception
- 有六年级上册分数应用题吗 六年级上册分数应用题大全及答案