Xcode зависает на " компиляции исходных файлов Swift"

Я запускаю Xcode 7.3.1. При создании моего проекта на основе Swift он зависает на "компиляции исходных файлов Swift". Я пробовал различные комбинации удаления DerivedData, clean, run, перезапуск Xcode, перезапуск OS X, никто не работает. Есть идеи?

11 ответов


Я сделал расширение класса. Это также заставляет компилятор Swift застрять в цикле без ошибок:

class X: X

Спасибо за все предложения комментаторов. Я сузил его до ссылается на свойство, которое я удалил. Пример:

var people: [Person] = ...
let foo = people.map { "\(.name), \(.age)" }

здесь Person выглядит примерно так:

protocol Person {
    var name: String { get }
    var age: Int { get }
}

все работает нормально. Затем я удалил age пока держащ закрытие неизменным. Это заставило Xcode безнадежно запутаться. Вероятно, связано с выводом типа Swift.


попробуйте очистить папку сборки проекта

  1. удерживая клавишу option и добрался до продукта - > очистить папку сборки (где Clean раньше был в меню)
  2. если вы используете CocoaPods, удалите файл рабочей области и запустите Pod Install или Pod Update

Я думаю, что 2, вероятно, является причиной.


измените "уровень оптимизации компилятора Swift" в настройках сборки с "оптимизация всего модуля"на" оптимизация одного файла". Возможно, это не ваша проблема, но она решила мою, с которой я застрял на полдня. Это может быть просто временная ошибка в последней версии Xcode (8.2.1 был тот, который я использовал в то время, когда я писал это).


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

json = [ "item1": value1 ?? "",
         "item2": value2 ?? "",
         "item3": value3 ?? "",
         ...
         "item14": value14 ?? "" ]

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

json = [ "item1": value 1,
         "item2": value 2,
         "item3": value 3,
         ...
         "item14": value 14 ]

Я не пытался выяснить точку отсечения для количества элементов, прежде чем он застрял.


в моем случае проблема была во время разбора JSON. Я отправлял необязательное значение в параметре словаря во время синтаксического анализа JSON.


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

хотя упоминается другими в комментариях, но шаги ниже по-прежнему worths больше внимания:

  1. запустить проект
  2. переключатель Навигатор Отчетов (команда + 9) и выберите текущую работает Build задач. Посмотрите, какой исходный файл занимает много время компиляции.
  3. Проверьте недавнюю историю фиксации этого исходного файла. Исследуйте возможную причину.

xcode, похоже, имеет проблему объединения более 5 строк. Видеть это: Xcode зависает при попытке выполнить это на игровой площадке Swift? Данный обходной путь решил мою проблему


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


в моем случае XCode stucks на большом словарном литерале:

requestParameters = [
                        "asset" : "...",
                        "user" : "...",
                        // about 15 additional keys
                        ]

проблема была решена после замены этой части:

var requestParameters = [String : Any]()
requestParameters["asset"] = "..."
requestParameters["user"] = "..."
// about 15 additional keys

в моем случае я изменил

bookingPassengers.append(["paxType": passengersData[passIndex].travellerKind ?? " " ,
                                          "firstName": passengersData[passIndex].firstName ?? " "   ])

to

bookingPassengers.append(["paxType": passengersData[passIndex].travellerKind! ,
                                          "firstName": passengersData[passIndex].firstName!   ])

после этого все стало хорошо