Xcode 8 полностью перестраивает проект

Обновив проект Swift + ObjC для Xcode 8 (Swift 2.3), я обнаружил 50% и более того времени, когда Xcode выполняет полную перестройку проекта вместо инкрементной сборки.

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

Он появляется на фазе "Проверить зависимости", и он решает это. На Xcode 7 это не показалось проблемой.

Кто-нибудь еще сталкивался с этим?

Ответ 1

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

Во-первых, убедитесь, что для уровня оптимизации для отладки установлено значение None (не вся оптимизация модуля) введите описание изображения здесь введите описание изображения здесь

Затем, согласно https://forums.developer.apple.com/thread/62737 Apple Staff (ddunbar):

Мы считаем, что настройка:

HEADERMAP_USES_VFS = YES

в true в вашем проекте (или для всех ваших целей) может быть эффективным обходным путем > для многих людей. Это не гарантирует работу (по этой причине она уже не по умолчанию), но она должна работать для большинства проектов.

Это нужно добавить через "Добавить пользовательские настройки" в соответствии с вашими настройками сборки.

введите описание изображения здесь

.

введите здесь описание изображения

Ответ 2

Хорошо, вот ответ на вопрос, почему это происходит, но я не знаю решения. Если вы используете "Other Swift Flag" -driver-show-incremental Xcode, выведет то, что он решает, что он должен скомпилировать на основе его зависимостей. Вы увидите следующее:

Queuing EditProfileViewController.swift because of dependencies discovered later
Queuing ChangePasswordViewController.swift because of dependencies discovered later
Queuing JoinViewController.swift because of dependencies discovered later
Queuing JoinProfileViewController.swift because of dependencies discovered later
Queuing FormViewBuildable.swift because of dependencies discovered later
Queuing RadioTextFormView.swift because of dependencies discovered later
Queuing TextFieldFormView.swift because of dependencies discovered later
Queuing AccountProfileViewController.swift because of dependencies discovered later

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

FileA включает вещь из FileB, включает вещь из FileC

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

Итак, похоже, что быстрое разрешение зависимостей 3 не работает очень хорошо. Я тестировал это на 2 других быстрых 3 проекта на работе, и то же самое справедливо. Внесите любые изменения в любой файл, и каждый файл будет скомпилирован. Он не чувствует себя медленным, пока вы не начнете получать проекты с примерно 15 000 строк кода или так, поэтому может быть и речи об этом. Если у вас нет приложения среднего размера с быстрым 3, вы, вероятно, даже не заметите, что инкрементное усложнение работает не так. Я обновлю, если узнаю что-нибудь еще.

Ответ 3

Apple выпустила новую бета-версию Xcode вчера (14 ноября)

Xcode 8.2 beta 2

И эта проблема была отмечена как разрешенная в примечании к выпуску.

Система сборки

• Xcode не будет восстанавливать целую цель, когда только небольшие произошли изменения. (28892475)

Он работает для меня. Скорость сборки вернулась, как обычно. Все, кто сталкивается с этой проблемой, должны попробовать!

https://developer.apple.com/download/

Ответ 4

Снимите флажок "Найти неявные зависимости" в "Редактирование схемы" > "Схема" > вкладка "Сборка" исправила ее для файлов проекта. "Скопировать быстрые стандартные библиотеки" все еще требуется навсегда..