Работа с Xcode 8.3.2
Вдохновленный ответом @LeeH от 2013 года, я предложил два решения для перестройки Info.plist.
Решение 1: Большинствопростой и элегантный
Самое простое решение - заставить XCode читать ваши пользовательские переменные путем касания ваших целей Info.plist
.
Добавление фазы сборки, см. скриншот ниже(изначально снимок экрана для Solution 2 ), и просто добавьте эту строку:
touch $INFOPLIST_FILE
Вот и все!Теперь XCode должен принудительно перезагрузить ваши пользовательские переменные в файл Info.plist
.
Это решение аналогично предложенному @lukelutman, но с использованием фазы сборки.Сценарий предварительного действия у меня не работал.
Решение 2. Более сложное и хакерское
Другое решение заключается в удалении кэшированного Info.plist
вbuild dir .
Я написал этот супер простой маленький bash-скрипт
#!/bin/bash
info_plist="$CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.app/Info.plist"
echo "Removing Info.plist from build dir in order to force rebuild of it and reading of correct xcconfig variables, plist path $info_plist"
rm "$info_plist"
Затем я сохранил его и вызвал его из фаз сборки для цели.Я поставил его как первый этап сборки.
Справочная информация:
У меня есть три различные конфигурации: Config
, Alpha
, AppStore
и я использую Universal Links, Push-уведомления и другие материалы, которые требуют использования файла Entitlements.Но я не хотел иметь три файла прав, по одному на каждую конфигурацию.
Мой проект уже сильно зависит от файлов конфигурации (.xcconfig
).Я на самом деле настроил файл Entitlement (MyAppsProductName.entitlements
) с помощью пользовательских переменных конфигурации.
Но я хотел прочитать те же переменные времени выполнения переменных конфигурации, я решил, что смогу это сделать, если они будут добавлены в мои целевые объекты Info.plist.Это сработало!
Но я заметил, что когда я изменил значения в моем файле .xcconfig
, то файл Info.plist
не изменил значения.Я заметил, что если я выполнил чистую сборку, то значения в Info.plist
получили обновления в соответствии со значениями в файле .xcconfig
.Xcode действительно кэширует файл Info.plist
.
Так что эти решения выше решают эту проблему.Надеюсь, поможет!:)
Обсуждение
Понятия не имею, если Решение 2 имеет какое-либо преимущество перед Решение 1 ... Возможно, нет?Любой вход кто-нибудь?