스위프트 증분 빌드는 어떻게 동작하고 있나
(medium.com)다음과 같이 요약할 수 있습니다.
- Xcode 10 이후 llbuild 기반으로 파일 단위로 증분 빌드가 동작한다.
- Xcode 빌드 로그상으로는 차이가 없어 보이지만, 의존성을 분석하고 인터페이스 해시값을 비교하고 오브젝트 .o 파일을 생성한다. 물론 구현부가 바뀌면 다시 생성한다.
- 만약 의존성을 가지는 다른 소스파일에 대한 인터페이스 해시값이 동일하면 오브젝트 파일은 생성하지 않는다.
- 스위프트 파일 의존성 정보는 .swiftdeps 파일에서 확인할 수 있다.
- 파일 단위로 swiftmodule의 일부분 partial을 만들어 놓고 링크할 때 전체 모듈을 합친다.
- 자바 gradle 빌드 경우처럼 ISP로 나눈다고 해서 인터페이스로 나눠지고 변경이 있는 파일만 빌드되지는 않는다.
- 스위프트 소스 파일을 컴파일할 때는 구현부가 바뀐 파일은 다시 컴파일하지만, 선언부를 중심으로 의존성을 파악하기 때문에 선언이 바뀐 파일을 의존하는 경우만 다시 빌드한다.