Локализация переменной Info.plist с добавленной строкой

Я пытаюсь локализовать имя приложения, но при этом могу добавить строку в зависимости от конфигурации сборки. Итак, в настоящее время он настроен как:

<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}${BUNDLE_DISPLAY_NAME_SUFFIX}</string>

Этот параметр определяется как:

Параметры сборки

Таким образом, мы можем добавить суффикс к приложению для наших различных бета-версий. Проблема в том, что когда мы пытаемся локализовать отображаемое имя приложения в локализованном InfoPlist.strings вот так

CFBundleDisplayName = "Localized App Name";

Мы перезаписываем значение, хранящееся в Info.plist, и теряем символ суффикса. Есть ли хороший способ обойти это? Мы хотели бы избежать нескольких файлов Info.plist.


person Mark Leonard    schedule 06.01.2015    source источник
comment
Как перезаписать значение, хранящееся в Info.plist? Вы делаете это вручную?   -  person Brain89    schedule 09.01.2015
comment
Не могу комментировать из-за отсутствия репутации, извините. Ответ @Romain правильный, но я потратил весь день, чтобы заставить его работать. Дело в том, что сценарий помещается ПОСЛЕ фазы компиляции исходных кодов и фазы копирования ресурсов пакета. Надеюсь, это поможет кому-то.   -  person drywet    schedule 14.01.2019


Ответы (1)


Для этого вам понадобится специальный скрипт. Вот один, который работает для меня

PREFIX_IDENTIFIER="=com.mycompany.bundlenameprefix="
PREFIX=""

if [ $CONFIGURATION == "Debug" ]
then
    PREFIX="α "
fi

if [ $CONFIGURATION == "Enterprise" ]
then
    PREFIX="β "
fi

for i in `dirname "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"`/*.lproj/InfoPlist.strings
do
    plutil -convert json "$i"
    sed -i -e "s/${PREFIX_IDENTIFIER}/${PREFIX}/g" "$i"
    plutil -convert binary1 "$i"
done

Затем в ваших InfoPlist.strings добавьте префикс к имени пакета, например так

CFBundleDisplayName = "=com.mycompany.bundlenameprefix=My App";
person Dustin    schedule 11.01.2015
comment
Отличный ответ. Примечание для тех, кто устраняет неполадки: если в вашем целевом каталоге сборки есть пробелы, вам необходимо заключить вывод dirname в кавычки. - person Tyler V; 30.01.2021