UIKit 앱 현대화하기 (Modernize your UIKit app) - WWDC26
목차
- Adaptivity
- 아이폰 앱에서 새롭게 적용되는 적응형 레이아웃 방식
- Bar and menus
- 탭 바, 네비게이션 바, 메뉴 등 새로운 API 소개
- Apple Intelligence
- 새로운 기능과 몇가지 변경사항 소개
- Agentic coding
- 에이전트가 도와주는 새로운 스킬 소개
Adaptivity
미러링을 통해서 아이폰도 런타임에 사용 가능한 씬 크기에 맞게 조정할 수 있음.


즉, 이제는 아이폰 하나의 사이즈만 지원하는 것이 아니라 여러 사이즈를 지원해야 함.

런타임에 더 잘 동작하기 위해서는 환경에 맞게 대응이 필요
- App lifecycle
- 적응형 앱의 기반을 위해서는 App LifeCycle에서 Scene 라이프사이클이 필요
- Main Screen
- UIScreen.main 교체
- User interface idiom
- pad 혹은 phone 형태의 레이아웃 선택 x
- interface orientation
- 인터페이스 방향 확인을 처리하는 방법도 다룸

UIScene 라이프사이클은 최신 SDK로 빌드시 필수로 해당 작업 없이는 이제 더이상 앱이 실행되지 않음.

iPhone이 Mac에서 미러링되거나 혹은 iPad의 앱을 다른 외부 디스플레이로 이동하는 등
즉, 리사이징이 가능한 환경에서는 UIScreen.main에 대한 사용은 앱이 실행되는 환경에 대해 잘못된 정보를 제공.
UIScreen.main을 참조하는 대신 window의 scene으로 접근
Screen을 전역으로 참조하는 유틸리티 함수가 존재한다면 UIScreen을 파라미터로 받는 형태로 변경

다만, 가장 좋은 방법은 UIScreen에 대한 참조를 완전히 제거하고 적응형(반응형) 앱에 더 적합한 다른 API를 사용할 것.
화면 배율에 접근하는 코드를 예로 들자면 trait collection의 displayScale으로 대체
View와 ViewController는 자동으로 trait collection을 업데이트하고 Visible한 계층이 아닌 경우에도 자동으로 fallback을 제공.
즉, override되는 모든 지점들도 추적하고 있어서 변경사항을 명시적으로 업데이트할 필요가 없음.
layoutSubviews, updateProperties와 같은 레이아웃 및 draw 메서드 등 자동으로 추적됨.

자동으로 관찰할 수 없는 곳에서는 수동으로 관찰하는 것 또한 가능함.
해당 메서드를 통해 특정 trait이 변경될 때 실행한 내용을 클로저에 정의할 수 있음,


Scene이 항상 전체 화면이 아니기 때문에 view의 bounds나 scene의 geometry를 통해서 코드를 변경해야 함.
`UIWindowScene.effectiveGeometry`는 앱이 사용할 수 있는 공간에 대한 정보를 제공하며 geometry에 대한 변경 감지는 UIWindowSCeneDelegate의 didUpdateEffectiveGeometry을 구현함으로써 확인할 수 있음
SplitView를 사용할 때 내부에서 화면이 나타나는 경우가 있어서 view.bounds로 변경하면 레이아웃을 더 동적으로 안전하게 사용할 수 있음


user interface idiom은 더이상 레이아웃을 결정하는데 의미가 없음.
미러링이 가능한 환경에서는 리사이징이 가능하기 때문에 `size class`를 활용하고 idiom에 관계 없이 공간을 활용해야 함.



interface orientation도 더이상 레이아웃을 결정하는데 의미가 없음.
Mac에서 iPhone Mirroring에서 앱은 가로 및 세로 비울과 무관하게 항상 세로 인터페이스 방향(portrait)으로만 실행.
앱의 방향 확인도 size class를 사용하도록 업데이트 해야함.
CoreMotion/CoreLocation 등 데이터에는 view를 연결하여 뷰의 좌표 기준으로 계산된 데이터를 얻을 수 있음.



아이패드에서 탭바는 현재 환경이 사이드바를 지원할 때 전환될 수 있음.
아이폰에서는 기본적으로 탭바를 모두 지원하지만 iOS27의 새 기능으로 iPhone 앱도 사이드 바를 선택할 수 있음.

사이드바를 현재 사용할 수 있는지 확인하며 사용할 수 없다면 UI를 앱의 다른 부분에 표시해야 함.



탭바에서 prominent 탭을 지정되면 강조되고 스크롤 중 탭 바가 축소되어도 항상 표시됨.
네비게이션에서 최소화에 대한 부분도 달라지는데 필요한 경우 설정할 것.
Scroll Edge effect에서 .automatic은 더이상 soft와 hard 스타일 간에 전환하지 않음.

메뉴에 설정한 이미지는 기본적으로 표시되지 않을수도 있음.
이미지를 계속 표시해야 하는 경우 preferredImageVisibility 속성을 설정


앱 내에서 바로 Siri를 사용할 수 있는데 앱에 더 특화된 정보를 제공하려며 AppEntity를 주석으로 추가할 수 있음.
또한, 앱에 Drag and Drop을 지원한다면 Siri가 리소스를 로드할 수 있음.
컨텍스트 메뉴에서 Apple Intelligence가 호출되면 시스템이 사용 가능한 Drag and Drop Delegate 메서드를 호출하여 콘텐츠를 로드함. (UIDragInteractionDelegate)
드래그 세션은 사용자 제스처 없이 시작될 수 있으므로 세션이 시작되기 전 애니메이션이나 모달 UI를 표시하지 말 것.
사용자가 드래그를 시작할 때 표시되는 상태 있는 UI가 앱에 있다면 sessionDidMove에 넣기.

마지막으로 Agentic Coding을 지원하며 Xcode가 아닌 다른 도구에서 사용하려면 위의 명령어를 입력하면 마크다운 파일이 생성되어 워크플로에서 가져올 수 있음.
(참고)
https://www.youtube.com/watch?v=rAvlt9Dvgbo
'Apple > WWDC' 카테고리의 다른 글
| What's new in SwiftUI (WWDC26) (0) | 2026.07.02 |
|---|---|
| SwiftUI의 Observation 알아보기 (Discover Observation in SwiftUI) - WWDC23 (0) | 2026.05.16 |
| SwiftUI 핵심 기능 (SwiftUI essential) - WWDC24 (0) | 2026.05.16 |
| 머신 러닝 기반 비디오 효과로 앱 향상하기 (Enhance your app with machine-learning based video effects) - WWDC25 (0) | 2026.05.07 |
| SwiftUI의 새로운 기능 (Explore related documentation, sample code, and more) -wwdc25 (0) | 2026.05.02 |