View in English

  • Apple Developer
    • 시작하기

    시작하기 탐색

    • 개요
    • 알아보기
    • Apple Developer Program

    알림 받기

    • 최신 뉴스
    • Hello Developer
    • 플랫폼

    플랫폼 탐색

    • Apple 플랫폼
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    피처링

    • 디자인
    • 배포
    • 게임
    • 액세서리
    • 웹
    • 홈
    • CarPlay
    • 기술

    기술 탐색

    • 개요
    • Xcode
    • Swift
    • SwiftUI

    피처링

    • 손쉬운 사용
    • AI 및 머신러닝
    • 앱 인텐트
    • Apple Intelligence
    • 게임
    • 보안
    • Xcode Cloud
    • 커뮤니티

    커뮤니티 탐색

    • 개요
    • Apple과의 만남 이벤트
    • 커뮤니티 주도 이벤트
    • 개발자 포럼
    • 오픈 소스

    피처링

    • WWDC
    • Swift Student Challenge
    • 개발자 이야기
    • App Store 어워드
    • Apple 디자인 어워드
    • 문서

    문서 탐색

    • 문서 라이브러리
    • 기술 개요
    • 샘플 코드
    • 휴먼 인터페이스 가이드라인
    • 비디오

    릴리즈 노트

    • 피처링 업데이트
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • 다운로드

    다운로드 탐색

    • 모든 다운로드
    • 운영 체제
    • 애플리케이션
    • 디자인 리소스

    피처링

    • Xcode
    • TestFlight
    • 서체
    • SF Symbols
    • Icon Composer
    • 지원

    지원 탐색

    • 개요
    • 도움말
    • 개발자 포럼
    • 피드백 지원
    • 문의하기

    피처링

    • 계정 도움말
    • 앱 심사 지침
    • App Store Connect 도움말
    • 새로 추가될 요구 사항
    • 계약 및 지침
    • 시스템 상태
  • 빠른 링크

    • 이벤트
    • 뉴스
    • 포럼
    • 샘플 코드
    • 비디오
 

비디오

메뉴 열기 메뉴 닫기
  • 컬렉션
  • 전체 비디오
  • 소개

더 많은 비디오

  • 소개
  • 요약
  • SwiftUI 그룹 랩

    Apple 엔지니어 및 디자이너들과 함께 WWDC26를 심층적으로 소개하는 세션에 온라인으로 함께하세요. 질문을 하고, 조언을 얻으며, 일주일간의 SwiftUI 관련 주요 발표 내용들에 대한 토론을 확인할 수 있습니다. 영어로 진행됩니다.

    챕터

    • 0:00:00 - Introduction
    • 0:01:03 - Is there an architecture (MVC, MVVM, VIPER, Clean Architecture, etc.) the SwiftUI team expects us to adopt, or is SwiftUI intentionally architecture-agnostic?
    • 0:04:31 - What's the difference between a @ViewBuilder closure and a separate view struct, and what are the performance pros and cons of each?
    • 0:10:19 - What are the most common anti-patterns in SwiftUI you've seen lately?
    • 0:17:26 - What's one concept in SwiftUI that takes developers the longest to understand, and how would you explain it?
    • 0:24:00 - In UIKit, cell reuse was fundamental to scrolling performance. Are lazy stacks and grids enough for infinitely scrolling layouts in SwiftUI, or should you drop down to a hosted UICollectionView?
    • 0:26:55 - The change from @ViewBuilder to @ContentBuilder looks great — how does it work, and why did it improve type-checking performance?
    • 0:29:52 - When your teams hit a mystery re-render storm, what's the real workflow — the new SwiftUI Instrument, Self._printChanges, or something else? And why the underscore?
    • 0:34:18 - With the @ContentBuilder compilation improvements, is there any reason to keep using @ViewBuilder, and when should we choose each?
    • 0:35:26 - SwiftUI property wrappers feel like opaque magic. If I don't fully grasp how @State manages its lifecycle, how can I safely adopt Swift Concurrency — what's the mental model connecting them?
    • 0:38:32 - What's the recommended way to implement navigation in iOS 27 if custom transitions are required — SwiftUI or UIKit+SwiftUI?
    • 0:40:38 - What's the recommended way to track a ScrollView's scrolling offset, to show certain view elements based on how far the user has scrolled?
    • 0:43:41 - Is there a way to build custom layouts that are lazy, similar to LazyVStack?
    • 0:45:15 - What's the most common mistake in large SwiftUI apps that ends up hurting performance?
    • 0:48:39 - Do @Observable properties automatically get allocated on the correct thread, or should we explicitly mark UI-referenced properties @MainActor?
    • 0:53:28 - In our multi-module app we return AnyView from protocols to hide concrete view types and avoid cross-module dependencies. Is there a more idiomatic way without AnyView?
    • 0:56:13 - Can you explain the performance tradeoffs (speed and memory) of compositingGroup, geometryGroup, and drawingGroup?

    리소스

      • HD 비디오
      • SD 비디오
  • 비디오 검색…
    • 0:00:00 - Introduction
    • Engineers from the SwiftUI team introduce themselves and set up a session covering SwiftUI architecture, view identity and updates, performance and view invalidation, the ContentBuilder change, navigation and scroll APIs, lazy layouts, and concurrency with @Observable and @State.

    • 0:01:03 - Is there an architecture (MVC, MVVM, VIPER, Clean Architecture, etc.) the SwiftUI team expects us to adopt, or is SwiftUI intentionally architecture-agnostic?
    • SwiftUI doesn't prescribe an architecture — it's designed to be architecture-agnostic, so use whatever pattern fits your app. @Observable helps here: it can model your data in AppKit/UIKit today and eases the transition to SwiftUI, and it's plain Swift not tied to any UI framework. If your chosen architecture integrates poorly or feels awkward passing data around, file feedback so the team can improve the ergonomics.

    • 0:04:31 - What's the difference between a @ViewBuilder closure and a separate view struct, and what are the performance pros and cons of each?
    • Both are valid; the choice is about clarity more than raw performance. Breaking a large body into smaller pieces makes views easier to reason about — a separate view struct gives SwiftUI a distinct identity and its own dependency tracking, so it can update independently, while a @ViewBuilder computed property is inlined into the parent and re-evaluates with it. Prefer separate view types when a subsection has its own state or should update on its own.

    • 0:10:19 - What are the most common anti-patterns in SwiftUI you've seen lately?
    • A frequently cited one is overusing GeometryReader — audit where you use it and prefer the Layout protocol (introduced a few years ago) where possible. More broadly, watch for patterns that cause excessive view invalidation. The framing the team prefers is less "anti-pattern" and more knowing the idiomatic right way to express layout and state.

    • 0:17:26 - What's one concept in SwiftUI that takes developers the longest to understand, and how would you explain it?
    • The hidden part is how SwiftUI updates via an internal graph — nodes represent views and edges represent their inputs (dependencies). SwiftUI uses that structure to determine which parts of your hierarchy need to update when data changes. Understanding that your view's inputs define its update behavior is the mental model that unlocks most performance and correctness questions.

    • 0:24:00 - In UIKit, cell reuse was fundamental to scrolling performance. Are lazy stacks and grids enough for infinitely scrolling layouts in SwiftUI, or should you drop down to a hosted UICollectionView?
    • UIKit relied on cell reuse mainly because views are reference types allocated on the heap, so every row carried a fixed allocation cost plus the overhead of inserting and removing it from the hierarchy. SwiftUI doesn't have that same problem, so you generally don't need to reach for a hosted UICollectionView. Lazy stacks and grids also bring real advantages: implicit prefetching starts evaluating the view bodies of cells about to scroll on screen, and because the view graph is made of individual nodes, SwiftUI can partially evaluate the next cell in the time left after rendering the current frame, then pause right before the next frame. One performance caveat: reconfiguring a cell's state in onAppear can change its size and force it to lay out again, throwing away that prefetched work — so do that setup in the initializer rather than in body or onAppear. As with onChange, prefer letting your data model drive changes, since both onChange and onAppear live in the view body and force it to recompute.

    • 0:26:55 - The change from @ViewBuilder to @ContentBuilder looks great — how does it work, and why did it improve type-checking performance?
    • See the What's New in SwiftUI talk for a visual walkthrough. The change reworks how the result builder is structured so the compiler type-checks builder content more efficiently, reducing the combinatorial type-checking cost that could make large view bodies slow to compile — without changing how you write your views.

    • 0:29:52 - When your teams hit a mystery re-render storm, what's the real workflow — the new SwiftUI Instrument, Self._printChanges, or something else? And why the underscore?
    • The recommended path is the SwiftUI Instrument, which visualizes updates and shows which views are re-evaluating and why. Self._printChanges remains a handy quick check for what caused a view to update; the underscore signals it's a debugging aid rather than stable API. Use the Instrument for systematic investigation of over-updating.

    • 0:34:18 - With the @ContentBuilder compilation improvements, is there any reason to keep using @ViewBuilder, and when should we choose each?
    • ContentBuilder and ViewBuilder are effectively the same — ContentBuilder is a type alias — so existing @ViewBuilder code keeps working unchanged. The one meaningful difference is reach: ContentBuilder can be used outside of views, so you can build your own SwiftUI-like DSLs and result-builder-based building blocks that aren't SwiftUI views. If you don't need that, there's nothing you have to change.

    • 0:35:26 - SwiftUI property wrappers feel like opaque magic. If I don't fully grasp how @State manages its lifecycle, how can I safely adopt Swift Concurrency — what's the mental model connecting them?
    • SwiftUI runs your view updates on the main actor, so @State and view body evaluation happen on the main thread by default — that's the anchor. Concurrency is about moving work off the main actor and bringing results back. You don't need to master @State's internal storage; the model is: UI state lives on the main actor, do async work elsewhere, and update that state back on the main actor.

    • 0:38:32 - What's the recommended way to implement navigation in iOS 27 if custom transitions are required — SwiftUI or UIKit+SwiftUI?
    • It depends on your app's needs, but iOS 27 adds a new SwiftUI API for customizing navigation transitions, with built-in support for cross-fades and other custom transitions. If those cover your case, stay in SwiftUI; only reach for UIKit interop when you need a transition the new API doesn't support.

    • 0:40:38 - What's the recommended way to track a ScrollView's scrolling offset, to show certain view elements based on how far the user has scrolled?
    • There are a few APIs depending on what you need: the onGeometryChange modifier, scroll effects (which offload work and are more efficient in some cases), and the scrollPosition modifier to know which item is currently on screen. Treat the raw content offset as an implementation detail — with lazy stacks it's only estimated from off-screen view heights and has no reliable semantic meaning — and instead trigger changes relative to the views actually on screen. There's also an API (covered in Rens' talk) for tracking what percentage of a view is visible, which is ideal for analytics or impression tracking. And a common way to build infinite scrolling is to put a view at the bottom of the list whose onAppear tells your networking layer to fetch more data.

    • 0:43:41 - Is there a way to build custom layouts that are lazy, similar to LazyVStack?
    • Not today — there's no protocol for describing a custom lazy layout; the Layout protocol is eager. If this matters for your use case, file a Feedback request with details, since developer demand helps prioritize adding it.

    • 0:45:15 - What's the most common mistake in large SwiftUI apps that ends up hurting performance?
    • Too much invalidation cascading from the top. A frequent cause is putting something high in the environment that many downstream views read — when it changes, everything observing it re-evaluates. Scope state so changes invalidate only the views that actually depend on them, rather than triggering wide downstream updates.

    • 0:48:39 - Do @Observable properties automatically get allocated on the correct thread, or should we explicitly mark UI-referenced properties @MainActor?
    • SwiftUI operates on the main actor, so state that views read is exercised on the main thread. Rather than annotating every property, let UI-facing state live on the main actor by default and only move computation off it deliberately. Decide where state lives based on who uses it: keep view-driving @Observable state main-actor-aligned, and isolate background work separately.

    • 0:53:28 - In our multi-module app we return AnyView from protocols to hide concrete view types and avoid cross-module dependencies. Is there a more idiomatic way without AnyView?
    • Prefer keeping type information over erasing it with AnyView. Use @ViewBuilder and an associated type (some View) on your protocol, or opaque return types, so the concrete view type stays hidden across module boundaries without paying AnyView's cost. Reserve AnyView for cases where you genuinely need heterogeneous, type-erased views.

    • 0:56:13 - Can you explain the performance tradeoffs (speed and memory) of compositingGroup, geometryGroup, and drawingGroup?
    • They serve different purposes. compositingGroup isn't primarily a performance tool — it flattens a subtree so visual effects apply to it as a whole. drawingGroup rasterizes content off-screen (via Metal), which can help with complex static visuals but costs memory and isn't free, so measure before using. geometryGroup isolates geometry changes so animations resolve correctly. Choose based on the effect you need, and profile rather than applying them speculatively.

Developer 바닥글

  • 비디오
  • WWDC26
  • SwiftUI 그룹 랩
  • 메뉴 열기 메뉴 닫기
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    메뉴 열기 메뉴 닫기
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    메뉴 열기 메뉴 닫기
    • 손쉬운 사용
    • 액세서리
    • Apple Intelligence
    • 앱 확장 프로그램
    • App Store
    • 오디오 및 비디오(영문)
    • 증강 현실
    • 디자인
    • 배포
    • 교육
    • 서체(영문)
    • 게임
    • 건강 및 피트니스
    • 앱 내 구입
    • 현지화
    • 지도 및 위치
    • AI 및 머신러닝
    • 오픈 소스(영문)
    • 보안
    • Safari 및 웹(영문)
    메뉴 열기 메뉴 닫기
    • 문서(영문)
    • 튜토리얼
    • 다운로드
    • 포럼(영문)
    • 비디오
    메뉴 열기 메뉴 닫기
    • 지원 문서
    • 문의하기
    • 버그 보고
    • 시스템 상태(영문)
    메뉴 열기 메뉴 닫기
    • Apple Developer
    • App Store Connect
    • 인증서, 식별자 및 프로파일(영문)
    • 피드백 지원
    메뉴 열기 메뉴 닫기
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(영문)
    • Mini Apps Partner Program
    • News Partner Program(영문)
    • Video Partner Program(영문)
    • Security Bounty Program(영문)
    • Security Research Device Program(영문)
    메뉴 열기 메뉴 닫기
    • Apple과의 만남
    • Apple Developer Center
    • App Store 어워드(영문)
    • Apple 디자인 어워드
    • Apple Developer Academy(영문)
    • WWDC
    최신 뉴스 읽기.
    Apple Developer 앱 받기.
    Copyright © 2026 Apple Inc. 모든 권리 보유.
    약관 개인정보 처리방침 계약 및 지침