这篇文章介绍了如何在新项目中开发更换应用图标的功能。主要是利用苹果官方的函数setAlternateIconName实现应用图标更换。详细步骤为:创建所需图标资源;在项目target中的buildsetting里添加图标;接着编写具有图标列表的枚举和展示图标的界面;最后通过点击事件调用setAlternateIconName函数实现图标更换。整个过程详细且形象,方便开发者理解学习。
之前在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:)