Swift XCode Index Замораживает или замедляет - программирование
Подтвердить что ты не робот

Swift XCode Index Замораживает или замедляет

Возможно, это только я испытываю такую ​​раздражающую "особенность":

После обновления с Xcode 6.0.1 до Xcode 6.1 все изменилось. Xcode 6.1 навсегда индексирует проект или компилирует исходные файлы. Проект не является огромным. Он просто содержит кучу файлов Swift и AWS SDK 2.0 Cocoapods в рабочей области. Я не думаю, что это должно помешать целому индексировать и компилировать плавно. Я пробовал с некоторыми aws-sdk-ios-образцами, просто чтобы увидеть, как Xcode 6.1 работает на них, и он оказался в том же самом ожидании.

Какие решения я пробовал до сих пор:

  • Удаление "Производных данных" в организаторе и повторное открытие и рабочее пространство. (не удалось исправить)
  • "Показать содержимое пакета" в файле .xcodeproj и удалить .xcworkspace как в (Xcode 4 - медленная производительность)

Ни один из них не работал, к сожалению.

Любая идея? Или любые подобные переживания?

P.S. может быть, мне стоит попробовать воссоздать проект? Мои настройки компьютера: MacBook Pro (Retina, 13 дюймов, середина 2014 года), память 8 ГБ 1600 МГц DDR3, с Yosemite. (Я думаю, этого достаточно для запуска этого небольшого проекта.)

4b9b3361

Ответ 1

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

// This causes indexing/building to hang...
var test = [ [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ] ]

// This works fine.
var test = [ [ "a": false, "b": "c" ] ]
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])

Кроме того, для того, что стоит, 6-я запись в этом массиве является причиной для меня; пять прекрасно работают.

Ответ 2

Единственное работающее решение для меня - удалить все производные данные (не только для текущего проекта, просто очистить всю папку), а затем перезапустить Xcode.

  • Открыть файл/Предпочтения в Xcode

  • Нажмите "Расположение" в правом углу всплывающего окна

  • Нажмите на значок маленькой стрелки рядом с "/Users/Mac/Library/Developer/Xcode/DerivedData"....it, который доставит вас в папку Xcode, содержащую папку DerivedData (содержащую все полученные из ваших предыдущих проектов.)

  • УДАЛИТЬ папку DerivedData​​p >

Ответ 3

Используете ли вы CocoaPods? Сегодня я столкнулся с тем же вопросом. (Использование xCode 6.1.1)

Чтобы устранить проблему, я удалил все в папке ~/Library/Developer/Xcode/DerivedData, Pods в каталоге проекта и <project>.xcworkspace.

Затем я открыл терминал, перешел к моей директории проектов и снова запустил pod install.

Ответ 4

У нас была такая же проблема сегодня. Xcode 6.3.2, проект Swift среднего размера. В какой-то момент он начал индексировать, и он никогда не завершит индексирование. Код, который вызвал это, был словарь типа [String: [String]], поэтому строковый ключ dict с строковыми массивами как значения. У меня было два из них с ключами от A до Z, и каждая из этих 26 записей содержит строковый массив с 5-10 строками.

Удаление полученных данных не помогло. Только комментируя эти диктофоны, он снова пошел.

Честно говоря, это смешно! Apple нуждается в исправлении Xcode! Это уже ужасно медленно при компиляции проектов Swift, но такие ошибки похожи на showstopper. Я не могу правильно справиться с этим!

Ответ 5

Для тех, кто все еще имеет эту проблему, это обходной путь, который я получил, чтобы не допустить, чтобы вы каждый раз вводили объекты:

// instead of this, which freezes indexing
let keys = [keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM]    

// and instead of this, which is ugly & lengthy
var keys = [KeyboardKey]()
keys.append(keyQ)
keys.append(keyW)
...
keys.append(keyM)

// use this:
var keys = [KeyboardKey]()
keys.appendContentsOf([keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM])

Ответ 6

Для меня я пробовал все вышеперечисленное без успеха; но все, что мне нужно было сделать, это удалить папку с производными данными, а затем открыть еще один случайный проект, дождаться его индексации и теперь работает мой оригинальный (неисправный) проект!

Сделайте мир развития яблоком благосклонности и сделайте ваш быстрый компилятор открытым исходным кодом, поэтому мы не все сбиты с вашей некомпетентности.

Ответ 7

Я использую Xcode Version 7.3 (7D175)

Думаю, я мог бы понять основную проблему. Там, где два случая, когда я застрял в фазе индексирования:

  • Я создал закрытие, которое я назначил переменной, и пропустил подпись типа. Я думаю, что xcode имел проблемы с этим шагом вывода типа. Если я правильно помню, одним из аргументов был CGPoint, у которого есть перегруженный конструктор. Моя гипотеза заключается в том, что там, где слишком много возможностей того, что мое закрытие может принимать в качестве аргументов.

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

Кажется, что то же самое происходит со словарными объявлениями, упомянутыми ранее людьми. Я подал отчет об ошибке с яблоком.

Ответ 8

У меня возникла такая же проблема после обновления до 6.1. Xcode будет застревать в компиляции или индексировании без генерации конкретного сообщения об ошибке.

Проблема была окончательно решена путем разбиения некоторых более длинных выражений в быстрых файлах на несколько более коротких выражений. Часть моей программы объединяет множество различных строковых переменных для формирования более длинной строки. Попытки скомбинировать их в одном выражении и с использованием оператора присваивания не выполнялись. Я смог заставить его работать, выполнив что-то похожее на следующее (упрощенное):

var a = "Hello"
var b = " "
var c = "World"
var d = "!"
var partA = a + b
var partB = c + d
var result = partA + partB

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

Надеюсь, что это поможет

Ответ 9

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

Я нашел решение, которое сработало для меня, я открыл проект с более старой версией Xcode версии 6.1 (6A1030), у которой не было проблем с индексированием, а затем вернулась к последней версии Xcode версии 6.1 (6A1052d), которую я использовал до и индексирование было зафиксировано и продолжало хорошо работать.

Мое заключение заключается в том, что это ошибка с Xcode Version 6.1 (6A1052d), которая, я надеюсь, улучшится с будущими версиями.

Проблема возникает время от времени, одно и то же исправление работает каждый раз. Я предполагаю, что другим решением будет просто придерживаться старой версии Xcode версии 6.1 (6A1030), но она не будет работать с устройствами под управлением iOS 8.1 и не будет иметь последних исправлений ошибок.

Ответ 10

Наконец, я "решил" проблему, хотя это всего лишь обходной путь.

Я создал другой проект и добавил файлы один за другим к нему. Затем я обнаружил "очень длинный" файл viewcontroller.swift. Затем я разбил свои коды на модули и сделал эти многократно используемые коды в функции в другом быстром файле. Кроме того, я принял предложение в Интернете, что длительное выражение должно быть разбито на более короткие. Затем выполняется работа индексации и компиляция.

Итак, теперь я его "решил".

НО, я не думаю, что это правильно. Xcode IDE должна быть более чем способна обрабатывать мой "очень длинный" быстрый файл, всего 1500 строк. Я считаю, что это определенно ошибка (существующая в течение длительного времени), хотя Xcode 6.1 уже является обновлением от Xcode 6.0.1.

Ответ 11

Для меня я удалил приложение Xcode и снова загрузил его и установил. Это решило проблему, по крайней мере, на данный момент.

Ответ 12

В моем Xcode решение заключалось в том, чтобы закрыть все избыточные окна. По какой-то причине многие открытые окна делают XCode очень медленным.

Ответ 13

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

Отключить индексирование
     defaults write com.apple.dt.XCode IDEIndexDisable 1 Включить индексирование defaults write com.apple.dt.XCode IDEIndexDisable 0

Но лучше использовать быстрый Mac с хорошей оперативной памятью.

Ответ 14

Я пробовал это с Xcode 8.3.3. Вот мои результаты:

Вы можете написать совершенно прекрасный код Swift, который приведет к зависанию индексации.

Как только индексирование зависает, оно зависает. Изменение кода Swift на то, что не приведет к зависанию индексации, не помогает, оно все еще зависает.

Закрытие проекта и повторное открытие в этой ситуации не помогают.

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

Перезапуск вашего Mac также помогает, хотя он не нужен.

Подвеска вызвана совершенно точным кодом Swift. Пример, который выглядел как

if let date = function1()
?? function2()
?? function3()
?? function4()
?? function5()
?? function6()
?? function7()
?? function8()
?? function9()
?? function10() {
    return date
}

Индексирование будет зависать. Я прокомментировал большую часть "??" линий, и это было хорошо (после выхода из игры и перезапуска Xcode). Без комментариев одна строка за другой. С некоторым количеством строк это было хорошо, а затем раскомментирование следующей строки заставит его висеть.

Единственное, что помогает, по-видимому, в изменении кода.

Ответ 15

У меня тоже была эта проблема и она была решена путем удаления/изменения выражений с помощью оператора "+".

Я клянусь изменить это:

var mainArray = arrayOne + arrayTwo + arrayThree + arrayFour + arrayFive

Для этого:

var mainArray = arrayOne
mainArray += arrayTwo
mainArray += arrayThree
mainArray += arrayFour
mainArray += arrayFive

решил проблему. Я понимаю, что это звучит безумно, но это было верно для меня.

Моя машина - это максимальная MBP в конце 2013 года.

Ответ 16

Бета Xcode 6.2 решила проблему для меня. Не молниеносно, но, по крайней мере, он не индексируется навсегда. Бета-версия не устанавливается поверх обычной установки Xcode, поэтому, если вам не нравится бета-версия, вы можете просто удалить ее.

Различные загрузки Xcode, включая бета-версию >

Ответ 17

Возможно, вы захотите обновить до Xcode 6.1.1

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

Желаю удачи в этой саге!

Ответ 18

Если вы не возражаете возвращаться к 6.0.1, пока не выясните, что сработало для меня. У меня была та же проблема с 6.1 и 6.1.1. Теперь я хороший. Я попробую 6.2, когда это выйдет.

Вы можете найти предыдущие версии программного обеспечения Apple на официальном сайте dev, здесь: https://developer.apple.com/downloads/index.action

Если вы сделаете это, сначала удалите текущую копию Xcode.

Ответ 19

Я использую Xcode 6.1.1 с быстрыми файлами на одном и том же MacBook Pro.

Поскольку я продолжал добавлять строки в массив 3D-строк, Xcode внезапно стал непригодным, и теперь я ничего не могу сделать.

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

Ответ 20

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

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

    let hangsInsteadOfError = { l, r in
        return l.nameFirst < r.nameFirst
        || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast }

    let fixingErrorAvoidsHang = { (l:User, r:User) -> Bool in
        return l.nameFirst < r.nameFirst
            || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast }

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

Ответ 21

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

Ответ 22

Я использую Xcode 8.2 и также закончил эту проблему. Он начался после того, как я определил сложную переменную кортежа - массив кортежей с подмассивом кортежа. Вещи становятся очень медленными, когда субартр кортежа имеет свойство, которое программно вычислено.

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

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

Вот пример кода.

var sectionTuples: [(section: String, rows: [(name: String, subtitle: String)])] = []
let subtitle1: String = "" // something calculated dynamically
let subtitle2: String = "" // something calculated dynamically
sectionTuples = [(
section: "Section 1", rows: [
(name: "name1", subtitle: subtitle1),
(name: "name2", subtitle: subtitle2)
])]

Нижняя строка не позволяет Xcode выводить сложные структуры.

Ответ 23

У меня была такая же проблема. Мой xCode - 8.2.1. Но в моем случае я хотел создать массив словаря с 33 парами ключ-значение. Я делал это следующим образом, который застрял в индексировании:

  var parameter = [String : AnyObject]()
  var finalArray = [parameter]

  for item in listArray
  {
       parameter = ["A": item.a as AnyObject, "B": item.b as AnyObject, "C": item.c as AnyObject, ... , "Z": item.z as AnyObject]

       finalArray.append(parameter)

  }

После меня работали:

var parameter = [String : AnyObject]()
var finalArray = [parameter]

for item in listArray

{
        parameter["A"] = listArray.a as AnyObject
        parameter["B"] = listArray.b as AnyObject
        parameter["C"] = listArray.c as AnyObject
        parameter["D"] = listArray.d as AnyObject 
        .
        .
        .
        parameter["Z"] = listArray.z as AnyObject 

        finalArray.append(parameter)

}