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


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

  • Code
  • iOS

tags:
- AppIcon


效果

Swift-动态修改AppIcon图标、更改应用图标_第1张图片
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 里面的名字统一
这些图片项目中必须要有

CFBundleAlternateIcons
        
            Icon-60
            
                CFBundleIconFiles
                
                    Icon-60
                
            
            Icon2
            
                CFBundleIconFiles
                
                    Icon2
                
            
            Icon1
            
                CFBundleIconFiles
                
                    Icon1
                
            
        

配置完成 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 中是暂时不知道怎么处理,怀疑是苹果大爷不想让偷偷的改应用图标

最后

项目地址

希望知道的可以交流交流

你可能感兴趣的:(Swift-动态修改AppIcon图标、更改应用图标)