프로젝트별로 상황이야 다르겠지만, SwiftUI 프리뷰를 사용할 때 빌드하는 시간이 너무 오래 걸리면 “야 이거 너무 오래 걸려서 프리뷰 기능을 잠깐 멈췄어. 준비되면 Resume 버튼을 누르렴” 식의 안내 메시지가 나온다. 그래서 Resume을 누르면? 또 한참을 빌드하다가 저 메시지를 또 보여준다. 그래서 Resume을 또 누르면? 또 한참을 빌드하다가…

라는 어떤 재귀적인 기분이 드는 상황을 맞닥뜨리는 경우가 있다. 아니 그런데 솔직히, 프리뷰하나 띄우는 빌드가 그렇게 오래걸릴수가 있나? 프리뷰 빌드가 무슨 클린 빌드도 아니고, 뭔가 프로젝트가 동쪽으로 서쪽으로 유유히 표류하는 것도 아닐텐데 말이다.

바로 그 상황에서 여러분이 체크해야하는 것이 있다. 바로 앱 프로젝트의 Build Phases 설정이다. Xcode 프로젝트에서 프로젝트에 각종 분석 도구를 붙이거나, 뭔가 정적으로 코드를 생성하는 작업 등을 자동으로 수행하도록 할 때 1차적으로 찾는 것이 바로 이 Build Phases다. 번역하면 빌드 단계, 그러니까 빌드를 수행하면 여기 정의한 순서대로 스크립트가 됐든 뭐가 됐든 이 작업도 같이 하라는 식으로 이것저것 붙일 수 있는 것이다.

내 경우에는 이 Build Phases에 Firebase Crashlytics에 dSYM을 업로드하는 스크립트와 SwiftLint, SwiftGen, Apollo CodeGen 작업을 수행하는 스크립트등을 추가해놨었다. 근데 빌드를 돌리고 나중에 보고서를 체크해보니 Apollo CodeGen과 dSYM 업로드가 생각보다 너무 많은 시간을 잡아먹는게 아닌가? 사실상 매번 빌드할때마다 수행할 필요도 없는데… 내가 터미널에 명령어 한번 입력하는 횟수 줄이겠다고 한 짓이 SwiftUI 프리뷰조차 쓰지 못하게 한 것이다. 하지만 걱정 마라. 다 방법이 있다. 바로 작업 수행 시간이 오래 걸릴만한 Build Phase 스크립트의 상단에 아래와 같은 코드를 추가하는 것이다.

if [ $ENABLE_PREVIEWS = YES ] then 
    echo "SwiftUI Preview 빌드중에는 이 빌드 단계를 무시합니다."
    exit 0
fi

# 필요하지만 어쨌든 오래 걸리는 작업...

ENABLE_PREVIEWS는 Xcode에서 SwiftUI 프리뷰를 위한 빌드일때 갖고있는 내부 변수같은거라고 생각하면 된다. 만약 시간이 오래 걸리는데 굳이 모든 빌드중에 필요하지 않은 빌드 단계가 있다면, 위와 같은 조건 분기를 만들고 exit 0 명령어를 통해 해당 단계를 정상종료 시켜버리면 되는 것이다. 자, 이제 시뮬레이터도, 디버깅을 위한 실기기와 USB 케이블도 치워버리고 SwiftUI 프리뷰와 함께 바로바로 UI 구현 사항을 체크하도록 하자.