Арт ответ хорошо работает.
Я добавляю этот альтернативный ответ, потому что у меня есть определенные требования, и я нашел решение, которое их учитывает.
В моем случае мне нужны некоторые большие ресурсы, чтобытолько в некоторых тестовых сборках, но я не хочу, чтобы они были включены в проект или отмечены в проекте.Я также хочу, чтобы во время сборки Xcode бессмысленно копировал большой файл из одной папки в другую.
Мое решение заключается в следующем:
Создайте новую папку на диске в папке Resources/
с названием FolderLinkedResources
.
Добавьте ссылку на папку в эту папку в проекте Xcode.Это ссылка на фактическую папку на жестком диске, а не на группу папок проекта.Это можно сделать с помощью параметра в диалоговом окне «Добавить файлы»:
Затем во время сборки у меня есть собственный сценарий фазы сборки (размещается раньше, чем компиляция)что 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 для определенных автономных тестовых сборок моего приложения.Эти данные никоим образом не являются частью основного приложения, поэтому я не хочу, чтобы они регистрировались с самим приложением или частью проекта по умолчанию.