Section 10/102 menit

10. Ringkasan dan Checklist Migrasi

10. Ringkasan dan Checklist Migrasi

Checklist Fase per Fase

Fase 1 — Setup (Minggu 1)

  • Upgrade Xcode ke versi terbaru (Xcode 16+)
  • Pastikan semua target masih SWIFT_VERSION = 5
  • Build dan pastikan tidak ada error baru
  • Aktifkan Strict Concurrency = Minimal untuk baseline

Fase 2 — Observasi Warning (Minggu 2-3)

  • Naikkan Strict Concurrency = Targeted
  • Catat semua warning yang muncul
  • Kategorikan: mana yang mudah fix, mana yang kompleks
  • Jangan fix dulu — pahami polanya dulu

Fase 3 — Fix Layer per Layer (Minggu 4-8)

  • Models/Entities: jadikan Sendable struct
  • Service/Worker: jadikan actor
  • Repository: jadikan actor atau @MainActor
  • ViewModel: anotasi @MainActor
  • View/ViewController: anotasi @MainActor
  • Callback/Delegate: refactor ke async/await atau @MainActor

Fase 4 — Upgrade Target (Minggu 8-12)

  • Mulai dari target paling sedikit dependency
  • Set SWIFT_VERSION = 6 satu target pada satu waktu
  • Fix error yang muncul (warning sudah jadi error)
  • Lanjut ke target berikutnya setelah yang sebelumnya green

Fase 5 — Full Swift 6 (Bulan 3+)

  • Semua target sudah Swift 6
  • Hapus #if swift(<6.0) compatibility blocks yang tidak lagi diperlukan
  • Refactor @unchecked Sendable ke implementasi yang proper
  • Aktifkan Swift Testing untuk test baru

Quick Reference Directive

swift
// Guard berdasarkan:
#if swift(>=6.0)           // Language version (SWIFT_VERSION build setting)
#if compiler(>=6.0)        // Toolchain version (Xcode version)
#if canImport(Module)      // Ketersediaan module di platform
#if hasFeature(Feature)    // Fitur language spesifik
#available(iOS 18, *)      // OS version (runtime check)
@available(iOS 18, *)      // OS version (declaration annotation)
swift
// Package.swift settings:
.swiftLanguageVersion(.v5)                       // tetap Swift 5
.swiftLanguageVersion(.v6)                       // upgrade ke Swift 6
.enableUpcomingFeature("StrictConcurrency")      // opt-in warning concurrency
.enableUpcomingFeature("TypedThrows")            // opt-in typed throws
.enableUpcomingFeature("ExistentialAny")         // opt-in any keyword
swift
// Xcode Build Settings:
SWIFT_VERSION = 5                                // tetap Swift 5
SWIFT_VERSION = 6                                // Swift 6 mode
SWIFT_STRICT_CONCURRENCY = minimal               // warning minimal
SWIFT_STRICT_CONCURRENCY = targeted              // warning relevan
SWIFT_STRICT_CONCURRENCY = complete              // semua warning Swift 6

Dibuat: 2026-05-09 | Swift 5 → Swift 6 Migration | Xcode 16+