Nice programing

Xcode에서 빌드 시간을 줄이고 컴파일 시간을 단축하는 방법은 무엇입니까?

nicepro 2020. 11. 7. 10:30
반응형

Xcode에서 빌드 시간을 줄이고 컴파일 시간을 단축하는 방법은 무엇입니까?


Xcode 프로젝트의 빌드 시간을 줄이기 위해 일반적으로 어떤 전략을 사용할 수 있습니까? 저는 주로 Xcode 특정 전략에 관심이 있습니다.

Xcode를 사용하여 iPhone 개발을하고 있는데 프로젝트가 점점 더 커지고 있습니다. 컴파일 / 링크 단계가 원하는 것보다 더 많은 시간이 걸리기 시작했습니다.

현재 저는 :

  • 정적 라이브러리를 사용하여 메인 프로젝트를 정리하고 빌드 할 때마다 대부분의 코드를 컴파일 할 필요가 없도록 만듭니다.

  • 내 응용 프로그램에서 대부분의 리소스를 제거하고 가능할 때마다 iPhone 시뮬레이터에서 하드 코딩 된 파일 시스템 경로로 테스트하여 리소스를 변경할 때 지속적으로 패키지화 할 필요가 없습니다.

"종속성 확인"단계가 원하는 것보다 오래 걸리는 것 같습니다. 그것을 줄이는 팁도 감사하겠습니다!


종종 할 수있는 가장 큰 일은 헤더 파일의 포함을 제어하는 ​​것입니다.

소스 코드에 "추가"헤더 파일을 포함하면 컴파일 속도가 크게 느려집니다. 이것은 또한 의존성 검사에 필요한 시간을 증가시키는 경향이 있습니다.

또한 헤더에 다른 헤더를 포함하는 대신 정방향 선언을 사용하면 종속성 수를 크게 줄이고 모든 타이밍에 도움이 될 수 있습니다.


Spotify에서 iOS 개발주기를 개선 한 방법에 대한 광범위한 블로그 게시물을 작성했습니다.

iOS 편집-빌드-테스트주기에서 50 % 대기 시간 단축

다음과 같이 요약됩니다.

1) dSYM 번들 생성을 중지합니다.

2) Clang을 사용하는 경우 -O4로 컴파일하지 마십시오.


개인적으로 저는 Mac 개발 프로젝트를 위해 컴파일러를 LLVM-Clang으로 전환했고 빌드 시간이 크게 감소했습니다. LLVM-GCC 컴파일러도 있지만 이것이 빌드 시간에 도움이 될 것 같지는 않지만 LLVM-Clang이 iPhone 앱 컴파일에서 작동하지 않는 경우에도 시도해 볼 수 있습니다.

LLVM이 iPhone에서 개발을 위해 지원되는지 100 % 확신하지는 않지만 뉴스 피드에서 읽은 것을 기억합니다. 이는 코드에서 구현할 수있는 최적화는 아니지만 시도해 볼 가치가 있습니다!


8GB RAM을 사용하지 않는 경우 지금 업그레이드하십시오.

방금 macbook pro를 4GB에서 8GB로 업그레이드했습니다. 내 프로젝트 빌드 시간은 2:10에서 0:45로 변경되었습니다. 나는 개선으로 인해 바닥을 쳤다. 또한 인덱싱 등을 할 때 연구를위한 웹 브라우징과 일반적인 Xcode 성능을 향상시킵니다.


Xcode가 작업을 수행하는 데 사용할 스레드 수는 기본적으로 CPU에있는 코어 수와 동일합니다. 예를 들어 Intel Core i7이있는 Mac에는 2 개의 코어가 있으므로 기본적으로 Xcode는 최대 2 개의 스레드를 사용합니다. 컴파일 시간은 종종 CPU 바운드가 아닌 I / O 바운드이기 때문에 Xcode가 사용하는 스레드 수를 늘리면 컴파일 성능이 크게 향상 될 수 있습니다.

3, 4 또는 8 개의 스레드를 사용하도록 Xcode를 구성하고 어떤 것이 사용 사례에 가장 적합한 성능을 제공하는지 확인하십시오.

Xcode가 터미널에서 사용하는 프로세스 수를 다음과 같이 설정할 수 있습니다.

defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4

자세한 내용은 Xcode 사용자 기본값 을 참조하십시오.


쉬운 대답 : 로컬 네트워크에서 Xcode를 실행하는 다른 컴퓨터를 추가하십시오. Xcode는 distcc를 통합하여 분산 컴파일을 수행합니다. Bonjour를 사용하여 다른 빌드 호스트를 찾을 수도 있으므로이를 구성하는 과정이 크게 간소화됩니다. 대규모 빌드의 경우 배포를 통해 빌드 머신 수에 거의 선형 적으로 비례하는 속도 증가를 얻을 수 있습니다 (2 대의 머신은 절반의 시간, 3 개의 머신은 1/3이 소요됨).

이를 설정하는 방법을 보려면 이 개발 문서를 참조하십시오 . 또한 미리 컴파일 된 헤더 및 예측 빌드 사용과 같은 기타 유용한 빌드 시간 개선 전략을 제공합니다.

편집 : 슬프게도 Apple이 Xcode 4.3에서이 기능을 제거한 것으로 보입니다 : http://lists.apple.com/archives/xcode-users/2012/Mar/msg00048.html

Xcode 5에는 CI를 수행 할 수있는 서버 버전이 있지만 이것이 애드혹 개발자 빌드에 어떤 이점을 줄지 의심 스럽습니다. 그러나 빌드 시간을 크게 단축해야하는 미발표 기능이 있습니다.


컴파일 시간을 절반으로 줄이려면 (최소한 iOS 프로젝트의 경우) Build Settings / Architectures / Build Active Architecture OnlyYES로 설정하는 것이 좋습니다.

이것이하는 일은 (특히 64 비트 iPad / 64 비트 컴파일러의 출현으로) 현재 사용하지 않는 아키텍처에 대한 바이너리를 빌드 하지 않는 것입니다.

앱 스토어에 제출할 때이 설정을 다시 활성화해야합니다 . 그렇지 않으면 바이너리가 검증되지 않습니다.


저는 스크립트를 사용하여 RAM 드라이브를 사용하고 일부 "앞으로 선언"최적화와 함께 프로젝트 클린 빌드 시간을 53 초에서 20 초로 단축했습니다.

나는 AppStore에서 Gui를 얻고 싶었지만 오히려 명령 줄을 선택했습니다. 스크립트를 git 저장소의 일부로 넣었습니다.

빌드 시간을 보려면 터미널에 다음을 입력하십시오. "defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES"

도구 모음에서 빌드 시간을 확인하려면 Xcode를 다시 시작하십시오. (목표 -c를 사용하는 내 비 깨끗한 빌드 시간입니다)캐시 된 빌드 시간

원하는대로 스크립트를 조정하십시오. - 스크립트는 파생 된 데이터 폴더를 지 웁니다.

#!/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)

효과를 확인하고 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

NOTE: I essentially use the hdiutil provided by macOs. I tried switching the -kernel option (no swapping to disk) on but failed on my machine, saying it is not implemented.

Maybe the new OS coming soon we will see even more improvements as the new file system copy feature is really fast, and possibly makes this script redundant.


You mentioned using static libs for your most-often used files to prevent compilation. You can accomplish something similar by putting headers to your code that it's frequently used but not in your static libs in the precompiled header. At least they'll only be compiled once.

Care must be taken to avoid issues if you have multiple compilation types across your project (e.g. Obj-C, Obj-C++, C++).


Hey there, I would recommend you to optimize your project's physical structure. There's some good reading about this ( at least in the C++ world ) , but I do objective-C and the same principles often apply.

Here's a great article about project's physical structure optimization, which tends to improve compile times Games From Within: Physical Structure Part 1

Good luck :)


one word: TmpDisk

  1. Use TmpDisk to Create a 1.5Gb RAM disk
  2. Change Xcode > Preferences > Location > Derived Data to /Volumes/1.5Gb/xcode data
  3. Enjoy the speed!

Quick Note Regarding 'Throw more hardware at it' approach..

SUMMARY: I experienced a SMALL speed increase from making a SIGNIFICANT hardware upgrade

Test: Build/Run the exact same project on cloned macbooks (where the only difference should be their hardware)

Old Macbook Air (1.86GHZ Core 2 Duo ONLY 2GB RAM) vs Brand New Macbook Pro (2.3GHZ Core i7 8GB RAM)

BUILDING ON IPHONE 3GS
Macbook Air 1:00 - 1:15
Macbook Pro ~1:00

=> 0 to 0:15 of speed increase

BUILDING ON IPHONE 4S
Macbook Pro ~0:35
Macbook Air ~0:50

=> ~15 seconds of speed increase

**Partially tested: There DOES apear to a significant difference between build times for the SIMULATOR between the 2 machines


In my continued experience.. you WILL get a significant increase when making big changes in PHONE hardware (i.e. build time on a 3GS vs iphone 5 (or 4 for that matter)).. at least in my experience, the limiting factor was the phone hardware (not the computer hardware).

SO.. to get the fastest build time..
option1) write code and run in the simulater on a fast computer OR
option 2) build on the device with the lastest iphone


If your whole project gets rebuilt every time you hit run, that's probably the bug in XCode 7.0 <= 8.1 giving you a hard time.

Creating the user defined build setting HEADERMAP_USES_VFS to YES cut the macbook compile time from 75 seconds each time, to 25 seconds. See Xcode 8 does full project rebuild for more info.


I switched to Hackintosh with a 5960x CPU, overclocked to 4.4GHz only to bring down Xcode compile time. That's 8 cores and 16 threads. Total cost $3000 for a computer that crushes all macs. However I've spent at least 10 days getting it set up, first with Yosemite, the. I had six months downtime when I couldn't update macOS while Xcode required a newer os. I just got it running sierra and life is good again.

My 2,8 GHz i7 double core 16 GB RAM MacBook Pro compiles my project in 75 seconds, the Hackintosh in 20 seconds. (Swift, dlib, opencv c++ in the project)

However the biggest problem is Xcode doesn't seem to use multiple threads when compiling swift. This is the bottleneck, I hope they will fix it soon.

참고 URL : https://stackoverflow.com/questions/1479085/how-to-decrease-build-times-speed-up-compile-time-in-xcode

반응형