작성기준일
2020년 6월 23일, 향후 작업을 위한 스스로를 위한 로그의 의미 + 누군가에게 도움이 될지 모른다는 목적으로 기록을 남깁니다.
Intro
직접 swift 코드를 직접 짜게 되는 일은 가계부 앱 이후에 없을 것이라고 다짐했지만, 잠깐 부업(?)으로 시작하려는 의학 + IT 프로젝트의 프로토타입을 제작하기 위해 어쩔 수 없이 손을 대버렸습니다.
최근 가계부앱 업데이트하면서도 느꼈지만 Swift 버전도 5까지 올라가버렸는데, SwiftUI라는 것도 새로 생기고, ‘새로운 프로젝트’를 만들어보니 구조가 달라졌던데요, SceneDelegate라는 것도 생겼고.
이전 버전과의 호환성 및 여러가지 고민하다보니 많은 사람들이 SceneDelegate라는 것을 삭제하고 쓰는 듯 합니다. 그런데 또 그 이후의 예제를 못찾아서, 아래의 Reference 들을 바탕으로 소스를 구성했습니다.
SceneDelegate 지우기
3번째 레퍼런스를 보면 자세히 사진까지 첨부되어 간단히 넘어갑니다. 최종 소스는 맨 아래에 붙여넣습니다.
1. SceneDelegate.swift 파일을 삭제한다.
2. var window: UIWindow? 코드는 AppDelegate로 복사한다.
3. Info.plist 에서 Application Scene Manifest 항을 (-)를 눌러 삭제한다.
AppDelegate 에서 첫 View를 세팅하기
예전에는 storyboard를 썼었는데, 이게 사실 참 골치아픈 툴이기도 했는데, SwiftUI 는 가계부앱에 썼던 UI 라이브러리랑 사뭇 닮은 듯해서, 그대로 가져가면 좋겠다 싶었습니다.
2번 레퍼런스를 보니, 이전 버전의 ViewController와 SwiftUI 의 ContentView 구조가 호환되는 듯 합니다.
따라서 아래와 같은 순서로 진행합니다.
1. SwiftUI를 import 시킨다.
2. UIHostingController로 ContentView를 연결시킨다.
Source
AppDelegate.swift
//
// AppDelegate.swift
// JMonitor2
//
// Created by J Seok on 2020/06/23.
// Copyright © 2020 J Seok. All rights reserved.
//
import UIKit
import SwiftUI
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
let vc = UIHostingController(rootView: ContentView())
window?.rootViewController = vc
window?.makeKeyAndVisible()
return true
}
}
ContentView.swift
//
// ContentView.swift
// JMonitor2
//
// Created by J Seok on 2020/06/23.
// Copyright © 2020 J Seok. All rights reserved.
//
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView{
Form{
Text("Hello, World!")
Button("TestButton")
{
//Callback
}
}.navigationBarTitle("TestApp")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Result

Reference
1. https://medium.com/@herryhan2435 (https://url.kr/WiyQC5)
2. https://www.hohyeonmoon.com (https://www.hohyeonmoon.com/blog/swiftui-tutorial-uikit/)
3. https://stackoverflow.com/questions/58084127/ios-13-swift-set-application-root-view-controller-programmatically-does-not/60329391#60329391