我们为每个配置使用具有不同 plist 的设置。像这样:目标-Info-Dev.plist、目标-Info-Beta.plist...
这样我们的配置就可以拥有自己的 CFBundleDisplayName,并且我们可以通过设备上的应用程序名称来区分构建。像这样:“DEV 应用程序名称”、“BETA 应用程序名称”...
但是,现在我们需要本地化应用程序名称。我们通过为每个目标创建本地化的 InfoPlist.strings 来完成此操作:
"CFBundleDisplayName" = "<localized-appname>";
"CFBundleName" = "<localized-appname>";
但由于 CFBundleDisplayName 不再派生自目标信息-[配置].plist,我们无法区分不同配置的应用程序名称。
需要注意的是,我们有几个Targets同样,对于同一应用程序的不同品牌,但我们已经通过为每个目标提供单独的 InfoPlist.strings 来实现这一点。
有人知道如何完成本地化和基于配置的应用程序名称吗?
更好的解决方案
- Edit 信息表, set
CFBundleDisplayName
的值到一个名为类似的变量$(MY_DISPLAY_NAME)
- Open “构建设置”的选项卡project or target,添加一个名为
MY_DISPLAY_NAME
under 用户自定义部分(您需要滚动到底部才能找到此部分),然后只需展开新添加的键,并根据需要为每个配置设置任何名称。
构建项目时,Info.plist 中的每个变量都将替换为其值。
该解决方案比原来的解决方案简单得多。
原创解决方案
我的项目中也有同样的需求,然后找到了你的问题,最后解决了。编辑您的项目方案,添加操作前和操作后脚本来执行您的更改。像这样,
步骤 1. 在 Build 的 Pre-actions 中更改应用程序名称
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
步骤 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
需要解释一下: Debug/AdhocDevelopment/AdhocDistribution/DailyBuild 是您项目的配置名称; ${CONFIGURATION} 由 Xcode 预定义; perl 优于 awk 和 sed,它们都预装在每个 mac OS X 上。
顺便说一下,我所做的是更改Info.plist中的appName,您可以更改infoPlist.strings。这样,您只需要一个 Info.plist 文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)