← 글 목록

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 노트로 넘어간다.