WWDC26에서 바라는 Foundation Models와 SwiftUI의 변화
WWDC26 wishes
핵심 요약
- Foundation Models에 이미지 입력을 추가하면 기기 내 이미지 분석으로 음식의 영양 정보 추정이나 청구서 처리 같은 기능을 만들 수 있다고 제안한다.
- 사용자 정의 Layout을 LazyVStack처럼 지연 처리할 수 있는 API가 필요하며, 구현 방식을 개발자가 제어하거나 프레임워크가 자동 처리하는 두 방향을 제시한다.
- SwiftUI에 UITableView·UICollectionView와 같은 뷰 재사용 기능이 없다는 점을 지적하며, 대규모 컬렉션을 위해 UIKit으로 내려가지 않고 재활용할 방법을 희망한다.
도입
글은 WWDC26을 앞두고 Apple 개발자가 일상적인 개발에서 느끼는 세 가지 빈틈을 제시한다. Foundation Models에는 이미지 입력이 없고, 사용자 정의 Layout에는 지연 로딩 선택지가 없으며, SwiftUI에는 뷰 재사용 기능이 없다는 내용이다. 이는 발표된 기능을 설명하는 글이 아니라 작성자가 바라는 개선 사항을 정리한 글이다.
상세 요약
Foundation Models에 이미지 입력
작성자는 개인 프로젝트에서 Foundation Models를 추천 시스템, 코칭, 인식 기능 등에 활용한다고 설명한다. 부족하다고 느끼는 기능은 이미지 입력이다. 이미지 분석이 지원되면 기기 내 이미지 인식을 활용해 음식의 열량을 추정하거나 청구서를 처리하는 앱을 만들 수 있다는 구상이다.
예제에서는 CGImage를 입력으로 받아 FoodInformation을 생성한다. 이 타입은 음식 이름, 추정 열량, 건강식 여부를 담는다. LanguageModelSession에 음식 이미지로부터 영양 정보를 추정하라는 지시를 넣고, respond(generating:for:)로 구조화된 결과를 요청하는 형태다. 이는 제안된 사용 예이며, 글은 이미지 입력이 이미 제공된다고 말하지 않는다. 작성자는 이미지 입력과 함께 더 큰 context size도 바라는 기능으로 언급한다.
관련 구현을 다룬 Foundation Models에 이미지와 파일 입력하기도 참고할 수 있다.
사용자 정의 Layout의 지연 처리
SwiftUI의 Layout protocol로 flow layout이나 육각형 레이아웃 같은 사용자 정의 배치를 만들 수 있지만, 작성자는 LazyVStack·LazyHStack처럼 지연 처리할 방법이 없다고 지적한다. 예시의 FlowLayout은 하위 뷰를 행으로 나누고, 각 행의 높이와 너비를 계산한 뒤 위치를 지정한다. 이 과정에서 모든 하위 뷰를 다루는 사용자 정의 레이아웃에 지연 처리 기능을 더하고 싶다는 요구가 나온다.
해결 방식으로는 Layout을 확장하는 LazyLayout protocol을 제안한다. 또는 개발자가 지연 동작을 직접 제어하지 않아도 프레임워크가 별도 코드 변경 없이 처리하는 방안도 제시한다. 글은 두 방식 중 하나를 확정하지 않고 선택지로 남긴다.
SwiftUI의 뷰 재사용
작성자는 SwiftUI에 뷰를 재사용하는 메커니즘이 없다고 설명한다. 현재 뷰 표시 방식은 eager 또는 lazy이며, UITableView나 UICollectionView와 같은 재사용 기능은 제공되지 않는다고 말한다. 따라서 일부 상황에서는 UIKit을 사용해야 한다.
지연 레이아웃만으로 모든 문제를 해결할 수는 없다는 것이 작성자의 관점이다. 사진이나 메일함처럼 큰 컬렉션을 표시할 때 사용할 재사용 방식을 원한다. 가능한 형태로 RecyclerView와 비슷한 API를 들거나, ForEach 내부에서 구조적 identity를 기준으로 유사한 뷰를 식별해 재활용하는 구현을 제안한다.
WWDC26 이후 SwiftUI의 주요 변경 사항은 SwiftUI 변경 사항을 별도로 정리한다.
결론
작성자가 원하는 변화는 온디바이스 이미지 분석, 사용자 정의 레이아웃의 지연 처리, 컬렉션 뷰 재사용을 SwiftUI에서 다루는 것이다. 현재의 SwiftUI만으로 해결하기 어려운 부분은 UIKit을 사용하거나 복잡한 우회 방법을 마련해야 한다고 설명한다. 세 제안은 개발자가 겪는 구체적인 제약과 그에 대한 기대를 구분해 보여준다.