Включить / исключить ресурсы в зависимости от схемы - PullRequest
5 голосов
/ 14 апреля 2011

У меня есть некоторые большие ресурсы, которые мне нужны только для запуска симулятора - я бы хотел, чтобы они автоматически исключались из всех сборок устройств. Есть ли способ сделать это с Xcode 4, за исключением пользовательских сценариев сборки, которые копируют ресурсы?

Ответы [ 4 ]

7 голосов
/ 14 апреля 2011

Я пошел с фазой Run Script со следующим:

if [ ${PLATFORM_NAME} != "iphonesimulator" ]; then 
    echo "device build -- removing resources..."
    rm "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/test_a.mp3"
    rm "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/test_b.mp3"
    # reveal the binary in the Finder
    /usr/bin/open --reveal "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
else
    echo "simulator build..."
fi
2 голосов
/ 14 апреля 2011

Цели определяют, что входит в продукт. Дублируйте свою цель и создайте схему для нее. Измените членство этой цели.

0 голосов
/ 16 июля 2018

Арт ответ хорошо работает.

Я добавляю этот альтернативный ответ, потому что у меня есть определенные требования, и я нашел решение, которое их учитывает.

В моем случае мне нужны некоторые большие ресурсы, чтобытолько в некоторых тестовых сборках, но я не хочу, чтобы они были включены в проект или отмечены в проекте.Я также хочу, чтобы во время сборки Xcode бессмысленно копировал большой файл из одной папки в другую.

Мое решение заключается в следующем:

Создайте новую папку на диске в папке Resources/с названием FolderLinkedResources.

Добавьте ссылку на папку в эту папку в проекте Xcode.Это ссылка на фактическую папку на жестком диске, а не на группу папок проекта.Это можно сделать с помощью параметра в диалоговом окне «Добавить файлы»:

enter image description here

Затем во время сборки у меня есть собственный сценарий фазы сборки (размещается раньше, чем компиляция)что hard-links требуемый файл ресурса в папку, на которую ссылаются, на диске:

# COPY_SPECIAL_RESOURCES is only defined in schemas where I require the special resource(s).
# SpecialResources folder is a sibling folder alongside my entire Xcode project folder

if [ ${COPY_SPECIAL_RESOURCES} == "1" ]; then
  ln ../SpecialResources/mySpecialResourceFile.bin Resources/FolderLinkedResources/
fi

Теперь сборка будет включать ваш специальный ресурс.

Обратите внимание, что поскольку файл ресурса находится внутри ссылки на папку в проекте, встроенное приложение будет фактически содержать файл ресурса в папке, а не на верхнем уровне.Это означает, что обычный вызов для извлечения вашего ресурса не будет работать :

NSString *resourcePath = [[NSBundle mainBundle]
        pathForResource:@"mySpecialResourceFile"
                 ofType:@"bin"];

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

NSString *resourcePath = [[NSBundle mainBundle]
        pathForResource:@"mySpecialResourceFile"
                 ofType:@"bin"
            inDirectory:@"FolderLinkedResources"];

Примечание: этот метод также хорошо работает, когда вы фактически не знаете, что это за ресурсы, до времени сборки!Пока ваш скрипт вставляет жесткие ссылки в файлы, они превращают его в сборку.

В интересах аккуратности и здравомыслия я включаю фазу сборки скрипта запуска, которая происходит после компиляции, которая очищаетпо жесткой ссылке:

if [ ${COPY_SPECIAL_RESOURCES} == "1" ]; then
    rm -rf Resources/FolderLinkedResources/*.*
fi

Наконец, на случай, если кто-то заинтересуется моим фактическим сценарием использования для этого: у меня есть предварительно записанные данные связи HTTP для определенных автономных тестовых сборок моего приложения.Эти данные никоим образом не являются частью основного приложения, поэтому я не хочу, чтобы они регистрировались с самим приложением или частью проекта по умолчанию.

0 голосов
/ 14 апреля 2011

Пользовательские сценарии сборки - ваш лучший друг в Xcode. Сделайте так, чтобы скрипт удалил ресурс после сборки и перед знаком кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...