WWDC 2025: UIKit

틀틀보·2025년 6월 15일

WWDC2025

목록 보기
3/3

Liquid Glass

iOS 26부터 UI에 Liquid Glass 소재 도입 가능

  • 각각의 UI Object 들이 투명도, 굴절 효과, 스펙큘러 하이라이트 등을 이용해 모습이 변화

iPadOS의 변화

UISplitViewController

  • inspector 공식 지원 : 이제 일련의 코드 작성 없이 간단하게 세부 정보를 보여주는 코드를 작성 지원

  • separator 지원 : 나눠진 두 화면 간의 선을 드래그하여 화면 크기 조절 가능

Mac스러워진 iPad

  • 맥에서 지원되는 macOS 스타일 메뉴바를 iPad에 탑재

  • ⚠️ 버전 26부터는 메뉴바를 storyBoard에서 구성 불가, 오로지 코드로만 구성되야 함.

UIKit과 Observable 연동

  • Observable 매크로로 선언된 클래스의 객체를 layoutSubviews, updateProperties 등의 메서드에서 해당 객체의 속성을 참조시 종속성이 자동으로 설정

  • SwiftUI와 동일하게 Observable 객체의 속성이 변경되면 자동으로 해당 UI 업데이트

  • ⚠️ 단 Observable 매크로로 선언된 클래스 여야 함. Observable 프로토콜을 준수하는 클래스는 불가.

  • Observable 매크로는 컴파일 단계에서 자동으로 관찰 기능 코드가 생성되고 해당 타입이 Observable 프로토콜을 준수하게 처리

  • 반면, 프로토콜만 선언하면 관찰 로직이 삽입되지 않음.
    https://stackoverflow.com/questions/78858949/swift-observable-vs-observable-protocol

2026-04-10 추가 내용

iOS18+ 부터 지원됨.

Info.plist 파일에서 UIObservationTrackingEnabled 값을 YES로 설정하면 iOS 18+ 이상부터 추적 가능하도록 설정
iOS 26은 설정 불필요

https://developer.apple.com/documentation/bundleresources/information-property-list/uiobservationtrackingenabled

UIKit의 UI update Path 개선

updateProerties 과정 (메서드) 추가

  • layoutSubviews 직전에 실행되는 메서드
  • 속성 업데이트만 처리하는 메서드 (UI 업데이트와 작업 분리)

왜 추가되었는가?

  • 기존: 기존 layoutSobviews 메서드는 데이터 업데이트와 레이아웃 처리를 함께 하던 구조이기 때문에 속성 하나만 바뀌어도 전체 레이아웃을 재계산하는 경우가 발생 ➡️ 리소스 낭비
  • 추가: updateProerties 메서드의 추가로 기능이 분리되어 데이터만 업데이트하고 레이아웃을 재계산하는 불필요한 과정 제거 가능

리스트, 컬렉션 뷰의 셀도 자동 업데이트 가능

  • 셀의 configurationHandler를 통해 종속성이 추적되고 데이터 업데이트에 따라 셀 자동 업데이트

UIKit의 UI Animation 개선

flushUpdates 추가

기존 에니메이션 방식

UIView.animate(withDuration: 0.3) {
    model.badgeColor = .red  // 상태 변경
    view.layoutIfNeeded()    // 레이아웃 업데이트 강제
}
  • 기존에는 변경할 UI의 상태를 변경하고 layoutIfNeeded 메서드를 사용해서 강제로 레이아웃을 업데이트

flushUpdates 사용

UIView.animate(withDuration: 0.3, options: [.flushUpdates]) {
    model.badgeColor = .red  // 상태만 변경하면 UIKit이 자동으로 알아서 처리
}
  • flushUpdates 옵션을 설정하면 UIKit이 내부에서 자동으로 updateProperties(), layoutSubviews() 메서드 호출 및 애니메이션 처리까지 자동으로 처리함.

  • 기존 수동으로 속성과 뷰 의존성으로 생길 수 있는 오류 방지 및 불필요한 애니메이션 호출이 되지 않게 개선

  • animate 메서드 또한 Observable 종속성 추적 (자동으로 연결된 속성의 UI 업데이트 가능)

SwiftUI와 UIKit의 점진적 통합

UIHostingSceneDelegate 프로토콜 추가

이를 통해 UIKit 기반의 앱에서 SwiftUI 씬을 자연스럽게 삽입하고 전환 가능

import UIKit
import SwiftUI

class ZenGardenSceneDelegate: UIResponder, UIHostingSceneDelegate {
  static var rootScene: some Scene {
    WindowGroup(id: "zengarden") {
      ZenGardenView()
    }
    #if os(visionOS)
    ImmersiveSpace(id: "zengardenspace") {
      ZenGardenSpace()
    }
    .immersionStyle(selection: .constant(.full), in: .mixed, .progressive, .full)
    #endif
  }
}
  • SwiftUISceneUIKitUIScene 환경에 직접 연결 가능

UISceneConfiguration을 활용한 위임

func application(
  _ application: UIApplication,
  configurationForConnecting connectingSceneSession: UISceneSession,
  options: UIScene.ConnectionOptions
) -> UISceneConfiguration {
  let config = UISceneConfiguration(name: "Zen Garden Scene", sessionRole: connectingSceneSession.role)
  config.delegateClass = ZenGardenSceneDelegate.self
  return config
}
  • 새로운 씬 생성 시 해당 Delegate를 지정해 SwiftUI Scene 로딩을 수행

SwiftUI Scene 활성화

func openZenGardenSpace() {
  let request = UISceneSessionActivationRequest(
    hostingDelegateClass: ZenGardenSceneDelegate.self,
    id: "zengardenspace"
  )!
  UIApplication.shared.activateSceneSession(for: request)
}
  • 이로써, UIKit 내에서 SwiftUI Scene 추가 및 활성화 가능

NotificationCenter.Message 타입 추가

  • 알림을 Message 타입으로 강화해 타입 안정성 강화

  • 위의 코드에서는 [키보드가 나타남 알림]의 관련 정보를 타입으로써 안전하게 추출

⚠️UIScene 생명주기 필수화

  • iOS26 SDK로 빌드 시, UIScene 기반의 앱만 실행 가능

  • UIApplicationDelegate, LaunchOptions 등 기존 UIApplication 중심 API는 폐기 예고

추가적인 업데이트

HDR 지원 및 컬러/심볼 업데이트

  • HDR 색상: UIColor노출도(exposure) 지정 가능, UIColorPicker에도 HDR 색상 퍼포먼스 지원

  • UIImageView → 비디오에도 HDR‑to‑SDR 폴백 확장, UITraitHDRHeadroomUsage로 관리

SF Symbols 7 기능 확장

  • Draw Off/On 애니메이션, variable draw로 진행 표시 및 매직 Replace 지원

    • SF Symbol 옵션에 그려지고 지워지는 애니메이션 추가
    • 진행률 표시와 같은 애니메이션 추가
  • UIButton ConfigurationsymbolContentTransition으로 자동 심볼 전환 효과 적용

  • 기울기(Gradient) 렌더링 모드 도입

참고
https://gizmodo.com/ios-26-might-be-apples-riskiest-redesign-yet-2000613526

https://developer.apple.com/kr/videos/play/wwdc2025/243/?time=65

profile
안녕하세요! iOS 개발자입니다!

0개의 댓글