Jak skrócić czas kompilacji / przyspieszyć czas kompilacji w Xcode?

Jakie strategie mogą być stosowane w ogóle, aby skrócić czas budowania dla każdego projektu Xcode? Interesują mnie głównie strategie specyficzne dla Xcode.

Zajmuję się rozwojem iPhone ' a za pomocą Xcode, a mój projekt powoli staje się coraz większy. Uważam, że fazy kompilacji / łącza zaczynają zajmować więcej czasu, niż bym chciał.

Obecnie jestem:

  • Korzystanie ze statycznych bibliotek, aby tak większość mojego kodu nie musi być compiled everytime Czyszczę i buduję mój główny projekt

  • Usunąłem większość zasobów z mojego aplikacji i przetestować z twardym zakodowana ścieżka systemu plików w iPhonie symulator w miarę możliwości więc mój zasoby nie muszą być stale pakowane, gdy wprowadzam w nich zmiany.

Zauważyłem, że faza "sprawdzania zależności" trwa dłużej niż bym chciał. Wszelkie wskazówki, aby zmniejszyć, że jak również będą mile widziane!

Author: Cœur, 2009-09-25

14 answers

Często największą rzeczą, jaką możesz zrobić, jest kontrolowanie włączenia plików nagłówkowych.

Włączenie "dodatkowych" plików nagłówkowych w kodzie źródłowym znacznie spowalnia kompilację. Ma to również tendencję do wydłużania czasu wymaganego do sprawdzania zależności.

Również użycie forward declaration zamiast umieszczania nagłówków zawierających inne nagłówki może znacznie zmniejszyć liczbę zależności i pomóc wszystkim czasom.

 56
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-25 19:20:30

Napisałem obszerny post na blogu o tym, jak usprawniłem cykl rozwoju iOS w Spotify:

Skrócenie 50% czasu oczekiwania na iOS Edit-Build-test cycle

Sprowadza się do:

1) przestań generować Pakiety dSYM.

2) unikaj kompilacji z-O4, jeśli używasz Clang.

 23
Author: fons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-22 08:46:04

Osobiście przełączyłem kompilator na LLVM-Clang dla moich projektów programistycznych Mac i widziałem drastyczny spadek czasu kompilacji. Jest też kompilator LLVM-GCC, ale nie jestem pewien, czy to pomoże w czasie budowania, nadal to jest coś, czego możesz spróbować, jeśli LLVM-Clang nie działa dla kompilacji aplikacji iPhone.

Nie jestem w 100% pewien, że LLVM jest wspierany do rozwoju na iPhonie, ale chyba pamiętam, że czytałem w news Feedzie, że jest. To nie jest optymalizacja, którą można wdrożyć w Twój kod, ale warto spróbować!

 17
Author: Form,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-01 19:55:11

Liczba wątków, których Xcode użyje do wykonywania zadań, domyślnie odpowiada tej samej liczbie rdzeni, które ma twój procesor. Na przykład, Mac z Intel Core i7 ma dwa rdzenie, więc domyślnie Xcode będzie używać maksymalnie dwóch wątków. Ponieważ czasy kompilacji są często związane We / Wy, a nie CPU, zwiększenie liczby wątków Xcode może zapewnić znaczny wzrost wydajności dla kompilacji.

Spróbuj skonfigurować Xcode tak, aby używał 3, 4 lub 8 wątków i zobacz, który z nich zapewnia najlepszą wydajność Twój przypadek użycia.

Możesz ustawić liczbę procesów używanych przez Xcode z terminala w następujący sposób:

defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4

Aby uzyskać więcej informacji, zobacz Xcode user Defaults.
 12
Author: memmons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-17 21:00:27

Jeśli nie używasz 8GB PAMIĘCI RAM, Uaktualnij teraz.

Właśnie uaktualniłem mojego MacBooka pro z 4GB do 8GB. Czas budowy mojego projektu wzrósł z 2: 10 do 0: 45. Byłem pod wrażeniem poprawy. To również sprawia, że przeglądanie stron internetowych dla badań snappier i ogólnej wydajności Xcode podczas indeksowania, itp.

 12
Author: Dan Carter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 18:56:27

Łatwa odpowiedź: dodaj kolejną maszynę z Xcode w sieci lokalnej. Xcode zawiera distcc do wykonywania rozproszonych kompilacji. Może nawet użyć Bonjour, aby znaleźć inne hosty kompilacji,co znacznie upraszcza proces konfiguracji. W przypadku dużych kompilacji dystrybucja może zwiększyć prędkość, która jest prawie liniowo proporcjonalna do liczby maszyn kompilacyjnych(2 maszyny zajmuje połowę czasu, trzy zajmuje trzecią i tak dalej).

Aby zobaczyć jak to skonfigurować, możesz zajrzeć to Doc rozwoju . Zawiera również inne przydatne strategie poprawy czasu kompilacji, takie jak używanie wstępnie skompilowanych nagłówków i predykcyjnych kompilacji.

Edit: niestety, wygląda na to, że Apple usunęło tę funkcję od Xcode 4.3: http://lists.apple.com/archives/xcode-users/2012/Mar/msg00048.html

Xcode 5 ma wersję serwerową, która może zrobić CI, ale wątpię, że przyniesie to jakiekolwiek korzyści dla ad hoc developer builds. Istnieją jednak pewne niezapowiedziane funkcje, które powinny znacznie przyspieszyć czas budowy.

 11
Author: Tim Keating,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-15 21:48:15

Jedną wielką wskazówką, aby zmniejszyć o połowę czas kompilacji (przynajmniej dla projektów iOS) , jest ustawienie Build Settings / Architectures / Build Active Architecture Onlyna YES.

To, co robi (szczególnie z pojawieniem się 64-bitowych iPadów/64-bitowego kompilatora), to nie budowanie binarnych dla architektur, których obecnie nie używasz.

Pamiętaj, aby ponownie włączyć to ustawienie po przesłaniu do app store, w przeciwnym razie Twój plik binarny nie zostanie zweryfikowany.

 7
Author: bobobobo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-13 15:59:03

Użyłem skryptu do wykorzystania pamięci RAM, wraz z kilkoma optymalizacjami "forward declarations" mój projekt clean Czas budowy wyniósł od 53 sekund do 20 sekund.

[[2]] skusiłem się na Gui w AppStore, ale zdecydowałem się raczej na przejdź do linii poleceń. Skrypt umieściłem w repozytorium git.

Aby zobaczyć czasy budowania, wprowadź to w terminalu: "domyślnie zapisuje com.jabłko.dt.Xcode Showbuild Operationduration YES "

Uruchom ponownie Xcode, aby zauważyć czasy budowania na pasku narzędzi. (to jest mój nieczysty czas budowania przy użyciu objective-c) Buforowane czasy budowania

Dostosuj scenariusz do swoich upodobań. - Uwaga skrypt czyści folder danych pochodnych.

#!/bin/sh

#2 GIG RAM
GIGA_BYTES=$((2*1024*1024*1024))

# a sector is 512 bytes
NUMSECTORS=$((${GIGA_BYTES}/512))

#ram disk
mydev=`hdiutil attach -nomount ram://$NUMSECTORS`
newfs_hfs $mydev

# make mount point
MOUNT_POINT=/Users/your_user_name/Library/Developer/Xcode/DerivedData

# ******************************************* 
# ** WARNING - MOUNT POINT WILL BE DELETED ** 
# *******************************************
rm -rf ${MOUNT_POINT}
mkdir -p ${MOUNT_POINT}

# mount
mount -t hfs $mydev ${MOUNT_POINT}
echo unmount $(MOUNT_POINT)

Aby zobaczyć efekt i kontrolować dysk RAM:

mount                       - see mount points
umount mount_point          - unmount point
diskutil list               - see disks
diskutil eject /dev/diskX   - eject the disk
df -ahl                     - see free space

Uwaga: Zasadniczo używam hdiutil dostarczonego przez macOs. Próbowałem włączyć opcję-kernel (bez zamiany na dysk), ale nie powiodło się na moim komputerze, mówiąc, że nie jest zaimplementowana.

Być może nowy system operacyjny już wkrótce zobaczymy jeszcze więcej ulepszeń, ponieważ nowa funkcja kopiowania systemu plików jest naprawdę szybka i prawdopodobnie czyni ten skrypt zbędnym.

 6
Author: Wayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 12:35:03

Wspomniałeś o używaniu statycznych bibliotek dla najczęściej używanych plików, aby zapobiec kompilacji. Możesz osiągnąć coś podobnego, umieszczając w kodzie nagłówki, które są często używane, ale nie w statycznych bibliotekach w wstępnie skompilowanym nagłówku. Przynajmniej zostaną skompilowane tylko raz.

Należy zachować ostrożność, aby uniknąć problemów, jeśli masz wiele typów kompilacji w całym projekcie(np. Obj - C, Obj-C++, C++).

 2
Author: Tetrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-04 19:15:22

Hej, polecam Ci zoptymalizować strukturę fizyczną twojego projektu. Jest trochę dobrej lektury na ten temat (przynajmniej w świecie C++), ale robię objective-C i często obowiązują te same zasady.

Oto świetny artykuł na temat optymalizacji struktury fizycznej projektu, który ma tendencję do poprawy czasu kompilacji Gry Od Wewnątrz: Struktura Fizyczna Cz. 1

Powodzenia:)

 2
Author: Goles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-02 17:21:37

Jedno słowo: TmpDisk

  1. Użyj TmpDisk, aby utworzyć dysk RAM o pojemności 1,5 Gb
  2. Zmień Xcode > Preferencje > Lokalizacja > dane pochodne do / Volumes / 1.5 Gb / Xcode data
  3. Ciesz się prędkością!
 2
Author: Joaquim Paz Carvalho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 22:17:12

Szybka Uwaga dotycząca podejścia "Rzuć więcej sprzętu"..

Podsumowanie: doświadczyłem niewielkiego wzrostu prędkości od dokonania znaczącej aktualizacji sprzętu

Test: Zbuduj / Uruchom dokładnie ten sam projekt na sklonowanych MacBookach (gdzie jedyną różnicą powinien być ich sprzęt)

Stary Macbook Air (1,86 GHZ Core 2 Duo tylko 2GB RAM) vs Nowy Macbook Pro (2.3 GHZ Core i7 8GB RAM)

BUDOWANIE NA IPHONE 3GS
Macbook Air 1:00 - 1:15
Macbook Pro ~1:00

=> 0 do 0:15 przyrostu prędkości

BUDOWANIE NA IPHONE 4S
Macbook Pro ~0: 35
Macbook Air ~0:50

= > ~15 sekund wzrostu prędkości

**częściowo przetestowany: istnieje znacząca różnica między czasem budowy symulatora między 2 maszynami


W moim ciągłym doświadczeniu.. otrzymasz znaczny wzrost przy dokonywaniu dużych zmian w sprzęcie telefonu (tj. Materia)).. przynajmniej z mojego doświadczenia, czynnikiem ograniczającym był sprzęt telefoniczny (Nie sprzęt komputerowy).

Więc.. aby uzyskać najszybszy czas budowy..
opcja1) napisz kod i uruchom w simulaterze na szybkim komputerze lub
opcja 2) Zbuduj urządzenie z najnowszym iPhonem

 1
Author: user353877,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-14 04:27:31

Jeśli cały projekt zostanie przebudowany za każdym razem, gdy naciśniesz run, to prawdopodobnie błąd w XCode 7.0

Tworzenie ustawień kompilacji zdefiniowanych przez użytkownika headermap_uses_vfs na yes skraca czas kompilacji MacBooka z 75 sekund za każdym razem do 25 sekund. Zobacz Xcode 8 wykonuje pełną przebudowę projektu, Aby uzyskać więcej informacji.

 1
Author: Thyselius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:23

Przełączyłem się na Hackintosh z procesorem 5960X, podkręconym do 4,4 GHz tylko po to, aby obniżyć czas kompilacji Xcode. To 8 rdzeni i 16 wątków. Całkowity koszt 3000 dolarów za komputer, który miażdży wszystkie komputery Mac. Jednak spędziłem co najmniej 10 dni, aby go skonfigurować, najpierw z Yosemite, the. Miałem sześć miesięcy przestoju, kiedy nie mogłem zaktualizować systemu macOS, podczas gdy Xcode wymagało nowszego systemu operacyjnego. Właśnie uruchomiłem sierra i życie znów jest dobre.

Mój 2,8 GHz i7 dwurdzeniowy 16 GB RAM MacBook Pro kompiluje mój projekt w 75 sekund, Hackintosh w 20 sekund. (Swift, dlib, opencv c++ w projekcie)

Jednak największym problemem jest to, że Xcode nie używa wielu wątków podczas kompilacji swift. To jest wąskie gardło, mam nadzieję, że wkrótce to naprawią.

 -1
Author: Thyselius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-16 07:39:18