当app-name在InfoPlist.strings中本地化时,不同的app-name取决于配置

ein*_*not 9 configuration localization ios info-plist cfbundledisplayname

我们为每个配置使用具有不同plist的设置.像这样: Target-Info-Dev.plist,Target-Info-Beta.plist ......

这样我们的配置可以拥有自己的CFBundleDisplayName,我们可以通过设备上的app-name来区分构建.像这样:"DEV Appname","BETA Appname"......

但是,现在我们需要本地化app-name.我们通过为每个目标创建本地化的InfoPlist.strings来完成此操作:

"CFBundleDisplayName" = "<localized-appname>";
"CFBundleName" = "<localized-appname>";
Run Code Online (Sandbox Code Playgroud)

但由于CFBundleDisplayName不再从Target-Info- [Configuration] .plist派生,我们无法区分不同配置的app-name.

应该注意的是,对于同一个应用程序的不同品牌,我们也有几个目标,但我们已经通过为每个目标创建单独的InfoPlist.strings来实现这一目标.

任何人都知道如何完成本地化和基于配置的应用程序名称?

Daw*_*ong 7

改善方案

  1. 编辑Info.plist,将CFBundleDisplayName's值设置为一个名为的变量$(MY_DISPLAY_NAME)

在此输入图像描述

  1. 打开"构建设置"的选项卡项目目标,添加一个名为关键MY_DISPLAY_NAME用户定义的部分(您需要滚动到页面底部找到本节),然后就展开新添加的关键,并为每个配置设置的任何名称如你所愿.

在此输入图像描述

构建项目时,Info.plist中的每个变量都将替换为其值.

解决方案比原始解决方案简单得多.

原始方案

我在项目中有同样的要求,然后我找到了你的问题,最后我解决了它. 编辑项目计划,添加预执行和动作后脚本以执行更改.像这样,

步骤1.在Build的预操作中更改应用程序名称

str=""
if [ "${CONFIGURATION}" == "Debug" ];then
    str="dev"
elif [ "${CONFIGURATION}" == "AdhocDevelopment" ];then
    str="dev"
elif [ "${CONFIGURATION}" == "AdhocDistribution" ];then
    str="adhoc"
elif [ "${CONFIGURATION}" == "DailyBuild" ];then
    str="rdm"
fi
perl -pi -e "s/appName[^<]*/appName${str}/g" ${PROJECT_DIR}/smd/Info.plist
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

步骤2.在Build的Post-actions中恢复应用名称

perl -pi -e "s/appName[^<]*/appName/g" ${PROJECT_DIR}/smd/Info.plist
echo ${PROJECT_DIR}/${INFOPLIST_FILE} > ~/tmp.txt; rm -f ~/tmp.txt
Run Code Online (Sandbox Code Playgroud)

需要解释的一点:Debug/AdhocDevelopment/AdhocDistribution/DailyBuild是项目的配置名称; $ {CONFIGURATION}由Xcode预定义; perl比awk和sed更好,它们都预先安装在每个mac OS X上.

顺便说一句,我所做的是改变Info.plist中的appName,你可以改变你的infoPlist.strings.这样,您只需要一个Info.plist文件.

  • 如何本地化 MY_DISPLAY_NAME? (3认同)