You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:20:21