programing

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

newsource 2023. 7. 29. 08:31

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

Xcode 프로젝트의 빌드 시간을 줄이기 위해 일반적으로 사용할 수 있는 전략은 무엇입니까?저는 주로 Xcode 구체적인 전략에 관심이 있습니다.

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

현재, 저는:

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

  • 애플리케이션에서 대부분의 리소스를 제거하고 가능하면 iPhone 시뮬레이터에서 하드 코딩된 파일 시스템 경로로 테스트하여 리소스를 변경할 때 리소스를 계속 패키징할 필요가 없습니다.

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

대부분의 경우 가장 큰 작업은 머리글 파일 포함을 제어하는 것입니다.

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

또한 헤더를 포함하는 대신 전달 선언을 사용하면 종속성 수를 크게 줄일 수 있으며 모든 타이밍에 도움이 될 수 있습니다.

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

iOS Edit-Build-Test 주기에서 대기 시간 50% 단축

요약하면 다음과 같습니다.

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

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

개인적으로 저는 Mac 개발 프로젝트를 위해 컴파일러를 LLVM-Clang으로 전환했고 빌드 시간이 극적으로 단축되었습니다.LLVM-GCC 컴파일러도 있지만 빌드 시간에 도움이 될지는 모르겠지만, LLVM-Clang이 아이폰 앱 컴파일에 작동하지 않는다면 시도해 볼 수 있습니다.

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

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

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

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

defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4

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

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

방금 맥북 프로를 4GB에서 8GB로 업그레이드했습니다.프로젝트 빌드 시간이 2시 10분에서 0시 45분으로 변경되었습니다.저는 그 개선에 실망했습니다.또한 색인화 등을 할 때 연구를 위한 웹 브라우징과 일반적인 Xcode 성능을 더욱 빠르게 합니다.

쉬운 대답: 로컬 네트워크에서 Xcode를 실행하는 다른 컴퓨터를 추가합니다.Xcode에는 distcc 작업관리 분산 컴파일이 통합되어 있습니다.또한 Bonjour를 사용하여 다른 빌드 호스트를 찾을 수 있으므로 구성 프로세스가 크게 간소화됩니다.대규모 빌드의 경우 배포를 통해 빌드 시스템의 수에 거의 선형적으로 비례하는 속도를 높일 수 있습니다(2대의 머신은 시간의 절반, 3대의 머신은 시간의 3분의 1 등).

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

편집: 안타깝게도, 애플은 Xcode 4.3에서 이 기능을 제거한 것으로 보입니다: http://lists.apple.com/archives/xcode-users/2012/Mar/msg00048.html

Xcode 5에는 CI를 수행할 수 있는 서버 버전이 있지만 애드혹 개발자 빌드에 이점이 있을지는 의문입니다.그러나 몇 가지 예고되지 않은 기능을 사용하면 빌드 시간을 크게 단축할 수 있습니다.

RAM 드라이브를 사용하기 위해 스크립트를 사용했고, 프로젝트 클린 빌드 시간이 53초에서 20초로 단축되었습니다.

저는 앱스토어에서 GUI를 얻고 싶었지만 명령줄을 선택했습니다.나는 git 저장소의 일부로 스크립트를 넣었습니다.

빌드 시간을 보려면 터미널에 "defaults write com.apple.dt"를 입력합니다.Xcode ShowBuild 작업 기간 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

참고: 저는 기본적으로 macOs에서 제공하는 hdiutil을 사용합니다.-kernel 옵션(디스크로 스왑 안 함)을 켜려고 했지만 구현되지 않았다고 하여 기계에서 실패했습니다.

새로운 OS가 곧 출시될 예정입니다. 새로운 파일 시스템 복사 기능이 매우 빠르고 이 스크립트가 중복되므로 훨씬 더 많은 기능이 향상될 것입니다.

(적어도 iOS 프로젝트의 경우) 컴파일 시간을 절반으로 줄이는 큰 팁 중 하나는 빌드 설정 / 아키텍처 / 빌드 액티브 아키텍처YES설정하는 것입니다.

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

스토어에 제출할 때 이 설정을 다시 활성화해야 합니다. 그렇지 않으면 이진 파일이 유효하지 않습니다.

컴파일을 방지하기 위해 가장 자주 사용하는 파일에 정적 립을 사용하는 것에 대해 언급했습니다.코드에 자주 사용되지만 사전 컴파일된 헤더의 정적 립에는 없는 헤더를 삽입하여 유사한 작업을 수행할 수 있습니다.적어도 한 번만 컴파일됩니다.

프로젝트 전체에 여러 컴파일 유형(예: Obj-C, Obj-C++, C++)이 있는 경우 문제를 방지하기 위해 주의해야 합니다.

안녕하세요, 프로젝트의 물리적 구조를 최적화하는 것을 추천합니다.(적어도 C++ 세계에서는) 이것에 대해 좋은 읽을거리가 있지만, 저는 객관적인 C를 하고 있고 같은 원칙이 종종 적용됩니다.

다음은 컴파일 시간을 개선하는 경향이 있는 프로젝트의 물리적 구조 최적화에 대한 훌륭한 기사입니다. 게임 시작 시간: IMT2000 3GPP - 물리구조 파트 1

행운을 빌어요 :)

한 단어:TmpDisk

  1. TmpDisk를 사용하여 1.5Gb RAM 디스크 생성
  2. Xcode > 기본 설정 > 위치 > 파생 데이터를 /Volumes/1.5Gb/xcode 데이터로 변경
  3. 속도를 즐기세요!

'하드웨어 추가 투입' 접근 방식에 대한 빠른 참고.

요약: 대폭적인 하드웨어 업그레이드로 인해 약간의 속도 향상을 경험했습니다.

테스트: 복제된 Macbook에서 동일한 프로젝트 구축/실행(하드웨어만 다를 수 있음)

구형 맥북 에어(1.86GHz Core 2 Duo 2GB RAM) vs 새 맥북 프로(2.3)GHz Core i7 8GB RAM)

아이폰 3GS를 기반으로 구축
맥북 에어 1:00 - 1:15
맥북 프로 ~1:00

=> 0 ~ 0:15 속도 증가

아이폰 4S를 기반으로
맥북 프로 ~0:35
맥북 에어 ~0:50

=> 최대 15초의 속도 증가

**부분 테스트:두 기계 사이에 시뮬레이터의 제작 시간 사이에 상당한 차이가 있습니다.


제가 계속 경험한 바로는..전화 하드웨어를 크게 변경할 때(즉, 아이폰 5(또는 아이폰 4)에 비해 3GS에서 빌드 시간이 크게 증가합니다.적어도 제 경험에서, 제한적인 요소는 전화 하드웨어였습니다 (컴퓨터 하드웨어가 아니라).

그래서.. 가장 빠른 빌드 시간을 얻기 위해..
옵션 1) 코드를 작성하고 나중에 빠른 컴퓨터에서 시뮬레이터에서 실행합니다.
옵션 2) 최신 아이폰이 장착된 장치에 빌드

실행할 때마다 전체 프로젝트가 재구축된다면 XCode 7.0 <= 8.1의 버그로 인해 어려움을 겪게 될 것입니다.

사용자 정의 빌드 설정 HEADERMAP_USES_VFS를 YES로 생성하면 매 번 맥북 컴파일 시간이 75초에서 25초로 단축됩니다.자세한 내용은 Xcode 8에서 전체 프로젝트 재구성을 참조하십시오.

저는 4.4로 오버클럭된 5960x CPU의 해킨토시로 전환했습니다.GHz는 Xcode 컴파일 시간을 줄이기 위한 것입니다.8개의 코어와 16개의 스레드입니다.모든 맥을 파괴하는 컴퓨터의 총 비용은 3,000달러입니다.하지만 저는 처음에는 요세미티와 함께 적어도 10일 동안 그것을 설치했습니다.Xcode가 새로운 OS를 필요로 하는 동안 macOS를 업데이트할 수 없었기 때문에 6개월간의 다운타임이 있었습니다.방금 시에라를 운영하면서 삶이 다시 좋아졌습니다.

2,8GHz i7 이중 코어 16GB RAM MacBook Pro는 75초 만에, Hackintosh는 20초 만에 프로젝트를 컴파일합니다.(프로젝트에서 swift, dlib, opencv c++)

하지만 가장 큰 문제는 Xcode가 swift 컴파일 시 여러 스레드를 사용하지 않는 것 같습니다.이것이 병목 현상입니다, 빨리 고쳐주길 바랍니다.

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