Подтвердить что ты не робот

Файлы ресурсов, не обновляемые с помощью Xcode 5

У меня есть несколько двоичных файлов с проприетарным расширением, которые не обновляются в сборке при компиляции. В предыдущих версиях Xcode с этим же проектом он обнаружил, что файл был изменен, и редко мне приходилось выполнять "Чистый", как я должен делать с этой версией. Конечно, это потребляет намного больше времени - я был бы признателен, если бы кто-нибудь мог сообщить мне, что изменилось с помощью Xcode 5 и/или что я могу сделать по этому поводу.

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

Он использует своего рода "синюю" папку ресурсов, которая является ссылкой на папку, в которой она находится, и не просто скопирована в каталог проекта. Я прошу прощения, так как я забыл, как называется этот тип папки ресурса (я угадываю ссылку).

Версия: Xcode 5 (5A1413)

UPDATE:

Это происходит только в том случае, если я ссылаюсь на файл, который я программно изменяю с помощью fopen, fwrite и т.д., и при использовании редактора файлов в OSX для сохранения файла (без его изменения) Xcode увидит его как измененный.

Теперь я просматриваю FSEvents, чтобы увидеть, что этот базовый API - это то, что мне нужно использовать, хотя я точно не знаю, как установить флаги только с этим.

UPDATE:

Ну, как простой тест, я беру тот же файл и сохраняю его через:

NSData* data = [[NSData alloc] initWithContentsOfFile: @"/location/file.dat"];
[data writeToFile:@"/location/file.dat" atomically:YES];

код >

Конечно, после того, как я это вызвал, а затем запустил приложение, использующее ресурс, он обновляется через Xcode во время сборки. Таким образом, кажется, что Xcode 5 полагается на некоторые специальные флаги, не установленные стандартными функциями io. На этом этапе я могу либо исправить то, что у меня есть с этой 2-строчной вещью, либо выяснить, что такое механизм флага, и как писать на нее. (FSEvents? Я не вижу там механизма записи..)

4b9b3361

Ответ 1

У меня также возникали проблемы. Все было отлично до Xcode 5, и моя ссылка на ресурсы ресурсов будет копироваться довольно надежно. Однако после обновления, независимо от того, что я сделал с отдельным файлом (коснитесь его, удалите и скопируйте его и т.д.), Ничего не вызвало Xcode, чтобы зачерпнуть его снова.

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

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

Ответ 2

У меня была та же проблема. Я установил фазу сборки xcode script, чтобы коснуться папки корневого ресурса, и теперь она работает. Я нашел инструкции здесь, и они следующие (см. Ссылку для более подробной информации):

1) Добавьте в свой ресурс отдельный каталог ресурсов (называемый как "Ресурсы" ) в разделе "Ресурсы" в виде синего "Справочника по папкам"

2) Щелкните правой кнопкой мыши по целевой точке приложения, выберите Add- > New Build Phase- > New Run script Build Phase

3) В появившемся окне "Информация" измените оболочку на /bin/tcsh и скопируйте и запустите script ниже в текстовое представление Script.

Script:

touch -cm ${SRCROOT}/../../YourResourceFolder

(Также вам может потребоваться узнать как найти "Фазы сборки" в Xcode 5)

Ответ 3

а проще всего было бы просто коснуться папки из вашей оболочки или термина. например на вашем терминале просто запустите touch -cm PATH_TO_FOLDER_UNDER_RESOURCES

PATH_TO_FOLDER_UNDER_RESOURCES - это фактический путь к папке под папками ресурсов, содержащей файлы.

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

Ответ 4

У меня была такая же проблема с xcode5, мне нужно часто обновлять javascript. Мне пришлось чистить, а потом строить, это заняло много времени, потому что в моем проекте было много исходных файлов. Позже я попытался удалить приложение (выберите "move to trash", а не "delete reference" ), а затем построил, это было довольно быстро, но мне пришлось перезапустить xcode, чтобы приложение снова появилось в проекте.