仅Xcode 16 Beta 5可用时,WhatsApp等应用如何发布深色模式图标版本?
实现iOS深色模式应用图标的非Beta方案
你看到的WhatsApp等应用的深色模式图标,并没有使用iOS 18/Xcode 16 Beta的新特性——它们用的是iOS 13起就支持的官方兼容方案,完全可以用正式版Xcode(比如Xcode 15)打包上架,具体实现有两种方式:
方式一:通过Info.plist配置自动切换(推荐)
这是系统原生支持的自动切换方案,无需额外代码,步骤如下:
- 在Asset Catalog中创建两个App Icon Set:
- 常规模式图标:保持默认命名(比如
AppIcon) - 深色模式图标:命名为
AppIcon-Dark(或其他自定义名称)
- 常规模式图标:保持默认命名(比如
- 在
Info.plist中添加如下配置,让系统根据外观模式自动加载对应图标:
配置完成后,系统会在用户切换深色/浅色模式时自动替换应用图标,全程无需代码干预。<key>CFBundleIcons</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon</string> </array> </dict> <!-- 深色模式下的图标配置 --> <key>CFBundleIcons~dark</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon-Dark</string> </array> </dict> </dict> </dict>
方式二:通过代码手动切换
如果需要更灵活的控制(比如根据特定条件切换图标),可以监听系统外观变化,调用官方API切换:
- 先在Asset Catalog中创建备用图标集,并在
Info.plist的CFBundleAlternateIcons中注册(参考方式一中的CFBundleAlternateIcons配置逻辑) - 监听系统外观变化,在回调中触发图标切换:
override func viewDidLoad() { super.viewDidLoad() // 监听外观变化通知 NotificationCenter.default.addObserver(self, selector: #selector(handleAppearanceChange), name: UIColor.systemAppearanceDidChangeNotification, object: nil) } @objc private func handleAppearanceChange() { let isDarkMode = UITraitCollection.current.userInterfaceStyle == .dark // 根据模式切换图标 UIApplication.shared.setAlternateIconName(isDarkMode ? "DarkModeIcon" : nil) { error in if let error = error { print("图标切换失败:\(error.localizedDescription)") } } }
iOS 18的新特性只是简化了Asset Catalog的配置流程(直接在同一个App Icon Set中添加深色变体),但上述两种方案都是iOS 13+的正式特性,完全符合App Store上架要求,不需要依赖Xcode 16 Beta版本。
内容的提问来源于stack exchange,提问作者Adarsh
相关产品推荐
相关产品推荐

