自己实现需要注意两个问题:
首先来设置 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纸
 - 一什么玻璃填量词