UIKit에서 Storyboard 없이 코드로 UI 구현하기

Jungwon Lee·2023년 5월 22일

처음 iOS 공부를 시작할 때에는 대부분 Storyboard로 UI를 구현하는 일이 많지만, 아무래도 Storyboard 만으로는 한계가 있고, 다른 사람들과 같이 협업할 때에는 코드 베이스로 구현하는 것이 더 편리할 수 있다.

그래서 Storyboard를 제거하고, 기본적으로 생성되는 ViewController의 view를 표시하는 방법에 대해 공유하고자 한다.



1. 프로젝트 생성


참고로 프로젝트 생성시 Interfae 항목을 SwiftUI로 설정하면 Storyboard 없이 선언적으로 UI를 구현할 수 있다.

(하지만 SwiftUI로 구현할 것이었으면 당신은 이 글을 찾으러 오지 않았을 것이다.)

일단은 Storyboard를 선택하고 프로젝트를 생성해주자.



2. Main.storyboard 파일 삭제

Main.storybaord 파일을 우클릭 한 다음 Delete를 눌러 삭제한다.



3. Info.plist 설정 변경


Info.plsit는 Information Property List 의 줄임말로, 앱 전체적인 메타데이터를 설정할 수 있는 Key-Value로 이루어진 XML 파일이다.
Key 부분에 닫혀 있는 속성을 계속 열다보면

Information Property List
- Application Scene Manifest
	- Scene Configuration
		- Application Session Role
			- item 0 (Default Configuration)
				- Storyboard Name

위와 같은 경로에 Storyboard Name이 존재하는 것을 확인할 수 있다. 여기서 + 버튼 옆의 - 버튼을 눌러 속성을 삭제해주도록 하자.
(Value 값인 Main만 지우면 안되고 꼭 - 버튼으로 항목 전체를 삭제해야 한다.)



4. 프로젝트 Targets 설정

끝이라고 생각하겠지만 아직 한 가지 설정이 더 남아있다. xcodeproj 파일 Targets 부분의 Build Settings를 눌러보면, UIKit Main Storyboard File Base Name이 Main으로 설정되어 있는 것을 확인할 수 있다. Main으로 되어있는 값을 지우면 된다.



5. Scene Delegate 설정

iOS 13부터 SceneDelegate 라는 객체가 새롭게 등장하였고, Scene이라는 개념이 소개되었다. Scene은 쉽게 말해 앱의 UI 인스턴스라고 얘기할 수 있는데, 아이패드의 메모앱을 생각해보면 Split View를 통해 멀티태스킹이 가능하다.

이처럼 하나의 앱에서도 여러 Scene이 존재할 수 있고, 이 각각의 Scene의 Lifecycle을 관리하는 것이 바로 UISceneDelegate이다.
더 궁금하다면, UISceneDelegate Apple 공식 문서




다시 돌아와서, 처음 앱이 실행될 때 보여지는 window에 대한 설정을 다음과 같이 해주면 된다.

여기서는 ViewControllerrootViewController로 설정해주었기 때문에 앱이 실행됐을 때 ViewController의 뷰가 보여야 한다.

이때 window?.makeKeyAndVisible()을 호출하는 것을 잊지 말자!
이 메소드는 기본적으로 제공되는 window를 key window로 지정해주는 작업이다. Storyboard가 없다면 이 역시 직접 설정해줘야 한다.



6. 확인

그럼 의도한대로 ViewController의 view가 잘 보여지는지 확인하기 위해 view의 배경색을 민트색으로 바꿔보겠다.

👍🏻

Reference
https://developer.apple.com/documentation/uikit/uiscenedelegate
https://developer.apple.com/documentation/uikit/uiwindow/1621601-makekeyandvisible
https://ios-development.tistory.com/72

profile
안녕하세요

0개의 댓글