Swift-动态修改AppIcon图标、更改应用图标


title: Swift-动态修改AppIcon图标、更改应用图标
date: 2017-05-09 15:33:37
categories:

  • Code
  • iOS

tags:
- AppIcon


效果

changeAppIcon.gif

动态更换 App 图标,从 ios 10.3开始,系统已经支持开发者自己实现api来更改应用图标。Demo

新的api

系统api更换图标只有三个方法:


extension UIApplication {

    // If false, alternate icons are not supported for the current process.
    @available(iOS 10.3, *)
    open var supportsAlternateIcons: Bool { get }

    
    // Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
    @available(iOS 10.3, *)
    open func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Swift.Void)? = nil)

    
    // If `nil`, the primary application icon is being used.
    @available(iOS 10.3, *)
    open var alternateIconName: String? { get }
}

配置 Info.plist

[图片上传失败...(image-530ac6-1515481579953)]

在 CFBundlePrimaryIcon 上面 添加以下代码

说明:Icon-60、Icon1、Icon2 是图片名,要和CFBundleIconFiles 里面的名字统一
这些图片项目中必须要有

<key>CFBundleAlternateIcons</key>
        <dict>
            <key>Icon-60</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>Icon-60</string>
                </array>
            </dict>
            <key>Icon2</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>Icon2</string>
                </array>
            </dict>
            <key>Icon1</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>Icon1</string>
                </array>
            </dict>
        </dict>

配置完成 Info.plist ,下面是代码部分

就是利用上面的Api,判断是否支持更换图片(10.3及以上支持)


        let app = UIApplication.shared
        if app.supportsAlternateIcons {
            app.setAlternateIconName(icon, completionHandler: { (error) in
                if error != nil {
                    print("error => \(String(describing: error?.localizedDescription))")
                }else {
                    print("Done")
                }
            })
        }

可优化

弹框不太爽,要想在后台根据不同场景改变图标,弹框太烦。

解决方法:OC : 可以使用运行时修改方法处理
Swift 中是暂时不知道怎么处理,怀疑是苹果大爷不想让偷偷的改应用图标

最后

项目地址

希望知道的可以交流交流

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,238评论 4 61
  • 书中:如果说在零度格局下,盲众看到的是幻象和噪声;一度格局下,逐利者看到的是自己的能力和欲望,那么理念人看到的是这...
    悦_文阅读 1,527评论 0 0
  • 忽如一夜冬风来,千万秋冬裤穿起来。最近几日,温度普降,我国南北方都受低气温影响,阴雨绵绵。在这种天气下,却是吃火锅...
    47b73d055dc7阅读 1,755评论 0 0
  • 学日语的这个想法早在我学生时代就曾有过,记得那会儿学校有好几个系的同学想着搞兴趣组群,其中就有日语兴趣小组。我...
    皆样阅读 2,778评论 2 0
  • 文/抱抱 岁月在不经意间从身边划过,在每一个匆忙的身影背后,他们熟悉的话语渐渐淡忘,在你身心疲惫的时候,他们总是你...
    独立行走的刺猬阅读 3,165评论 2 3