2016-10-05 16 views
9

Problem jest to, że przy budowie szybkiej aplikacji w Xcode 8, pliki źródłowe są opracowywane szybko, ale Kopiowanie Swift standardowych bibliotek wygrywa - faza może uruchomić na kilka minut (zazwyczaj Cała budowa trwa około 4-5 minut, najgorsze są hojnie w ciągu 10 minut - mniej niż minutę).XCode 8.0 aplikacja budynek ultraslow

Dodatkowo faza eksportu archiwum jest bardzo powolna, czasami trwa prawie pół godziny (ponownie, była dość szybka).

Przeszukałem internet w poszukiwaniu odpowiedzi na wiele dni, ponownie zainstalowałem XCode niezliczoną ilość razy, wypróbowałem nowe narzędzia Swift, eksperymentowałem z włączaniem/wyłączaniem Sierra iCloud Drive (katalog źródłowy nadal musi być ukryty przed nim), wypróbowałem każdą kompilację ustawienie, które każdy i ich matka, zalecił, wykonane liczne nowe puste projekty i stracił wszelką nadzieję ...

Moje pytanie brzmi: jak mogę to zrobić normalne?

EDIT: Mam też klawisze Apple ID (taką samą ilość pub-ów i priv-y, oraz towarzyszących świadectw) w moim Mac Keychain - czy jest szansa ten problem jest związany do tego? Zajmuje mnóstwo czasu, aby je przejrzeć i znaleźć właściwy znak do podpisania?

+0

Nie wiem, czy to dotyczy ciebie, ale jest to dobra rada dla uniknięcia powolnych czasów kompilacji: w twojej bazie kodów szukaj "złożonych" wyrażeń (takich jak włochate jednorzędówki) i podziel je na kilka wyrażeń użycie zmiennych temp.A jeśli masz literały słownikowe, pomóż kompilatorowi, określając typ siebie (zwykle lepiej jest użyć inferencji typów, ale w tym przypadku lepiej jest podać rodzaj), co ułatwi zadanie kompilatora. – Moritz

+0

Dzięki za porady Eric, zawsze są przydatne. Używam [BuildTimeAnalyzer] (https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode) do podwójnego sprawdzenia mojego kodu, aby nie było długich kompilacji źródeł (najdłuższy jest 61,8ms, i jest w sumie ~ 20 funkcji, które kompilują się dłużej niż 10ms). –

+0

To działa na Xcode 8.3 swift 3.1 - http://stackoverflow.com/a/40497873/1890317 –

Odpowiedz

11

więc ... w końcu pękło i usunięte wszystkie moje Apple ID klawiszy (z wyjątkiem 1 pary kluczy) z mojego Keychain (był przerażony łamaniem rzeczy). Teraz wszystko buduje szybko/normalnie i mogę w końcu być znowu szczęśliwa ...

Wystarczy powtórzyć - upewnij się, że nie mają zduplikowane klucze w Brelok.

+1

miał ponad 700 zduplikowanych kluczy - usunął je wszystkie i wszystko zaczęło działać poprawnie (i szybko). xcode zapisuje wymagane klucze automatycznie po ich usunięciu. bardzo rozczarowany, że Xcode wpadł w tę dziwną sytuację i zmarnował tyle czasu (i zakładam tak wielu innych programistów). – aporat

+0

@Mikk Rätsep Co masz na myśli, że skasowałeś wszystkie klucze Apple ID z wyjątkiem jednego klucza zapłaconego? Co to była ta jedna para kluczy? – bibscy

+0

@bibscy Oznacza to, że gdy miałem na przykład 200 prywatnych kluczy Apple ID i 200 publicznych kluczy Apple ID - wtedy zostawiłem tylko 1 klucz prywatny i 1 klucz publiczny. To znaczy, że usunąłem duplikaty. –

1

idź do wystają ustawienia, a następnie Editor> Dodaj ustawienie budowlanej> Dodaj ustawienie zdefiniowane przez użytkownika, i dodaj następujący:

SWIFT_WHOLE_MODULE_OPTIMIZATION = YES 

Dodanie tej flagi zostawiliśmy nasze czyste-build kompilacji razy od 7 minut do 65 roku życia dla szybki projekt 40KLOC, w cudowny sposób. Można również potwierdzić, że 2 znajomych zaobserwowało podobne ulepszenia w projektach dla przedsiębiorstw.

mogę założyć, to tylko jest jakiś błąd w Xcode 8.0 ## dział ##

+0

Czy to jest to samo, co ustawienie ** Poziom optymalizacji ** w * Ustawieniach kompilacji - Kompilator Swift *? I niestety to nie działa dla mnie ... wydaje się, że może być problem z moim komputerem (ponieważ inni mogą szybko zbudować projekt) ... może ktoś napotkał to wcześniej i wie, jak to naprawić (poza formatem itp.). –

+0

Udało się raz ... – maxisme

0

Oprócz usuwania duplikatów kluczy, zauważam ogromną poprawę codesign kiedy zmienił kontroli dostępu z klawiszy Xcode aby „umożliwić wszystkim aplikacjom na dostęp do tego elementu”

otwarte „Dostęp do pęku kluczy”, wybierz " Keys "i dwukrotnie dotknij każdego klawisza. w zakładce "Kontrola dostępu" dostępna jest opcja "Zezwalaj wszystkim aplikacjom na dostęp do tego elementu".

+0

Czy można uzyskać ten sam rezultat, po prostu dając dostęp do _Xcode_ (lub jakiejś aplikacji _codesign_, której może użyć)? Osobiście nie czuję się swobodnie, pozwalając wszystkim aplikacjom na dostęp do moich kluczy. –