多Xcode Scheme下如何对本地化InfoPlist.strings使用自定义构建设置
多Scheme场景下InfoPlist.strings动态配置本地化应用名方案
下面提供两种可直接落地的实现方式:
方案1:开启InfoPlist预处理(最贴近你预期的写法)
Xcode本身支持对Info.plist关联文件开启预处理,直接支持读取自定义构建设置变量,操作步骤如下:
- 打开项目的Build Settings,搜索
Preprocess Info.plist File,将该选项设置为YES - 继续搜索
Info.plist Other Preprocessor Flags,添加参数-traditional,避免预处理破坏字符串的双引号格式 - 在你现有的自定义构建设置中,和之前配置
APP_NAME一样,为每个Scheme对应的配置添加DE_APP_NAME的不同取值 - 修改德语版InfoPlist.strings的代码为:
"CFBundleDisplayName" = $(DE_APP_NAME);
编译时Xcode会自动把变量替换为当前Scheme对应的值,无需额外操作。
方案2:编译阶段脚本动态替换
如果不想开启预处理功能,可以用Run Script在编译时动态修改字符串内容:
- 打开Target的Build Phases tab,新建一个
Run Script阶段,拖动该阶段到Copy Bundle Resources之前执行 - 脚本内容填写:
# 读取自定义构建设置中的德语应用名 TARGET_DE_NAME="${DE_APP_NAME}" # 定位编译产物中的德语InfoPlist.strings路径 DE_STRINGS_PATH="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/de.lproj/InfoPlist.strings" # 替换CFBundleDisplayName取值 sed -i '' "s/\"CFBundleDisplayName\" = \"[^\"]*\";/\"CFBundleDisplayName\" = \"$TARGET_DE_NAME\";/g" "$DE_STRINGS_PATH"
- 同样提前为每个Scheme配置好
DE_APP_NAME的对应取值即可,编译时脚本会自动完成替换。
注意:两种方案都需要确保你自定义的DE_APP_NAME在Debug、Release等所有编译配置下都有对应取值,避免发布时出现变量未替换的问题。如果需要适配更多语言,按照相同逻辑添加对应语言的变量和配置即可。
内容的提问来源于stack exchange,提问作者Ethan Allen
相关产品推荐
相关产品推荐

