SwiftUI의 새로운 기능 (Explore related documentation, sample code, and more)
SwiftUI의 저성능 관련 개선사항부터 UI상의 버튼에 이르기까지 시스템 전반에 걸쳐 개선

목차
- Make the new design shine
- 새로운 모든 시스템 기능 리뷰
- Framework foundations
- 성능과 애니메이션, 레이아웃 관련 개선사항 공유
- SwiftUI across the system
- Apple 플랫폼 전반에 걸쳐 SwiftUI를 사용할 수 있는 새로운 환경 소개
- Expand SwiftUI views
- 웹 콘텐츠, 리치 텍스트 지원 등 SwiftUI 뷰의 새 기능에 대해 알아볼 것.
Make the new design shine
네비게이션, 버튼, 탭바, macOS, PadOS 등 디자인이 변경되었음

아이템 간 간격은 toolbar의 Spacer API를 사용해 조정.

Liquid Glass는 색조를 지원하기도 하는데 스타일과 색상을 적용하면 됨.


검색 위해 코드를 변경할 필요가 없이 패드, 폰, 맥 등에 한번에 적용됨.


외관을 새롭게 하려면 role에 search를 두어 역할을 갖도록 설정

Liquid Glass는 커스텀하게도 사용할 수 있음.

macOS에서 메뉴 막대 구축시 `.commands` API를 사용했었고, 아이패드에서도 같은 결과를 낼 수 있음.


사용자가 앱 사이즈를 자유롭게 조절할 수 있음.
SplitView를 사용하는 앱은 시스템이 가능한 공간에 따라 자동으로 열을 숨기거나 보임.

앱 크기 조정 기능을 구현하려면 UIRequiresFullScreen과 같이 화면을 전체 크기로 고정하는 API를 외부로 마이그레이션.
UIRequiresFullScreen 이건 PadOS 26에서 더 이상 지원되지 않음.
아이패드 사이즈 조정에 대한 부분을 확인하려면 Elevate the design of your iPad app(WWDC25) 확인


macOS에서도 windowResizeAnchor를 이용해서 사이즈를 동적으로 대응할 수 있음.
Framework foundations

강력한 성능 부터 사용 편의성 개선 및 새로운 콘텐츠 레이아웃에 이르기까지 SwiftUI로 앱을 개발하기 좋은 시점.
프레임워크 성능 개선 또한 여러 앱을 포함해 Apple 플랫폼 전반의 모든 앱에 이점을 가져다 줌.



SwiftUI에서 Lists, Scrolling, Profiling and Debugging이 개선되었음.
macOS에서는 10만개 항목 리스트 로딩이 6배, 업데이트는 최대 16배 더 빠르게 업데이트 됨.
리스트가 클수록 성능이 더 크게 향상되며, 플랫폼 전반에 적용.



SwiftUI가 다음 스크롤링하면 다음 프레임을 렌더링할 수 있도록 함.
하지만 Deadline까지 모든 작업이 완료되지 않으면 프레임이 떨어지게 됨.
iOS 및 macOS는 UI 업데이트를 통해 SwiftUI 스케줄링 경험이 개선
반응성을 향상시키고 SwiftUI가 다음 프레임에 대비해 더 많은 작업을 처리하도록 해줌.
이로 인해서 많은 스크롤을 하는 동안 앱이 중단될 가능성을 줄여줌.


LazyVStack을 ScrollView 안에 넣을 때 SwiftUI가 뷰가 나타나기 직전까지 로딩을 지연시킴
중첩된 ScrollView도 이와 같이 동일하게 동작함.
예를 들어서, 사진 캐러셀과 같은 뷰를 만드는데 좋음.

앱에 어떤 성능 문제가 남아 있는지 이해하려면 Xcode에서 SwiftUI 성능 도구를 사용하면 됨.
긴 body를 업데이트 또는 View 업데이트와 같은 다양한 성능 문제 영역에서 문제를 확인하고 조치할 여러가지 방법을 사용할 수 있음.
Optimize SwiftUI performance with instruments에서 상세한 정보를 확인할 수 있음.

또한 동시성에 부분을 확인하려면 위의 영상 참고할 것

애니메이션에는 AnimatableData이라는 프로토콜을 사용함.
드로잉 방향을 제외한 모든 모앙야 데한 속성을 애니메이션화 함.
전체 애니메이션 데이터 선언을 추가할 때 드로잉 방향을 제외하는 것만 해도 코드가 정말 많은데, 새로운 애니메이션 매크로(@Animatable)를 사용하면, 사용자 지정 애니메이션 데이터 속성을 삭제하고, SwiftUI로 하여금 자동으로 합성하도록 만들 수 있음.
드로잉 방향처럼 애니메이션을 원하지 않는 속성의 경우 @AnimatableIgnored을 사용해서 제외.

레이아웃은 이제 3차원으로 작업하는데 SwiftUI에는 이미 익숙한 수정자에 새로운 깊이 기반 변형이 도입되어, 직접적인 volumetic layout 없이도 더 많은 작업이 가능함.

VisionOS 앱에서 3D가 적합한데, 새로운 Alignment3D를 활용하면 시간에 따른 정렬을 조정할 수 있음.
이건 VisionOS 26의 공간 레이아웃 개선사항으로 Meet SwiftUI spatial layout (WWDC25)를 확인.
SwiftUI across the system
앱은 시스템 전반에 걸쳐 SwiftUI의 이점을 활용할 수 있음.

Scene에 대한 개선사항과 Widget 및 Control과 관련한 새로운 API 덕분에 앱이 플랫폼과 정말 잘 어우러짐.
SwiftUI는 다른 프레임워크와는 훨씬 더 잘 작동함.

Scene은 앱의 뷰에 대한 루트 컨테이너로 인터페이스의 분리된 부분을 나타냄.
앱의 `body` 영역에 선언하여 Scene에 접근할 수 있음.

올해부터는 Scene 브릿징을 통해 UIKit과 AppKit 라이프사이클 앱에서 SwiftUI의 Scene 요청이 가능함.
Scene bridging을 통해서 UIKit과 AppKit에서 라이프사이클 상호운용 가능함.
이를 통해서 SwiftUI에 있는 Scene 타입을 열거나 UIKit 또는 AppKit에서 바로 SwiftUI 기능을 사용할 수 있음.
MenuBarExtra나 ImmersiveSpace 같은 Scene 타입 등을 사용할 수 있음.
WindowStyle 등 다양한 Modifier와도 잘 작동함.

인지 장애가 있는 사용자를 위한 특수 모드인 AssistiveAcess가 존재.

올해 SwiftUI에는 AppKit 작업에 몇가지 큰 개선사항이 있음.
Scene bridging 외에도 SwiftUI 뷰가 있는 시트도 표시할 수 있음.
AppKit 제스처도 SwiftUI로 연결할 수 있음.
interface Builder에서 NSHostingView를 사용할 수 있음.

watchOS 26과 macOS Tahoe는 커스텀 제어 기능을 제공함.


올해부터는 위젯을 VisionOS와 CarPlay에서 사용할 수 있음.
VisionOS는 새로운 레벨 환경 변수를 사용해서 공간을 사용자가 지정할 수 있음.
푸시 기반 업데이트 API 등 올해 여러가지가 새롭게 나옴.

SwiftUI View 기능이 확장되었는데, 리치 텍스트 편집부터 3D 차트에 이르기까지 기존 SwiftUI의 기능과 외관이 새롭게 단장됨.
앱에서 웹 콘텐츠를 곧바로 임베드 할 때 WebKit에서 WebView와 같은 SwiftUI API 전체를 활용할 수 있음.
WebView는 앱에서 웹 콘텐츠를 표시하는 새로운 SwiftUI 뷰로 Safari와 동일하게 WebKit으로 구동.
페이지를 커스텀하고 이와 상호작용하려면 WebView로 새 observable 모델 유형인 WebPage를 표시할 수 있음.
WebPage는 웹과 풍부한 상호작용을 가능하도록 하는데, 프로그래밍을 통해 페이지에서 탐색하고 페이지 속성에 접근함.

WebKit이 SwiftUI를 지원하는 새로운 방법으로 사용자 에이전트 커스텀이나 JavaScript 호출, 커스텀 URL 스킴 등이 생겼고 더 다양해짐.

Chart3D를 통해서 3차원 플롯을 보여줄수도 있음.


올해는 mac에 드래그를 도입해서 여러 항목 주변으로 드래그를 할 수 있음.
새로운 dragContainer도 macOS에서 사용할 수 있음.
이렇게 하면 뷰가 드래그 항목을 담는 컨테이너와 동일해지며, 커스텀 선택 동작과도 함께 작동함.
드래그 앤 드롭이 실행될 때 항목은 지연 드래그하도록 SwiftUI가 자동으로 요청함.

신규 `dragCofiguration` api로 드래그 작업을 사용자화 할 수도 있음.
`onDragSessionUpdated`는 이벤트를 관찰 가능하도록 함.
`dragPreviewsFormation`은 드래그 할 때 미리보기가 어떻게 뜨는지 확인하기 위해서 사용


TextView에 이제 AttributedString이 지원됨.
TextEditor에서 AttributedString에 바인딩을 통해 내장형 텍스트 포맷팅 제어 기능을 사용할 수 있음.
(참고)