Xcode 8 выполняет полную перестройку проекта

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

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

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

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

4 ответов


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

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

тогда, согласно https://forums.developer.apple.com/thread/62737 Персонал Apple (ddunbar):

мы считаем, что установка:

HEADERMAP_USES_VFS = YES

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

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

enter image description here

.

enter image description here


хорошо, вот ответ на вопрос, почему это происходит, но я не знаю решения. Если вы используете "другой флаг Swift" -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

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

Fileaбыл все вещи из FileB включает в себя вещи из FileC

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

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


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

Xcode 8.2 beta 2

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

Построить Систему

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

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

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


снимите флажок " найти неявные зависимости "в схеме редактирования > "схема" > вкладка "сборка" исправлена для меня для файлов проекта. "Копировать стандартные библиотеки swift" по-прежнему занимает вечность..