Xcode 8 перекомпілюючи повний код кожен раз


131

З будь-якою зміною коду (хоча файл не знаходиться у .pch), щоразу переробляйте проект.


31
Чому це заборонено ?! Це легальне питання. На щокомпіляцію потрібно щомісяця 4 хвилини.
Джош

1
Я теж розумію це питання.
AJ9

3
Ви модифікуєте xib / раскадровки деякими документами IBDesignable?
Ларме

1
Пов’язана нитка яблучного форуму: forums.developer.apple.com/thread/62737 . Досі немає вирішення проблеми.
ldiqual

1
Обов’язково відкрийте звіт про помилки, як це запропоновано на форумі Apple.
Лев Натан

Відповіді:


34

Оновлення 2017/1/2

Цю проблему не вирішено в Xcode 8.2.1 (для мого проекту)

Як вижити?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

Оновлення 2016/12/17

Цю проблему не вирішено в Xcode 8.2.

Оновлення 2016/12/12

Атом до коду та командного рядка для створення та налагодження - це мій вибір зараз. Сподіваюся, що Apple незабаром виправить цю законну помилку.

Оновлення 2016/12/04

Ця проблема, як видається, вирішена за допомогою Xcode 8.2 (бета-версія 2) .

Але для мене це не вирішено, я стикаюся з цією проблемою, навіть коли використовую Xcode 8.2. Ви можете спробувати (завантажити Xcode8.2 beta2 тут )

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


Стара відповідь: Це робота навколо:

введіть тут опис зображення Вкладка "Налаштування побудови" -> "Діалект мови мови" -> Змініть її на "Компілятор за замовчуванням".

Довідково :

"Діалект" мови С "встановлено на" GNU99 "замість" Компілятор за замовчуванням ". Раніше стандарт був GNU99, але зараз його немає. У якийсь момент Xcode неправильно перемістив налаштування проекту бібліотеки, тому він був встановлений у GNU99. Після того, як я змінив його на GNU99, він щоразу переставав переписувати весь код!


1
Все йде нормально!!! Дай мені одну годину, і щедрість твоя, якщо вона буде в курсі.
Адам Вейт

7
Арг, повернемось до перекомпіляції всього
Адам Уейт

1
Я маю таку ж поведінку. Якщо я очищую отримані дані (або змінюю діалект мови C), вони працюватимуть близько 10 складання. Після цього відпадає, щоб все відновити.
bluebamboo

1
Xcode 8.2 (бета-2) працює на 10 версій, після чого відновлює все з нуля, але все ж краще, ніж попередній.
Маркус

3
На жаль, проблема зберігається в Xcode 8.3 beta 2 (принаймні для нас). У нашому проекті не можна помітити помітного поліпшення.
Каспер Манк

20

Перейдіть до продукту -> схема -> редагувати схему. Виберіть Збірка в лівій стовпці та зніміть прапорець " Знайти неявні залежності "

Але цей прапор повинен залишатися перевіреним, коли ви будуєте проект вперше ..


@Josh, чи використовуєте ви кілька проектів у рамках свого проекту (наприклад, підпроект або включений). А ви впевнені, дивлячись на результати випуску, що вона справді все відновлює?
Мобільний Бен

3
Основна робоча область з какаодами та основний проект. CocoaPods залишається створеним, але основний проект відновлює кожен файл; спостерігаючи за результатами збірки та її відновленням на всі 100+ файлів.
Джош

1
Оновлення: здається, що це рішення працює на кілька версій після цього, однак це робить очищення всього проекту та відновлення. Однак, до 2–8-го часу відбудови, вона знову починає перекомпонувати все. Будь-які ідеї? Поза розчарування.
Джош

Це не працює, принаймні, не з робочим простором CocoaPods. Все будується, кожен раз. Супер прикро, тим більше, що Apple вже багато років вирішувала цю проблему.
Уомбл

7

Виправлення для мене було лише закриттям раскадровки, у мене був відкритий вихідний файл разом із допоміжним редактором, а також відкрився файл розкадровки (закриття розгортання --- оскільки я не вносив жодних змін до нього) видалив усі непотрібні компіляції


1
Ха це може бути так просто :)
manmal

5

ОНОВЛЕНО

Найбільше покращення, яке мені вдалося досягти, - це модуляція мого проекту. Спеціально модулюючи шар ORM, який використовується майже в усіх інших класах. Перемістивши цей код в окрему ціль в рамках свого проекту та імпортувавши його як модуль, я зміг значно покращити час компіляції. Більше Xcode не вирішує перекомпілювати непотрібні файли, коли я будую збірку.

Тепер я використовую метод компіляції єдиного файлу для швидких наростаючих налагоджень.

У цьому посиланні є ще кілька хороших пропозицій, включаючи рефакторинг коду, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

СТАРИЙ

Як і раніше з багатьма з вас, я працюю над великим швидким 4 / cocoapods проектом з багатьма вихідними файлами і перекомпілюючи кожен файл кожного разу, що викликає жахливість.

Поки я отримую найкращі результати з наступними налаштуваннями. Я пропоную вам спробувати і подивитися, як це працює для вас.

  • Схема -> Побудова -> "Знайти неявні залежності" = ІСТИНА
  • Налаштування збірки -> Оптимізація зв’язку та часу = Посилення
  • Налаштування збірки -> Рівень оптимізації (налагодження) = Немає [-OO]
  • Налаштування збірки -> Рівень оптимізації (випуск) = Найшвидший, найменший [-Ос]
  • Налаштування збірки -> Збільшити обмін попередньо складеними заголовками = ТАК
  • Налаштування збірки -> Увімкнути інкрементальний перелік = ТАК

Додані спеціальні налаштування, визначені користувачем,

  • Налаштування збірки -> HEADERMAP_USERS_VFS = ТАК

Примітка. У мене немає встановлених користувачем налаштувань для оптимізації всього модуля.


3

Я змінив кілька речей зі своїм кодом щодо заголовка префікса, який, здається, вирішив цю проблему. Я не знаю, хто з них насправді зробив трюк, але я поділюсь ними всім, сподіваючись, що це допоможе комусь іншому там. Якщо у вас немає набору заголовок префікса, я думаю, це не проблема (або проблема багатогранна).

  1. Видаліть будь-який імпорт із заголовка префікса, який є файлами із каталогу вбудованих продуктів, щоб ви могли змінити налаштування збірки для цього ("попередньо скомпільований заголовок використовує файли з каталогу збирання") на "ні". Будьте впевнені, що він не опосередковано імпортується і через інший імпорт.
  2. Видаліть будь-який імпорт із заголовка префікса, у якому використовуються модулі Clang (бібліотеки або рамки, які мають у модулі заголовки файл module.modulemap, щоб ви могли написати код, як @import MyModule). (Для мене цей і крок 1 були одним і тим же.)
  3. Встановіть для збірки заголовка префікса значення "Так". (Я не вважаю, що це потрібно, і це не повинно мати ніякого ефекту в моєму власному проекті. Я просто констатую це, тому що я змінив це, бо готовий був спробувати що-небудь. :))
  4. Вийдіть з Xcode та видаліть каталог DerivedData / ModuleCache (налаштований на ~ / Library / Developer, якщо я правильно пам'ятаю).

Якщо це все-таки не працює, ви можете спробувати видалити ще трохи імпорту із заголовка префікса. Можливо, щось підключить ...


3

Схоже, вони над цим активно працюють, згідно з https://forums.developer.apple.com/thread/62737, але вирішити це потрібно додати

HEADERMAP_USES_VFS = YES

під налаштуваннями збірки вашої цілі (Проект -> Ціль -> Налаштування збірки -> Визначено користувачем).

Це рішення працювало для мене кожен раз, після того як жоден інший варіант не працював послідовно за останній місяць.

EDIT: І все-таки іноді перекомпілюйте все, хоча, мабуть, це робиться набагато рідше, якщо цей параметр визначено.


Я також додав цю величину, час збирання швидше, але це не вирішило нарощення. Я змінив компілятор Swift - генерація коду / налагодження на швидку, оптимізацію цілого модуля ... - найкращий результат на сьогодні
Антоніо Юніор

я навіть не можу знайти користувача, визначеного)
David Seek

2
@DavidSeek його в самому дні налаштувань збірки
Laser Hawk

1
якщо ви цього не бачите, прочитайте цей meandmark.com/blog/2011/03/xcode-4-accessing-build-settings
Laser Hawk

3

Перевірте весь свій код щодо @IBDesignableдиректив у моєму конкретному випадку проект збирання Xcode весь час, тому що я мав певні погляди на мою розкадровку, яка містила @IBDesignableв ній ці атрибути. Друга річ - це те, що я також відкрив мою розкадровку в окремому вікні (а не на вкладці), тобто моє Xcode створює збірки для всіх симуляторів назавжди.


Ми використовуємо досить багато @IBDesignableдиректив ... чи є щось конкретно, що нам слід шукати?
Стен

Я думаю, що їх можна знайти, виключивши одну за одною, і перевірити результат, у моєму випадку це було лише 2 директиви @IBDesignable у всьому проекті.
ua24

2

Мадхурі Мане в цьому відношенні абсолютно правий. Щоб додати трохи більше ясності, слід зазначити кілька важливих моментів:

Це ТІЛЬКО застосовно, якщо у вас є неявні залежності від бібліотек / рамок, на які покладається ваша ціль.

Якщо "Знайти неявні залежності" вимкнено:

Результат: Бібліотека не буде створена до створення цілі програми. Не вдалося створити ціль програми.

Виправлення. Щоб переконатися, що другий сценарій не відбувся, потрібно додати необхідні цілі до списку цілей і правильно їх упорядкувати.

Джерело та подальше читання по темі: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

Тепер, якщо весь ваш проект розміщений в межах однієї цілі, а для складання потрібно 4 хв., З цим ви не можете багато чого зробити, крім того, щоб розбити його на рамки, щоб скористатися вищезгаданим або зрозуміти, де компіляція відстає. Якщо ви використовуєте щось на зразок PaintCode або у вас є великі фрагменти коду UIKit, швидко змініть його на Objective-c, воно збирається набагато швидше


2

Перейти до налаштувань збірки вашої мети і набору Defines Moduleв Yes.

Я працював для мене для створення пари, занадто рано, щоб стверджувати, що це остаточне вирішення, але, принаймні, ми намагаємось.


2

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

Xcode 8.2 beta 2

І це питання було позначено як вирішене в примітці до випуску.

Побудова системи

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

Це працює для мене. Швидкість збирання поверталася як завжди. Усі, хто стикається з цим питанням, повинні спробувати!

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


2

Будь-ласка, перейдіть до налаштування проекту та змініть «Діалектний мову мови C».

Під час оновлення версії xcode "Діалект мови мови C" встановлено на "GNU99" замість "Компілятора за замовчуванням". У якийсь момент Xcode неправильно перемістив налаштування проекту бібліотеки, тому він був встановлений у GNU99. Це вирішить проблему


1

Якщо ви внесли зміни до файлу Swift, розпочніть створення програми, перейдіть на останню вкладку і натисніть на журнал збірки, під час етапу «Перевірка залежностей» зупиніть збірку та запустіть її знову. На другому запуску він повинен створювати лише ті файли, які ви змінили. Якщо все зроблено правильно, я виявив, що він працює щоразу. Не потрібно змінювати налаштування проекту.

Здається, це помилка в Xcode.

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

Якщо ви бачите, що додаток виконує повну збірку, зупиніть збірку та спробуйте цей трюк ще раз.

Якщо ви не внесли жодних змін до коду, використовуйте CMD + CTRL + R для запуску без створення програми, яка приєднує налагоджувач. Не створюватимуть додаток, але допоможуть заощадити непотрібний час.


Це дійсно працює, але іноді XCode вийде з ладу з кодом 1, і вам доведеться зробити чисту збірку. Це кошмар
Антоніо Джуніор

Є й інші сценарії, коли Xcode завжди буде повноцінно складати. Я виявив, що якщо ви модифікуєте .h-файл, включений до мостового заголовка, він відновить усі файли Swift. Можуть бути й інші сценарії, які не пов'язані з помилкою Xcode.
Влад

Існують сценарії, коли єдиною зміною є перейменування функції або нове властивість, додане до існуючого класу / структури, що призводить до цілої перебудови.
Антоніо Юніор

Зверніться до цього питання / відповіді, цей потік є дублікатом цього: Майте рішення, яке працює краще: stackoverflow.com/questions/39456223/…
Влад

1

Виправлена ​​проблема з моєї сторони, застосувавши зніміть прапорець у рішенні "Знайти неявні залежності".

Але пам'ятайте, якщо ви використовуєте cocoapods, застосуйте ці налаштування також до свого проекту поділу, вибравши його

Продукт -> Схема -> Pods- "yourProjectName"

також застосувати:

Продукт -> Схема -> "yourProjectName"

Це допомагає мені, тому я сподіваюся, що ця підказка допоможе комусь іншому.

Дякую


1

Спробуйте: 1. Перейдіть до проекту 2. Клацніть Налаштування збірки 3. Перевірте, що для налаштування OptimizationLevel встановлено значення None (Ні). 4. Клацніть Додати визначені користувачем налаштування 5. Установіть SWIFT_WHOLE_MODULE_OPTIMIZATION на YES.

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


нічого для роботи це все ще складати, коли я пишу один лист.
Чандні

-2

щоб збільшити час компіляції xcode, можна використовувати IRAMDISK (диск віртуальної пам'яті). Дуже корисні та ефективні засоби для скорочення часу на компіляцію.

Також можна використовувати для прискорення часто використовуваного додатка.

для завантаження та використання перейдіть за наступним посиланням: http://iramdisk.findmysoft.com/mac/


Це не прискорить компіляцію, якщо у вас вже є диск SSD.
Яно
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.