[iOS] Xcode Storyboard 제거 후 코드로 대체하는 방법
스토리보드를 제거하고 코드 기반으로 세팅하는 방법에 대해서 알아보자
히스토리 기록
- 2022.01.07
- 첫 포스팅 iOS 13 이상에서만 적용 가능한 코드로 작성
- 2022.02.25
- iOS 12 이하 버전에서도 적용 가능한 코드로 변경
- 사유: SceneDelegate가 iOS 13 이후에서 사용 가능하기 때문
- 2022.11.03
- Xcode 14 대응
개발 환경
- Xcode 13.0 기준
- Target iOS 13.0 이상 / Target iOS 12.0 이하
iOS 13.0 이상
1. 프로젝트 파일에서 Main.storyboard 파일을 없애기.

2. Info.plist파일로가서 Storyboard Name 제거하기

3. 프로젝트 타겟으로 이동하여서 Main Interface 부분을 비워줍니다.

2022.11.03: Xcode 14 대응
단, Xcode 14 버전을 사용한다면 Main interface 부분을 아래처럼 대응

SceneDelegate.Swift 파일을 수정

UIwindow를 코드 기반으로 구성
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
window?.rootViewController = ViewController(nibName: nil, bundle: nil) // 루트 뷰컨트롤러 생성
window?.makeKeyAndVisible()
검은화면으로 뜬다면, ViewController에서 뷰의 백그라운드 색을 지정.
만약 위 아래가 검은색으로 짤려서 나타난다면 Info.plist에서 제대로 연결되지 않았을 수 있음.
가장 추천하는 방식
SceneDelegate에 추가하기
위 방법이 bounds를 사용하지 않아서 제일 깔끔함!
// 글 포스팅 이후에 수정!! 더 간결한 코드를 발견했어요:)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.backgroundColor = .systemBackground
window?.rootViewController = ViewController()
window?.makeKeyAndVisible()
}
이후에 실행하면 제대로 나타남.
그렇다면 UINavigationController를 Embed in하기 위해서는 아래처럼 활용할 수 있음.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.backgroundColor = .systemBackground
window?.rootViewController = UINavigationController(rootViewController: ViewController())
window?.makeKeyAndVisible()
}
UITabView도 마찬가지임.
iOS 12.0 이하
그렇다면 SceneDelegate가 없는 12.0 이하에서는 AppDelegate를 사용할 수있음.
(iOS 11까지는 커버하는게 아직까지는 좋다고 보임.)

iOS 12 이하에서 사용하려면 스토리보드와 SceneDelegate를 지움.

Info.plist파일 안에 Application Scene Manifest를 삭제
AppDelegate.swift (iOS 12 이하)
SceneDelegate에서 하던 작업을 AppDelegate로 옮긴것 뿐
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.backgroundColor = .yellow
window?.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: ViewController())
return true
}
}
종종 범하는 실수 유의사항
window?.backgroundColor을 설정할 때, 그 위의 있는 코드보다 먼저 작성하게 되면, 색상이 적용되지 않음.
Xcode 14이상을 사용한다면, 제일 아래 부분 Main storyboard file base name

'project > Kuring(공지알림)' 카테고리의 다른 글
| iOS Haptic Feedback 정리 (0) | 2022.03.21 |
|---|---|
| [iOS] inAppReview(StoreKit) - 인앱 리뷰 (0) | 2022.03.06 |
| [iOS] RxGesture에 정리 기본 (0) | 2021.12.20 |
| iOS UIButton 90도 회전시키기 (0) | 2021.12.20 |
| iOS StackView Button 추가하기 (0) | 2021.12.19 |