使用Xcode 15 String Catalogs结合UIKit遇警告及键写法疑问
问题解答
1. 警告String ‘login.cool‘ was ignored because it is not managed manually (nil)的含义
这个警告是Xcode String Catalogs的自动收集机制和手动操作冲突导致的:
- 你通过
NSLocalizedString编写的字符串键,Xcode会自动扫描代码并将其添加到xcstrings文件中,这类条目默认处于自动管理状态,Xcode会同步代码里的键变化。 - 当你手动给这个自动生成的条目添加翻译后,Xcode会将其标记为需要手动管理,但自动扫描机制仍在尝试处理该条目,于是触发此警告——意思是「该字符串已设为手动管理,自动收集机制将忽略它」。
解决办法:
打开xcstrings文件,选中对应条目,在右侧检查器中找到「Management」选项,切换为「Manual」,自动扫描就不会再处理该条目,警告随之消失。
2. 能不能像SwiftGen那样用Strings.login.cool的类型安全方式调用?
iOS 14不支持String(localized:)新API,但依然可以实现类型安全调用,无需手写字符串键:
方法一:手动/自动生成枚举
Xcode构建项目时,会将xcstrings文件转换为传统的.strings文件。你可以基于该文件编写枚举:
enum Strings { enum Login { static let cool = NSLocalizedString("login.cool", comment: "登录相关文案") } } // 调用示例: label.text = Strings.Login.cool
嫌手动编写麻烦的话,可以写个简单脚本(比如Python)解析xcstrings的JSON结构,自动生成枚举代码,每次修改xcstrings后运行脚本即可,流程和SwiftGen类似。
方法二:使用Sourcery等代码生成工具
Sourcery支持自定义模板,你可以编写模板读取xcstrings内容,自动生成类型安全的访问代码,完全替代SwiftGen的功能,同时兼容iOS 14。
总之,无需每次手动输入字符串键,只要搭建一套简单的代码生成流程即可实现类似SwiftGen的体验。
内容的提问来源于stack exchange,提问作者Danylo Kurylo
相关产品推荐
相关产品推荐

