Условно создайте приложение с различными каталогами активов
Мой проект XCode настроен таким образом, что он имеет несколько конфигураций, что позволяет мне использовать одну и ту же базу кода для различных вариантов моего приложения, но имеет уникальные элементы в каждом, такие как имя приложения, версия, идентификатор пакета, значок, запуск экран и т.д. Я следил за этим сайтом, чтобы выполнить большую часть настройки:
http://appfoundry.be/blog/2014/07/04/Xcode-Env-Configuration/
У меня также есть config.plist, содержащий различные уникальные настройки, связанные с каждой конфигурацией XCode, которая успешно копируется только при ее создании. Здесь приведен фрагмент фазы запуска Script, чтобы сделать это:
RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/config/${CONFIGURATION}
BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Copying all files under ${RESOURCE_PATH} to ${BUILD_APP_DIR}"
cp -v "${RESOURCE_PATH}/"* "${BUILD_APP_DIR}/"
Моя следующая цель состоит в том, чтобы иметь возможность копировать определенный каталог активов конфигурации при его построении, чтобы избежать объединения всех различных конфигурационных изображений в сборку, в результате чего она стала раздутой. Я пробовал то же самое решение, что и выше, с помощью Run Script, меняя строку копирования, чтобы включить рекурсивный параметр (поскольку каталог активов по существу является каталогом):
cp -rv "${RESOURCE_PATH}/"* "${BUILD_APP_DIR}/"
Однако, когда я это делаю, мое приложение не может построить и говорит, что не может найти значок приложения и запустить изображение. Любые идеи?
Ответы
Ответ 1
Вот что вы можете сделать, чтобы сделать эту работу:
- Добавьте отдельный каталог активов для каждой конфигурации, так же, как вы обычно добавляете каталог активов в свой проект. Предположим для этого примера, что мы называем эти каталоги MediaForDebug.xcassets, MediaForAdHoc.xcassets и MediaForRelease.xcassets.
- Убедитесь, что недавно созданные каталоги ресурсов являются членами вашей цели (поэтому НЕ исключайте их здесь, мы сделаем это позже)
- Теперь, если он еще не добавлен в ваши настройки сборки, добавьте пользовательский параметр
EXCLUDED_SOURCE_FILE_NAMES
пользователем. - См. Скриншот ниже для значений, которые будут установлены для этого пользовательского параметра.
![EXCLUDED_SOURCE_FILE_NAMES for config dependant asset catalogs]()
Делая это, XCode будет только компилировать соответствующие каталоги активов и игнорировать другие. Я проверил это на одном из наших проектов, и он работает как задумано.
Удачи!
ЗАМЕЧАНИЕ: Если вы используете CocoaPods, у вас могут возникнуть проблемы, потому что CocoaPods добавляет собственный шаг сборки для компиляции ваших ресурсов и зависимостей в файл .car. См. Https://github.com/CocoaPods/CocoaPods/issues/1546 для обсуждения этого вопроса. TL; DR: убедитесь, что этот шаг не выполняется на этапе сборки, или отредактируйте сценарий CocoaPods, который они выполняют, чтобы не создавать ресурсы.
ОБНОВЛЕНИЕ 19.01.2009: С последним стабильным Xcode (10.1) и Cocoapods (v1.5.3) они работают из коробки с решением выше. Нет необходимости изменять скрипты Cocoapods или этапы сборки, просто установите EXCLUDED_SOURCE_FILE_NAMES
как описано.