之前在2022年写过如何更换图标,时过境迁,现在更换图标早已经没有当年那么麻烦了。不过还是看到有开发者在用非常老旧的添加方式(比如之前的我),所以重新新开一个教程来教大家新项目如何更换应用图标功能的开发。

核心就是使用setAlternateIconName

文档

创建app图标

我们在资源库中添加app图标

添加图标

图片根据要求都是1024x1024

将图标添加到项目

进入项目管理,找到iOS的target,在buildsetting中搜索:app icon

找到项目

Include All App Icon Assets设置成yes。

编辑Alternate App Icon Sets,将所有图标添加进来。

添加图标

添加图标

我先来个demo

我先做一个展示图标的界面。

首先我写了一个枚举,列出了所有包含的图标,然后在swiftui中遍历图标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
enum AppCustomIcon: String {
case blue = "AppIcon"
case purple = "紫色鲸鱼"
case orange = "橙色鲸鱼"

static var allValues: [AppCustomIcon] {
return [.blue, .purple, .orange]
}
}

struct ContentView: View {
var body: some View {
List {
ForEach(AppCustomIcon.allValues, id:\.self) { icon in
HStack {
Image(uiImage: UIImage(named: icon.rawValue) ?? UIImage())
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 44,height: 44)
.cornerRadius(12)
Text(icon.rawValue)
}
}
}
.scrollTargetBehavior(.paging)
}

}

图标列表

添加点击事件

我们需要点击之后设置图标。这里就用到我们开头说的api了。根据文档所述,设置成默认图标需要参数为nil。

1
2
3
func setUserCustomIcon(name: AppCustomIcon) {
UIApplication.shared.setAlternateIconName(name == .blue ? nil : name.rawValue)
}

最终我们的代码为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
enum AppCustomIcon: String {
case blue = "AppIcon"
case purple = "紫色鲸鱼"
case orange = "橙色鲸鱼"

static var allValues: [AppCustomIcon] {
return [.blue, .purple, .orange]
}
}

struct ContentView: View {
var body: some View {
List {
ForEach(AppCustomIcon.allValues, id:\.self) { icon in
HStack {
Image(uiImage: UIImage(named: icon.rawValue) ?? UIImage())
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 44,height: 44)
.cornerRadius(12)
Text(icon.rawValue)
}
.onTapGesture {
setUserCustomIcon(name: icon)
}
}
}
.scrollTargetBehavior(.paging)
}

func setUserCustomIcon(name: AppCustomIcon) {
UIApplication.shared.setAlternateIconName(name == .blue ? nil : name.rawValue)
}

}

结果

参考

setAlternateIconName(_:completionHandler:)