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

如何在InfoPlist.strings中读取XCConfig配置的PRODUCT_NAME变量

InfoPlist.strings 中 $(PRODUCT_NAME) 变量不生效解决方案

默认Xcode不会自动解析InfoPlist.strings文件内的构建变量占位符,只有Info.plist本身的变量默认会被编译展开,多构建目标场景下由于各目标的PRODUCT_NAME定义在独立XCConfig中,更难直接被strings文件读取,可通过以下三种方案解决:

  • 方案1:开启Info.plist变量展开编译选项
    打开项目构建设置,搜索Other Info.plist Preprocessor Flags,添加参数-traditional;再搜索Expand Build Settings in Info.plist Files,确保所有构建目标的该选项都设置为YES。配置完成后Xcode编译时会自动把InfoPlist.strings里的$(PRODUCT_NAME)替换为当前构建目标对应的值。
    注意:如果strings文件包含中文或特殊字符,添加-traditional参数后要确保所有strings文件的编码统一为UTF-16,避免编译报错
    对应权限文案的中文翻译可写为:

    NSCameraUsageDescription = "$(PRODUCT_NAME)需要使用相机来拍摄照片";
    
  • 方案2:按构建目标拆分InfoPlist.strings副本
    为每个构建目标单独创建对应语言的InfoPlist.strings文件,在每个文件中直接写死对应目标的应用名,不需要使用变量。比如development目标的对应strings文件里直接写NSCameraUsageDescription = "开发版应用需要使用相机来拍摄照片";,AdHoc版本写测试版相关文案,production写正式版文案。该方式无需修改编译参数,稳定性更高,适合多目标差异文案较多的场景。

  • 方案3:自定义编译脚本替换变量
    在Xcode构建阶段新增一个Run Script阶段,放在Copy Bundle Resources之前,脚本读取当前构建目标的PRODUCT_NAME环境变量,遍历所有InfoPlist.strings文件,将占位符批量替换为实际应用名。参考脚本示例:

    PRODUCT_NAME_VALUE="${PRODUCT_NAME}"
    find "${SRCROOT}" -name "InfoPlist.strings" -exec sed -i '' "s/\$(PRODUCT_NAME)/${PRODUCT_NAME_VALUE}/g" {} \;
    

    注意:如果是CI/CD环境或使用非macOS设备编译,需要调整sed命令的参数适配对应系统

内容的提问来源于stack exchange,提问作者Chirag Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:36:03