如何解决iOS 14小组件名称(CFBundleDisplayName)本地化失效问题
iOS 14 小组件名称本地化解决方案
嘿,我太懂这种旧方法突然失效的郁闷了!iOS 14 推出的 WidgetKit 和之前 iOS 8 的 Today 小组件机制完全不一样,所以你用主 App 的 InfoPlist.strings 设置 CFBundleDisplayName 自然就不生效了。下面给你两种靠谱的解决方法,亲测有效:
方法一:通过小组件 Target 的本地化配置文件设置
- 首先确保你选中的是小组件的 Target,而非主 App 的 Target
- 给小组件 Target 添加对应语言的
InfoPlist.strings文件(如果还没添加的话) - 在这个
InfoPlist.strings里添加:"CFBundleDisplayName" = "你的小组件本地化名称"; - 关键检查:在 Xcode 的「Project -> Info -> Localizations」里,确认小组件 Target 已经勾选了你需要的语言,不然本地化文件不会生效
方法二:通过 WidgetKit 代码动态设置(更灵活)
如果你的小组件是用 WidgetKit 开发的,推荐直接在代码里配置本地化名称,这种方式更可控:
- 先在小组件 Target 的
Localizable.strings文件(对应语言版本)里添加本地化字符串:"widget_display_name" = "我的专属小组件"; - 在你的 Widget 结构体的
body里,用NSLocalizedString来设置configurationDisplayName:struct MyWidget: Widget { let kind: String = "MyWidget" var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: Provider()) { entry in MyWidgetEntryView(entry: entry) } .configurationDisplayName(NSLocalizedString("widget_display_name", comment: "小组件显示名称")) .description("这里可以写小组件的描述文本,同样支持本地化") } }
避坑小贴士
- 做完配置后如果还是没生效,记得先 clean 项目的 Build Folder(快捷键 Cmd+Shift+K),然后重新安装 App 和添加小组件,Xcode 的缓存有时候会捣乱
- 不要混淆主 App 和小组件的 Target 配置,所有和小组件相关的本地化设置都必须针对小组件 Target 来操作
内容的提问来源于stack exchange,提问作者coolcool1994
相关产品推荐
相关产品推荐

