2016-10-05 3 views
9

Проблема заключается в том, что при создании Swift приложения в XCode 8, в исходных файлов компилируется быстро, но Копирования Swift стандартных библиотеки принимает торт - фаза может работать в течение нескольких минут (как правило, целая сборка составляет около 4-5 минут, наихудшие случаи были щедро за 10 минут - раньше было меньше минуты).XCode 8.0 Приложения здания сверхмедленной

Кроме того, Подпись фаза экспорта архива болезненно медленна, иногда занимает около полутора часов (опять же, используется довольно быстро).

Я потратил много времени на веб-ответы, переустановил XCode бесчисленное количество раз, попробовал новые Switch toolchains, экспериментировал с включением/выключением iCloud Drive от Sierra (производная папка по-прежнему должна быть скрыта от него), пробовал каждую сборку что каждый, и их мать, рекомендовали, сделали множество новых пустых проектов и потеряли всякую надежду ...

EDIT: У меня также есть Apple, ключи ID (такое же количество паб-s и собств-х годов, а также сопроводительные сертификаты) в моем брелка Мака - есть шанс, что эта проблема связана с к нему? Занимает много времени, чтобы пройти через них и найти правильный, чтобы подписать?

+0

Я не знаю, относится ли это к вам, но это хороший совет, чтобы избежать медленного времени компиляции: в своей кодовой базе, ищите «сложные» выражения (например, волосатые однострочные) и разбивайте их на несколько выражений используя временные переменные.И если у вас есть словарные литералы, помогите компилятору, указав тип самостоятельно (обычно лучше использовать вывод типа, но в этом случае лучше явно указать тип), это облегчит задачу компилятора. – Moritz

+0

Спасибо за советы Эрик, они всегда полезны. Я использую [BuildTimeAnalyzer] (https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode), чтобы дважды проверить мой код, чтобы не было длинного компиляционного источника (самый длинный - 61,8 мс, существует всего ~ 20 функций, которые составляют более 10 мс). –

+0

Это работает на Xcode 8.3 swift 3.1 - http://stackoverflow.com/a/40497873/1890317 –

ответ

11

Итак ... я, наконец, отрезал и удалены все мои компании Apple ID ключи (за исключением 1 пары ключей) от моего брелок (был в ужасе от нарушения вещей). Теперь все строит быстро/нормально и я могу, наконец, быть счастливым ...

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

+1

имел 700+ дублированных ключей - удалил их все, и все начало работать правильно (и быстро). xcode автоматически устанавливает необходимые ключи после их удаления. довольно разочарован тем, что xcode попал в эту странную ситуацию и потратил столько времени на мое время (и я предполагаю, что так много других разработчиков) – aporat

+0

@Mikk Rätsep Что значит, что вы удалили все ключи Apple ID, за исключением 1 key paid)? Что это за 1 ключевая пара? – bibscy

+0

@bibscy Это означает, что когда у меня было, например, 200 частных ключей Apple ID и 200 открытых ключей Apple ID, тогда я оставил только 1 закрытый ключ и 1 открытый ключ. Это означает, что я удалил дубликаты. –

1

Перейти к проектируют настройки, затем Редактор> Добавить сборки Настройка> Добавить определяемых пользователем настроек, а добавить следующее:

SWIFT_WHOLE_MODULE_OPTIMIZATION = YES 

Добавление этого флага высадили наш чисто строить компилировать раз от 7 минут до 65s для быстрый проект 40KLOC, чудом. Также можно подтвердить, что у двух друзей были аналогичные улучшения в корпоративных проектах.

Я могу только предположить, что это какая-то ошибка в Xcode 8.0 ## Heading ##

+0

Это то же самое, что и установка ** уровня оптимизации ** в настройках * Build Settings - Swift Compiler *? И, к сожалению, это не работает для меня ... похоже, что может быть проблема с моим компьютером (так как другие могут быстро создать проект) ... возможно, кто-то столкнулся с этим раньше и знает, как его исправить (кроме формата и т.д.). –

+0

Он работал один раз ... – maxisme

0

Кроме удаления дублированных ключей, я заметил огромное улучшение в CodeSign, когда я изменил контроль доступа ключей Xcode «Разрешить все приложения для доступа к этому элементу»

открытого «Keychain Access», выберите " Keys ", и дважды нажмите на каждую клавишу. на вкладке «Контроль доступа» у вас будет возможность выбрать «Разрешить всем приложениям доступ к этому элементу».

+0

Можно ли добиться такого же результата, просто предоставив доступ к _Xcode_ (или некоторому приложению _codesign_, которое он может использовать)? Я лично не чувствую себя комфортно, позволяя всем приложениям получать доступ к моим ключам. –

Смежные вопросы