Xcode에서 iOS 신규 프로젝트를 생성하면 7개의 파일이 자동으로 생성됩니다.
처음 iOS 개발을 시작하면 "이 파일들이 각각 무슨 역할을 하는 걸까?" 하는 의문이 생기기 마련입니다.
이 글에서는 AppDelegate, SceneDelegate, ViewController, Storyboard, Assets, info.plist
각 파일의 역할과 개발 시 실제로 어떻게 활용되는지를 초보자도 이해할 수 있도록 설명합니다.
목차
1. 자동 생성 파일 한눈에 보기
2. 앱 실행 주기 관련 파일
3. UI 화면 구성 파일
4. 리소스 및 설정 파일
5. 파일 간 역할 비교와 구조 이해
#1. 자동 생성 파일 한눈에 보기
1) 프로젝트 생성 직후 파일 목록
Xcode에서 File → New → Project → App으로 신규 프로젝트를 생성하면
아래 7개의 파일이 자동으로 만들어집니다. 각 파일은 앱의 서로 다른 영역을 담당하며,
개발자는 이 구조를 이해해야 효율적으로 코딩할 수 있습니다.
파일명
종류
한줄 설명
AppDelegate.swift
Swift 클래스
앱 전체 실행 주기(Life Cycle) 관리
SceneDelegate.swift
Swift 클래스
UI 화면의 실행 주기 관리
ViewController.swift
Swift 클래스
첫 번째 화면의 비즈니스 로직 처리
Main.storyboard
UI 파일
화면 구성 및 View 간 연결 관계 시각화
Assets.xcassets
리소스 저장소
앱 아이콘 및 이미지 보관
LaunchScreen.storyboard
UI 파일
앱 실행 시 표시되는 스플래시 화면
info.plist
설정 파일
앱 실행에 필요한 권한 및 설정 정보 저장
#2. 앱 실행 주기 관련 파일
1) AppDelegate.swift
앱의 실행 주기(Life Cycle) 전반을 관리하는 핵심 클래스 파일입니다.
앱이 처음 실행되거나, 백그라운드로 전환되거나, 종료될 때 호출되는 메서드들이 이 파일에 위치합니다.
(1) 주요 메서드
① application(_:didFinishLaunchingWithOptions:) – 앱이 처음 실행될 때 호출. 초기 설정을 이 메서드에서 처리합니다.
② applicationDidEnterBackground(_:) – 앱이 백그라운드로 진입할 때 호출됩니다.
③ applicationWillTerminate(_:) – 앱이 종료되기 직전에 호출됩니다.
(2) 실제 활용 예시
AppDelegate는 주로 PUSH 알림 등록 및 수신 처리를 구현하는 데 사용됩니다.
Firebase, 카카오 SDK 등 외부 라이브러리의 초기화 코드도 이 파일에 작성하는 것이 일반적입니다.
iOS 13부터 도입된 파일로, UI 화면(Scene)의 실행 주기를 별도로 관리합니다.
iPadOS처럼 하나의 앱에서 여러 창(멀티 윈도우)을 지원하기 위해 AppDelegate에서 UI 관련 역할을 분리한 것입니다.
(1) AppDelegate와의 차이점
① AppDelegate: 앱 전체 수준의 이벤트(실행·종료·메모리 경고 등) 처리
② SceneDelegate: 화면(Scene) 수준의 이벤트(foreground 진입·background 전환 등) 처리
③ iOS 12 이하를 지원해야 하는 경우 SceneDelegate 없이 AppDelegate만으로 처리해야 합니다.
#3. UI 화면 구성 파일
1) ViewController.swift
화면에 보이는 View와 사용자 이벤트를 처리하는 MVC 패턴의 Controller 역할을 담당합니다.
View 1개당 Controller 클래스 파일 1개가 대응되므로, 화면이 늘어날수록 ViewController 파일도 함께 늘어납니다.
(1) 기본 구조
class ViewController: UIViewController {
override func viewDidLoad() { super.viewDidLoad() // View가 메모리에 로드된 직후 호출 – 초기 UI 설정은 여기서
}
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // View가 화면에 나타나기 직전 호출
}
}
· · · · ·
2) Main.storyboard
앱의 UI 구성을 시각적으로 표현하는 XML 기반 파일입니다.
코드 없이 드래그 앤 드롭으로 버튼·레이블·이미지뷰 등을 배치하고, View 간 화면 전환(Segue) 관계를 설정할 수 있습니다.
(1) 사용 시 유의사항
① 팀 협업 시 동일한 Storyboard를 동시에 수정하면 Git 충돌(Conflict)이 자주 발생합니다.
② 대규모 프로젝트에서는 Storyboard를 여러 개로 분리하거나, SwiftUI 또는 코드 기반 UI로 전환하는 경우가 많습니다.
③ ViewController와 연결할 때는 Custom Class에 클래스명을 정확히 지정해야 합니다.
· · · · ·
3) LaunchScreen.storyboard
앱이 처음 실행될 때 잠깐 보이는 스플래시(Splash) 화면을 구성하는 Storyboard입니다.
iOS는 앱 콘텐츠가 로드되는 동안 이 화면을 표시하며, AppStore 심사 기준상 반드시 존재해야 합니다.
동적 애니메이션은 지원되지 않으므로, 정적인 로고·배경색 구성만 가능합니다.
#4. 리소스 및 설정 파일
1) Assets.xcassets
앱에서 사용하는 이미지, 앱 아이콘, 색상(Color Set)을 관리하는 저장소입니다.
이미지를 디바이스 해상도에 맞게 @1x, @2x, @3x 배율로 드래그 앤 드롭하여 등록합니다.
(1) 실무 팁 – 로딩 속도 최적화
① 미사용 이미지를 Assets에 남겨두면 앱 로딩 속도가 저하됩니다.
② 앱 로딩 속도가 느리다면 Assets.xcassets에서 사용하지 않는 이미지를 삭제하는 것을 가장 먼저 확인하세요.
③ 고해상도 이미지는 앱 용량을 크게 증가시키므로, 실제 사용 크기에 맞게 최적화하여 등록하는 것이 좋습니다.
(2) 이미지 등록 방법
① Assets.xcassets 클릭 → 좌측 하단 [+] 버튼 → New Image Set 선택
② 이름 지정 후 1x / 2x / 3x 슬롯에 각각 해당 해상도 이미지 드래그 앤 드롭
③ 코드에서 UIImage(named: "이미지명") 으로 호출
· · · · ·
2) info.plist
앱 실행에 필요한 권한(Permission), 설정, 앱 식별 정보를 XML 형태로 저장하는 파일입니다.
카메라, 위치, 사진 등 민감한 기능을 사용하려면 반드시 이 파일에 사용 목적 문자열(Usage Description)을 등록해야 합니다.
등록하지 않으면 앱이 크래시되거나 Apple 심사에서 Reject됩니다.
(1) 자주 사용되는 권한 키
권한 키
설명
NSCameraUsageDescription
카메라 접근 목적 설명 (필수 등록)
NSPhotoLibraryUsageDescription
사진 라이브러리 접근 목적 설명
NSLocationWhenInUseUsageDescription
위치 정보 접근 목적 설명
NSMicrophoneUsageDescription
마이크 접근 목적 설명
#5. 파일 간 역할 비교와 구조 이해
1) 파일별 역할 요약 비교
파일명
담당 영역
개발자가 주로 수정하는 경우
AppDelegate.swift
앱 전체 Life Cycle
PUSH 알림, 외부 SDK 초기화
SceneDelegate.swift
UI Scene Life Cycle
초기 화면 설정, 멀티 윈도우 지원
ViewController.swift
개별 화면 로직
버튼 이벤트, API 호출, 데이터 처리
Main.storyboard
UI 레이아웃 시각화
화면 구성, 컴포넌트 배치, Segue 연결
Assets.xcassets
이미지·아이콘 리소스
앱 아이콘 등록, 이미지 추가·삭제
LaunchScreen.storyboard
스플래시 화면
초기 로딩 화면 디자인 변경
info.plist
앱 설정 및 권한
권한 추가, URL Scheme, 네트워크 설정
· · · · ·
2) 초보자가 자주 하는 실수
① ViewController.swift와 Storyboard의 연결 누락: Storyboard에서 Custom Class를 지정하지 않으면 코드가 반응하지 않습니다.
② info.plist 권한 등록 누락: 카메라·위치 기능 추가 시 반드시 Usage Description을 함께 등록해야 크래시를 방지할 수 있습니다.
③ Assets의 이미지 이름 오타: UIImage(named:)에서 이름이 정확하지 않으면 nil이 반환되어 이미지가 표시되지 않습니다.
④ 불필요한 이미지 방치: Assets에 사용하지 않는 이미지가 많아지면 앱 용량이 커지고 로딩 속도가 느려집니다.
마무리
Xcode에서 신규 iOS 프로젝트를 생성하면 자동으로 만들어지는 7개 파일은 각각 앱 실행 주기, UI 구성, 리소스 관리, 설정이라는 서로 다른 역할을 담당합니다.
특히 AppDelegate와 SceneDelegate의 역할 차이, 그리고 info.plist의 권한 등록 누락은 실무에서 초보 개발자가 가장 자주 실수하는 부분이니 꼭 기억해 두세요.
각 파일의 역할을 정확히 이해하고 시작하면, 이후 기능을 추가하거나 에러를 디버깅할 때 훨씬 빠르게 원인을 찾을 수 있습니다.