Xcode 14中setAlternateIconName()无法更换应用图标求助
问题详情
此前在多个项目中稳定运行的应用内图标切换功能,昨日突然失效。使用的核心代码为:UIApplication.shared.setAlternateIconName("AppIcon-1")
Info.plist已配置备用图标相关项,Assets目录中包含主图标AppIcon及两个备用图标AppIcon-1、AppIcon-2。触发切换时,控制台输出以下错误日志:
[default] +[LSApplicationProxy applicationProxyFor*] 不是获取当前进程LSApplicationProxy的支持方法,请改用 +[LSBundleProxy bundleProxyForCurrentProcess]。
[default] LaunchServices: store (null) 或 url (null) 为空:Error Domain=NSOSStatusErrorDomain Code=-54 "进程无法映射数据库" UserInfo={NSDebugDescription=进程无法映射数据库, _LSLine=264, _LSFunction=-[_LSDReadClient getServerStoreWithCompletionHandler:]}
[default] 数据库映射尝试失败:权限被拒绝。该尝试不会重试。
[db] 初始化客户端上下文失败,错误信息:Error Domain=NSOSStatusErrorDomain Code=-54 "进程无法映射数据库" UserInfo={NSDebugDescription=进程无法映射数据库, _LSLine=264, _LSFunction=-[_LSDReadClient getServerStoreWithCompletionHandler:]}
可行排查与修复步骤
- 适配Xcode/iOS版本:该错误多与LaunchServices的API兼容性有关,若近期更新过Xcode或iOS系统,需确保两者版本匹配,避免旧API触发权限限制。
- 清理缓存:
- 关闭Xcode,删除Derived Data缓存
- 重启测试设备,清除系统LaunchServices缓存
- 重新构建并运行项目
- 校验Info.plist配置:确认
CFBundleAlternateIcons下的每个备用图标名称与Assets中的完全一致,CFBundlePrimaryIcon正确指向主图标AppIcon,配置项无语法错误。 - 检查签名与权限:确保开发证书未过期,测试设备UDID已在开发者账号中注册,App签名配置无误。
- 添加错误回调:通过回调获取更精准的失败信息,辅助定位问题:
UIApplication.shared.setAlternateIconName("AppIcon-1") { error in guard let error = error else { print("图标切换成功") return } print("图标切换失败:\(error.localizedDescription)") }
内容的提问来源于stack exchange,提问作者Alex Metelkin

