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来实现这一目标.
任何人都知道如何完成本地化和基于配置的应用程序名称?
CFBundleDisplayName's值设置为一个名为的变量$(MY_DISPLAY_NAME)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文件.
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |