App更换图标

news/2024/7/20 20:19:28 标签: ios, objective-c, xcode

App更换图标

京东淘宝的每到618或者双十一的时候,app图标都会贴合相关主题更换一下,但是那个时间段app也没有升级,所以说肯定是有一个配置能够更改app的图标。

查了一些文档,发现了如下的方法。

准备图片

准备120x120和180x180两种尺寸的图。分别命名为icon@2x.png和icon@3x.png。

然后把图片放置到项目的一个目录下,注意不是放到 image assets里边

修改Info.plist

打开项目的Info.plist,在文件上右键,open as source code,添加如下代码

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>NewAppIcon</key> // 这个是函数需要用到的参数
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>icon</string> // 这个地方的icon就是文件名
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

添加修改图标函数

添加如下代码进行更新。

if UIApplication.shared.supportsAlternateIcons {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        UIApplication.shared.setAlternateIconName("NewAppIcon") { error in
            if let error = error {
                print(error.localizedDescription)
            } else {
                print("Success!")
            }
        }
    }
}

更新完成之后会发现弹出来了一个提示窗,这样体验就不太好了。因此需要稍微修改一下。
增加一下方法。

func setApplicationIconName(_ iconName: String?) {
    if UIApplication.shared.responds(to: #selector(getter: UIApplication.supportsAlternateIcons)) && UIApplication.shared.supportsAlternateIcons {
        
        typealias setAlternateIconName = @convention(c) (NSObject, Selector, NSString?, @escaping (NSError) -> ()) -> ()
        
        let selectorString = "_setAlternateIconName:completionHandler:"
        
        let selector = NSSelectorFromString(selectorString)
        let imp = UIApplication.shared.method(for: selector)
        let method = unsafeBitCast(imp, to: setAlternateIconName.self)
        method(UIApplication.shared, selector, iconName as NSString?, { _ in })
    }
}

之后调用的时候使用以上方法。

if UIApplication.shared.supportsAlternateIcons {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        self.setApplicationIconName(nil)
    }
}

这样就能默默的换icon了。


http://www.niftyadmin.cn/n/5312728.html

相关文章

【附源码】基于SSM+Java的题库管理系统的设计与实现

基于SSMJava的题库管理系统的设计与实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;We…

Ubuntu 18.04.5 LTS 解决安装包复杂依赖相关问题解决的主要法则和VIM的安装实录

前言&#xff1a;目标和环境 环境&#xff1a; Ubuntu 18.04.5 LTSVMware 目标&#xff1a; 安装vim&#xff0c;解决包依赖的冲突&#xff1a; 本文&#xff0c;通过一个很好的实例&#xff0c;诠释了&#xff0c;LINUX系统下&#xff0c;安装一个应用遇到的依赖库问题如何…

大数据深度学习长短时记忆网络(LSTM):从理论到PyTorch实战演示

文章目录 大数据深度学习长短时记忆网络&#xff08;LSTM&#xff09;&#xff1a;从理论到PyTorch实战演示1. LSTM的背景人工神经网络的进化循环神经网络&#xff08;RNN&#xff09;的局限性LSTM的提出背景 2. LSTM的基础理论2.1 LSTM的数学原理遗忘门&#xff08;Forget Gat…

Golang学习之路一六运算符

Golang学习之路一六运算符 算数运算符 符号说明相加-相减*相乘/相除%求余自增–自减 package mainimport "fmt"func main() {a : 10b : 6// fmt.Println(ab)// -fmt.Println(a-b)// *fmt.Println(a*b)// /fmt.Println(a/b)// %fmt.Println(a%b)// fmt.Println(a)a…

0_项目git地址——正点原子minifly与crazyflie

1、说明&#xff1a; 在每个专栏的第一篇文章&#xff0c;笔者都会贴出项目的git地址&#xff0c;方便后来者学习和复现&#xff1b; 下面介绍两个项目的官网资料和git地址&#xff0c;最后给出两者的对比&#xff1b; 2、正点原子minifly (1)minifly官网资料下载中心&#…

大创项目推荐 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

“单项突出”的赢双科技IPO加速,比亚迪是最强助力?

近日&#xff0c;新能源汽车核心部件供应商赢双科技首次递表科创板&#xff0c;其凭借旋转变压器产品就坐稳了新能源车企主要供应商的地位&#xff0c;从核心业务及业绩情况来看&#xff0c;赢双科技不愧为“单项冠军”。 据悉&#xff0c;赢双科技本次IPO拟募资8.47亿元&…

tensorflow环境安装配置

下载匹配cuda的kaldi镜像 Ubuntu 20.04 including Python 3.8 NVIDIA CUDA 11.6.0 cuBLAS 11.8.1.74 NVIDIA cuDNN 8.3.2.44 NVIDIA NCCL 2.11.4 (optimized for NVLink™) rdma-core 36.0 NVIDIA HPC-X 2.10 OpenMPI 4.1.2rc4 OpenUCX 1.12.0 GDRCopy 2.3 Nsight Systems 202…