notes
IOS - 기본개념
iOS 기본 개념·앱 생명주기·화면 구성요소를 정리한 메모.
안드로이드 하다가 iOS 붙잡으면 이름이 다 달라서 헷갈린다. 일단 내가 쓰는 기본 지도만 남겨 둔다.
iOS / Xcode
iPhone·iPad용 OS. 언어는 지금은 Swift가 기본이고, 레거시만 Objective-C.
Xcode가 IDE 전부 — 코드, Interface Builder/SwiftUI 프리뷰, 시뮬레이터, Instruments.
Swift에서 내가 자주 쓰는 감각
- Optional로 nil을 타입에 심어 둔다 (
if let,guard let,??) map/filter/reduce랑 클로저가 일상- 상속보다 프로토콜로 붙이는 설계가 많다
if let name = optionalName {
print(name)
}
let doubled = [1, 2, 3].map { $0 * 2 }
UIKit vs SwiftUI
- UIKit: 레거시·세밀 제어. Auto Layout·스토리보드/코드 UI.
- SwiftUI: 선언형. iOS 13+ 전제. 새 화면은 여기서 시작해도, 브릿지/WKWebView는 아직 UIKit이 많다.
MVC → Massive VC
Model / View / Controller. 실무에선 VC가 비대해지기 쉬워서 MVVM·Coordinator를 옆에 둔다.
Auto Layout
제약(Constraint)으로 레이아웃. 스토리보드든 코드든 한쪽으로만 맞추는 게 덜 아프다.
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
앱 생명주기 (대충)
Not Running → Inactive → Active → Background → Suspended.
화면 단위는 UIViewController: viewDidLoad → viewWillAppear → viewDidAppear → …
(안드로이드 Activity랑 비슷한 자리)
Delegate
콜백 자리를 프로토콜로 비워 두는 패턴. AnyObject로 클래스만 받게 해서 weak 참조 가능하게.
의존성
- CocoaPods:
Podfile→pod install - SPM: Xcode 내장. 새 프로젝트는 여기로 충분할 때가 많다
안드로이드 대비 한 줄
실무에서 자주 찔리는 것
- 순환 참조: closure/
delegate에weak/unowned - 네트워킹:
URLSession+JSONDecoder - 간단 저장:
UserDefaults/ 복잡하면 Core Data·SwiftData - 권한 문자열은 Info.plist에 없으면 바로 크래시/거절
URLSession.shared.dataTask(with: url) { data, _, _ in
if let data = data {
let model = try? JSONDecoder().decode(Model.self, from: data)
}
}.resume()
출시 흐름
개발자 계정 → Archive → TestFlight → App Store Connect 제출.
이 페이지는 “이름 매핑표” 용도. 디테일은 Auto Layout / Event Driven / UIKit·SwiftUI 노트로 넘어간다.