[iOS/WWDC23] SwiftData 마이그레이션

2025. 2. 25. 10:12·iOS/WWDC

Migration

프로퍼티를 수정하거나 추가 및 삭제를 수행하게 되면 새 버전을 출시할 때 마이그레이션 과정을 거쳐야 한다.

SwiftData는 이러한 마이그레이션 과정을 간단하게 처리할 수 있는 도구를 제공한다.

마이그레이션 과정

1️⃣ VersionSchema를 통해 모델 캡슐화

  • SwiftData 모델이 변경된 앱의 새 버전을 출시할 때 마다 새로운 VersionedSchema를 정의한다.
enum TripSchemaV1: VersionedSchema {
    static var versionIdentifier: Schema.Version
    static var models: [any PersistentModel.Type]
}
  • VersionedSchema 는 각 버전의 스키마를 캡슐화 한다.
  • 각 버전이 VersionedSchema 로 정의되어야 버전 사이에 어떤 변화가 있었는지 알 수 있다.
  • versionIdentifier 로 해당 버전 정보를 설정하고, models 에 현재 버전에 포함된 모델을 설정한다.
  • 열거형 내부에 해당 버전의 스키마를 포함한다.

 

2️⃣ SchemaMigraionPlan 생성

  • SchemaMigrationPlan 을 통해 마이그레이션 과정을 정의한다.
  • SwiftData가 필요한 마이그레이션을 순서대로 수행하게 된다.

  • schemas 로 포함되어야 하는 모델을 정의한다.
  • stages 를 통해 두 버전 사이에 변경 사항을 처리한다.
  • Migration Stage
    • Lightweight
      • 특정 프로퍼티에 originalName 을 추가하거나 관계에서 삭제규칙을 지정하는 등의 가벼운 변경에 적합
    • Custom
      • 프로퍼티에 고유성 제약을 추가하는 등의 변경

3️⃣ ModelContainer 의 migrationPlan 매개변수에 마이그레이션 작업을 설정하면 완료된다.

let container = try? ModelContainer(for: Trip.self, migrationPlan: SampleMigrationPlan.self)

 

참고

https://developer.apple.com/videos/play/wwdc2023/10195

 

Model your schema with SwiftData - WWDC23 - Videos - Apple Developer

Learn how to use schema macros and migration plans with SwiftData to build more complex features for your app. We'll show you how to...

developer.apple.com

 

저작자표시 (새창열림)

'iOS > WWDC' 카테고리의 다른 글

[iOS/WWDC23] SwiftData에 대해 알아보자  (0) 2025.02.20
[iOS/WWDC23] viewIsAppearing() 알아보기  (0) 2024.03.24
'iOS/WWDC' 카테고리의 다른 글
  • [iOS/WWDC23] SwiftData에 대해 알아보자
  • [iOS/WWDC23] viewIsAppearing() 알아보기
김졀니
김졀니
🍎 iOS 개발
  • 김졀니
    졀니의 개발 공부✨
    김졀니
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • UIKit&SwiftUI
        • RxSwift&Combine
        • WWDC
      • Study
        • 🚨 TroubleShooting
        • 🌱 SeSAC
  • 블로그 메뉴

    • 홈
    • Github
  • 인기 글

  • 최근 글

  • 태그

    인앱리뷰
    clipstobounds
    pointfree
    동시성프로그래밍
    Swift
    layoutIfNeeded
    mapkit
    traits
    RxSwift
    Drawing Cycle
    actor
    concurrency
    mainactor
    OperationQueue
    CLLocation
    observable
    displayPriority
    Realm
    의존성 주입
    wwdc23
    FileManager
    ios
    @PropertyWrapper
    ReactorKit
    swiftdata
    Sendable
    swift concurrency
    이미지 캐싱
    kingfisher header
    위치 권한
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
김졀니
[iOS/WWDC23] SwiftData 마이그레이션
상단으로

티스토리툴바