Определение пакета настроек на основе конфигурации сборки

Я определил свой Root.plist в пакете настроек, который отображается в настройках устройства. Теперь я хочу, чтобы он отображал различные параметры в зависимости от типа среды, в которой я строю проект.

Я определил схемы TEST и PROD (разные конфигурации сборки) в XCode, и я хочу, чтобы Root.plist определялся по-разному для этой конфигурации сборки. Как это может быть сделано?

Можем ли мы определить 2 списка и связать их с разными конфигурациями сборки, или мы можем изменить root.plist во время компиляции в зависимости от выбранной конфигурации сборки или схемы.

Пожалуйста, порекомендуйте.


person Abhinav    schedule 06.07.2012    source источник


Ответы (5)


Я решил это так:

1) Добавьте 2 пакета настроек (один для тестирования и один для продукта) в проект и добавьте их в цель.

2) Добавьте сценарий выполнения в целевой объект Runner, чтобы выборочно скопировать требуемый пакет настроек в файл сборки.

if [IS_PRODUCTION]; then
cp -r ${PROJECT_DIR}/Settings/Prod/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
fi

if [IS_TEST]; then
cp -r ${PROJECT_DIR}/Settings/Test/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
fi

3) После этого просто запустите разные схемы, чтобы увидеть желаемые результаты.

person Abhinav    schedule 06.07.2012
comment
Все другие решения в сети, похоже, указывают на то, что создание нескольких целей - лучший способ. Но это казалось полным излишеством того, что я хотел. Ваше решение сработало отлично, спасибо. - person Tiddly; 25.02.2016

Я делаю что-то похожее на @Abhinav, но вместо использования сценария запуска я просто использую раздел Target Membership в инспекторе файлов, чтобы определить, какая цель использует какой Settings.bundle.

Целевое членство в пакете настроек

person Greg    schedule 21.12.2012

Я использовал подход @abhinav, но немного изменил его, чтобы он соответствовал потребностям моего проекта. У нас есть две цели, НО обе используются для создания отдельных приложений.

шаги

В файловой системе в каталоге проекта создайте структуру папок:

<project_folder>/Settings/debug
<project_folder>/Settings/production

В проекте создайте эти группы:

Settings
  debug
  production

Создайте Settings.bundle, добавьте его в группу отладки и сохраните в папку отладки. (не добавляйте его ни к какой цели)

Отредактируйте .plist так, чтобы страница настроек выглядела максимально широкой (обычно в отладочных сборках больше настроек).

Скопируйте пакет из папки отладки в производственную папку.

Добавьте Settings.bundle из производственной папки в производственную группу в проекте (не добавляйте его ни в какую цель), чтобы у вас была такая структура.

структура группы проекта

Убедитесь, что ни один из Settings.bundles не добавлен к любой цели.

Удалите из производственной среды элементы настроек .plist, которые не должны поставляться со сборками App Store.

Добавьте этап Выполнить скрипт после этапа Копирование ресурсов пакета.

if [ "${CONFIGURATION}" = "Release" ]; then
cp -r ${PROJECT_DIR}/Settings/production/Settings.bundle "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app"
fi

if [ "${CONFIGURATION}" = "Debug" ]; then
cp -r ${PROJECT_DIR}/Settings/debug/Settings.bundle "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app"
fi

Примечание. У меня есть две схемы сборки: Release и Debug. Я заключил пути в кавычки, потому что моя цель имеет имя с пробелами.

person Yevhen Dubinin    schedule 26.05.2016

Единственный способ условно связать элементы, такие как набор настроек, в разных сборках, - это дублировать вашу цель. Просто добавьте нужный пакет к нужной цели и сохраните весь код одинаковым. Это другое, но в долгосрочной перспективе это должно работать для вас намного лучше.

person CodaFi    schedule 06.07.2012

Простой подход был бы,

1 - Создайте другую цель с копией существующей цели, 2 - В фазе сборки новой цели elif [$ {CONFIGURATION} == "Release"]; затем cp -r $ {PROJECT_DIR} /Settings/ReleaseHHAppStore/Settings.bundle $ {BUILT_PRODUCTS_DIR} / $ {PRODUCT_NAME} .app fi

это позволит вам сделать еще несколько настраиваемых параметров, если потребуется

person Amitg2k12    schedule 03.08.2017