自己实现需要注意两个问题:
首先来设置 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 versionfunc checkSupportChangeIcon ( ) -> Bool { let deviceVersion = UIDevice.current.systemVersion if deviceVersion.contains ( "10.3" ) { return true } return false}//MARK: change to icon messagefunc changeToIcon ( _ iconName: String? ) { UIApplication.shared.setAlternateIconName ( iconName ) { ( error ) in if ( error != nil ) { self.aler ( str: ( error!.localizedDescription ) ) }else { self.aler ( str: " 修改成功 " ) } } }//MARK: alert messagefunc 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 源码长这样:
在 Property List 里面,Primary Icon 的 Icon already includes gloss effects 就是 UIPrerenderedIcon,它的设置为 false。 ( 这里的光泽效果也是没有测试出来有什么不一样 )
接下来看看备用 icon 是在哪里放着呢?
开始的时候直接放到这里:
发现是 OK 的,可以正常显示。
那么放到 Assets.xcassets 里面呢?放到 Bundle 里面呢?接下来将每个 case 都进行测试:
放到 Assets.xcassets 里面。新建一个普通的 Image set,然后将图片放到里面,效果如图所示:
经过测试发现,这样放置是无法正常改变 appicon 的。但是运行结果没有任何错误,而且系统提示里面加载的也是新的 app icon:
放到 Assets.xcassets 里面,并且新建的 icon,如图:
运行依然设置不成功。没有错误提示
放到一个新建的 Bundle 里面。如图所示:。
运行结果依然是没有成功更改。没有错误提示。
所以经过测试,发现只有放到导航里面的图片才可以更改成功。在苹果 qa 里面看到过一个场景,他们是直接在导航新建了一个文件夹,然后将图片放到里面,然后使用。这里也推荐建立文件夹放入图片,然后使用
另外,关于 icon 大小,可以参见这里。
最后告诉大家一个不使用 Asset 来配置 Icon 的方法:直接在 Info.plist 下面这样写:
这个是通用的,可以直接设置 iPhone 和 iPad 的 icon。其实这里也是想告诉大家:如何在 CFBundleIconFiles 里面去添加图片数组:
CFBundleIconFiles Icon-Small Icon-Small-40 Icon-Small-50 Icon Icon-60 Icon-72
- 苹果隐藏某个app图标
- 苹果手机如何隐藏app图标
- 苹果手机各种图标解释
- 电脑电量图标不见了
- 苹果app密码忘记了怎么办
- 电脑右下角网络连接图标不见了
- 空调遥控器图标
- 吧拉app创始人
- 移动魔百盒怎么安装app
- 王者荣耀IOS付费转安卓
- 苹果手机无法下载app是什么原因
- ios查看已连接wifi密码
- 显示桌面图标不见了如何恢复
- 如何隐藏任务栏图标
- 桌面上的图标删不掉
- 关闭手机qq图标
- ios最新版本是多少
- 苹果手机怎么隐藏app
- 车仪表盘上的每个图标什么意思
- win10桌面图标大小
- 王者荣耀安卓转ios
- 苹果app无法更新
- 电脑右下角的图标都不见了怎么办
- 隐藏任务栏图标
- ipad会议记录app
- 免费会议记录app排行
- 会议记录神器app
- 电脑wifi图标不见了
- 华为怎么隐藏桌面图标
- 6s有充电图标却充不进
- 怎样修改手机桌面图标
- 电脑桌面的图标怎么调大小
- 笔记本右下角的无线图标不见了
- app更新软件id账号不是我的
- 华为手机桌面图标怎么设置
- 知识改变命运下一句
- win10电脑电量图标不见了
- 华为找回删除的APP
- ios描述文件无法删除
- 苹果组装机是ios系统吗
- ios屏蔽更新描述文件
- ipad一直显示苹果图标
- 笔记本wifi图标不见了
- 电脑上的图标不见了怎么办
- 华为右上角图标大全
- 笔记本电脑没有wifi图标
- pp助手ios安装
- oppo手机右上角图标大全
- win10任务栏图标隐藏
- 王者荣耀ios转安卓
- win10右下角网络图标不见了
- 什么软件可以隐藏桌面图标
- 如何隐藏任务栏正在游戏的图标
- 怎么隐藏任务栏图标
- 王者荣耀ios转安卓申请
- 用什么app做会议记录
- 张大千擅长:下列哪一位著名画家擅长画虎A、张
- 中通400客服电话
- 怎么换身份证上的照片
- 专硕和学硕代码
- 中国法律还有死刑吗
- 在六点半用英语怎么说
- 主任医师是什么级别
- 知困下一句:人心齐泰山移人心散请问下一句是什么
- 怎么缩小电脑桌面图标
- 专业技术岗位:事业单位管理岗位如何转专业技术岗位
- 天龙八部中逍遥派
- 苹果平板忘记id及密码怎么办
- 可可以加什么偏旁
- 什么夺目成语四字词语
- 蛋挞底皮酥脆的诀窍
- 中国联通电话号码客服电话是
- 星星还是那颗星星歌曲
- 顺丰有单号查不到物流
- iphone设置短信中心号码失败
- oppo自动开关机在哪里设置
- 灭楚之战有多惨
- 迂回什么折成语
- 案件到法院多久能开庭
- 武汉人流俱佳都巿
- 春雨绵绵的意思
- b的大写字母怎么写
- 物什么什么什么成语
- 现任国家副主席都有谁
- 打印表格怎么铺满a4纸
- 一什么玻璃填量词