본문 바로가기

iOS

[iOS] InjectionIII로 UIKit에서 Hot Reload 사용하기

Hot Reloading

 

Hot Reload란 어플리케이션 개발 시 코드를 변경하고, 런타임에서 변경 사항을 즉시 반영하는 것을 말합니다.
일반적인 UIKit의 개발 과정은 다음과 같습니다.

 

요구 사항 변경 or 오류 발생 -> 코드 수정 -> 빌드 및 어플리케이션 재실행 -> 어플리케이션 반영 확인

 

이처럼 개발 과정에 있어 코드를 수정하는 시간 외에도 빌드 및 어플리케이션을 실행하는 시간을 들여야 합니다. 만약 이러한 과정의 일부를 줄일 수 있다면 디버깅 시간이 줄어들고, 결국에는 생산성 향상을 도모할 수 있을 것입니다.

 

SwiftUI의 preview 기능은 Hot Reload와 비슷한 부분이 있습니다. preview는 변경 사항을 작성하고, UI의 변동을 실시간으로 확인할 수 있게 합니다. 주요한 차이점은 Hot Reload의 경우 시뮬레이터를 재실행하지 않고도, 화면의 상태를 보존하는 동시에 코드 수정의 반영이 가능하다 것입니다.

 

 

UIKit을 이용한 개발 플로우에 익숙해져 있던 사람에게는 마법 같은 일과 다름이 없습니다. 간단하게 적용 방법을 알아보겠습니다.

 

프로젝트 설정

 

1. SPM을 통해 Inject 라이브러리 의존성을 추가합니다.

 

2. Project Build Setting에서 Other Linker Flag: -Xlinker -interposable을 추가합니다.

 

 

Injection III 사용하기

 

1. App Store에서 Injection III를 다운받습니다.

2. Open Project에서 워크스페이스 파일이 있는 경로를 지정합니다.

 


3. Inject.ViewControllerHost로 InjectViewController를 생성합니다.

 


4. 시뮬레이터 실행 후, 변경 사항을 입력한 뒤 저장(cmd + s)합니다.

코드의 변경 사항이 런타임에서 즉시 반영되는 것을 확인할 수 있습니다.

 

Injection III의 사용

 

프로젝트에 적용해 사용해 본 결과, Inject.ViewControllerHost로 생성한 객체는 View Controller를 상속받지만, 생성 시에 사용한 View Controller를 member Instance로 가지고 있을 뿐입니다. ViewControllerHost 간의 화면 전환의 호출 자체는 가능하나, 화면이 깨지는 현상이 나타납니다.

 

따라서 Injection III를 사용할 때에는 목표로 하는 View Controller 하나만을 타겟으로 잡아 개발해야 합니다. Feature 단위로 개발하는 Demo App에서 유리할 것 같습니다.