ETC

Xcode build 시간 줄이기

HaningYa 2021. 10. 14. 00:59
728x90

xcode 13으로 업데이트 이후에 빌드가 너무 오래 걸린다.

너무나도 오래 걸려서 내 개발환경에서 빌드 시간을 단축시킬 수 있는 방법을 찾아봤다.

 

Speeding Up Xcode Builds

A few suggestions you can use to speed your Xcode build times

ricardo-castellanos-herreros.medium.com

 

 

How To Boost Xcode’s Compile Time and Runtime

Enhance your iOS development by improving your build speed

betterprogramming.pub

 

다른건 모르겠고 아래 두가지 방법을 시도해보았다.

1. Xcode 에서 사용하는 쓰레드 늘리기

기본적으로 Xcode는 CPU가 가지고 있는 코어수와 동일한 갯수만큼 쓰레드를 사용한다.

쓰레드 수를 늘리는건 프로세스의 멀티 쓰레드 또는 추가적인 코어를 흉내내는 것과 비슷한 능력을 가진다.

코드베이스에 따라 병렬적으로 빌드하는게 빌드 시간이 더 오래걸릴 수 있으니 그에따라 쓰레드 수를 조절하면 된다.

3, 4, 8 정도 시도해보고 제일 성능이 좋은 수를 택한다.

defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 8

2.  동시에 실행되는 빌드 작업의 수를 늘린다.

Xcode 9.2 부터 Swift build tasks를 병렬 수행할 수 있는 실험적 기능이 추가되었다.

기본적으로 사용하지 않도록 되있는데 command line 을 통해 enable 시킬 수 있다.

defaults write com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively -bool YES

옵션을 끄려면

defaults delete com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively

빌드 시간 보는 방법

defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
//xcode13에서는 명령어 안먹히는것 같다...?

 

또는

 

적용 후

클린빌드 후 빌드하는데 걸리는 시간은 크게 차이나지 않았다.

하지만 코드를 수정이후 재빌드를 하는 시간은 크게 줄었다.

주의할점

병렬 빌드 옵션의 경우 RAM 이 부족하면 오히려 성능이 저하될 수 있다.

또한 아래 글과 같이

 

When should I check "Parallelize Build" for an Xcode scheme?

I see that this option is unchecked in my current scheme and that a few places around the web recommend against it in certain cases. Can someone give a more thorough method of determining when this

stackoverflow.com

 

서로 의존성이 있는 target이 있을 경우 문제가 될 수 있다.

Xcode 내부적으로 병렬빌드가 어떻게 수행되는지는 모르나 경우에 따라 권장되지 않을 수 있다.

예를들어 한 target은 framework이다. application target이 의존하고 있는 framework target이 있다.
만약 framework target에 수정을 한다면 당연히 appication target이 build되기 전에 framework target이 먼저 빌드되어야 한다.
이러하 빌드 작업을 병렬로 실행할 경우 동작하지 않을 것이다. 

Xcode가 이미 이러한 문제를 잘 해결 했을 수도 있지만 몇몇의 프로젝트는 Xcode에 target-dependencies 정보를 충분히 제공하지 않고 굉장히 복잡할 수 있기 때문에 정확하게 순서대로 병렬 빌드가 일어나지 않을 수 있다.

 

728x90