谢谢。
我正在使用:
界面构建器:Storyboard 语言:Swift macOS: 12 Xcode 版本:13.1
步骤1:
设计您的替代应用图标并以两种尺寸导出它们:120px(60px @2x)和180px(60px @3x)。将这些图标添加到一个名为"App Icons"的新目录下,并注意,备用图标文件必须位于项目目录中,而不是Assets目录中。
步骤2:在Info.plist文件中注册您的新图标
首先,添加一个新的CFBundleIcons条目(Icon files (iOS 5)),然后再添加另一个条目CFBundleAlternateIcons。
在Info.plist中添加CFBundleAlternateIcons条目 对于每个备用图标,在infos.plist文件中添加一个新条目,在CFBundleAlternateIcons下。 条目的名称是稍后在Xcode项目中使用的图标名称,项目中添加的图标文件的字符串值是该项的名称。
在Info.plist中添加应用图标条目 一旦您在Info.plist中添加了所有图标,备用图标就可以在您的应用程序中使用了。
步骤3:应用图标管理器
切换应用程序图标的Apple API非常简单,由三个变量/函数组成:
var supportsAlternateIcons: Bool { get }
open func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? = nil)
open var alternateIconName: String? { get }
根据苹果文档,当系统允许您更改应用程序的图标时,supportsAlternateIcons将为true;否则为false。使用setAlternateIconName方法将应用程序图标更改为其主要图标或其中一个备用图标。如果alternateIconName为nil,则将使用默认应用程序图标。最后,alternateIconName返回当前使用的备用图标的名称,如果使用默认图标,则返回nil。为了轻松处理图标更改,我们将创建一个图标管理器来与苹果API进行交互。首先,创建一个包含每个备用应用程序图标的枚举。enum BMAppIcon: CaseIterable {
case classic,
cookie,
donut,
cake,
iceCream
}
现在,让我们在枚举中添加每个图标的文件名和一个将在我们的应用程序UI中显示的预览图标。 在我们的枚举中,经典是默认的应用程序图标。这就是为什么它的文件名将是nil的原因。有关为什么文件名为nil的更多信息,请查看苹果文档上的alternateIconName说明。
var name: String? {
switch self {
case .classic:
return nil
case .cookie:
return "cookieIcon"
case .donut:
return "donutIcon"
case .cake:
return "cakeIcon"
case .iceCream:
return "iceCreamIcon"
}
}
var preview: UIImage {
switch self {
case .classic:
return #imageLiteral(resourceName: "cake@2x.png")
case .cookie:
return #imageLiteral(resourceName: "cookie@2x.png")
case.donut:
return #imageLiteral(resourceName: "donut@2x.png")
case .cake:
return #imageLiteral(resourceName: "cake@2x.png")
case .iceCream:
return #imageLiteral(resourceName: "iceCream@2x.png")
}
}
现在我们已经有了枚举,让我们创建一个AppIconManger类,其中包含两个函数:一个用于检索当前应用程序图标,另一个用于更新应用程序图标。
var current: BMAppIcon {
return BMAppIcon.allCases.first(where: {
$0.name == UIApplication.shared.alternateIconName
}) ?? .classic
}
func setIcon(_ appIcon: BMAppIcon, completion: ((Bool) -> Void)? = nil) {
guard current != appIcon,
UIApplication.shared.supportsAlternateIcons
else { return }
UIApplication.shared.setAlternateIconName(appIcon.name) { error in
if let error = error {
print("Error setting alternate icon \(appIcon.name ?? ""): \(error.localizedDescription)")
}
completion?(error != nil)
}
}
步骤四:在你的应用程序中使用应用图标管理器
最后一步,要更新当前的应用程序图标,只需调用之前定义的 setIcon 函数,并将您希望设置为参数的新图标传递进去。
有一种更简单的方法来更改应用程序图标
现在,您可以使用setAlternateIconName方法更改应用程序图标。例如:
UIApplication.shared.setAlternateIconName("AppIcon-2") { error in
if let error = error {
print(error.localizedDescription)
} else {
print("Success!")
}
}