2025. 6. 12. 16:40ㆍSwift, iOS Foundation
Platforms State of the Union - WWDC25 - 비디오 - Apple Developer
Apple 플랫폼의 최신 기술을 만나보세요.
developer.apple.com
안녕하세요 여러분!
어제 한국 시간 기준 새벽 2시, 팀쿡의 Keynote를 시작으로 일주일 간 진행되는 Apple의 WWDC25 행사가 시작되었습니다.
저는 포항에 있는 애플 디벨로퍼 아카데미에서 4기 러너들과 아카데미 동문, 여러 외부 초청 지인분들과 함께 WWDC 2025 W@TCH PARTY를 즐겼는데요.
Apple 생태계 OS의 "26" 버전 네임 통일을 시작으로 (visionOS는 2에서 냅다 26으로 쩜-프를 하게 되었다는..)
유리와 물방울 그 사이 어딘가에 해당하는 Apple의 새로운 디자인 시스템 Liquid Glass,
그리고 마치 이젠 인간이 스스로 하는 게 없는 것처럼 느껴지던 Apple Intelligence의 활용 (그 일환으로 Live Translation, Call Translation API, 온디바이스 기반 Foundation Models Framework 등등 정말 기술의 발전이 무섭다고 생각했습니다.)
그리고 Xcode에 내장되어버린 ChatGPT와 각종 Framework까지... 예상은 했지만 (요 근래 WWDC 중 가장) 신기하고 흥미로운 발표였던 것 같습니다.
그래서 이번 글에서는 WWDC25의 시작점이 될! Platforms State of the Union 세션을 빠르게 톺아보는 내용을 준비했습니다.
*Keynote가 제품/소비자 중심으로 이런 변화가 있어요~라는 것을 말하는 세션이라면, Platforms State of the Union은 실질적으로 개발자/디자이너를 중심으로 실질적인 플랫폼 기술의 변화, 도구 로드맵을 소개하는 기술 브리핑 세션입니다.
즉 iOS 개발자에게 있어 앞으로 어떤 기술을 새롭게 학습해야할지 알려주는 이정표 같은 하이라이트 역할인 셈이죠.
WWDC25 Platforms State of the Union은 아래 큰 네 개의 주제를 기반으로 진행되었습니다. 저도 이번 글에서 차례대로 요약해보도록 할게요! (각각 항목 앞에 붙어있는 서술 문장은 Apple이 직접 설명한 내용입니다 ^__^)
- New Design : (당신의 앱에 생기를 불어넣어줄) 새로운 디자인 Liquid Glass Material 사용법
- Apple Intelligence : (새로운 가능성을 열어줄) Apple Intelligence와 Machine Learning 사용법
- Xcode & Swift : (앱을 작성하는 방식을 바꿔주는) Xcode의 Generative intelligence와 Swift 6의 업데이트 활용법
- Frameworks : (앱의 성능과 기능을 한층 더 발전시키는) 발전된 SwiftUI와 Metal 등의 프레임워크 소개
1. New Design
1-1. Design : 개발자가 고려해야할 Design Thinking과 High-level Design Concept는?
☑️ Liquid Glass
이번 업데이트에서 새로운 디자인을 릴리즈하며, Apple이 고려했던 Goals는 세 가지라고 합니다.
Content-first, Universal design language, Joyful and delightful이 그 Design Thinking에 해당하는 것들인데요. 하나씩 설명을 들어보죠!
- Content-first
: 사용자가 가장 관심을 갖고 있는 콘텐츠에 집중시키는 것을 고려했다.
UI는 사용자 경험을 위한 수단이기에 사용자가 필요로 하면 쉽게 접근할 수 있어야 하고, 필요하지 않을 때는 백그라운드로 조용히 사라져야 한다는 의미!
즉 결국은, 사용자가 콘텐츠를 읽고, 만들고, 보는 경험 자체에 몰입할 수 있는 디자인이어야 한다는 것. - Universal design language
: 일관성과 조화, 유용성을 제공하기 위한 Universal design language를 사용했다.
특히 같은 사용자의 기기간 전환은 매끄럽게 유지함과 동시에, 각 Apple 플랫폼별 unique한 특징도 포함시켜 유지했다는 의미. - Joyful and delightful
: 역동성 (dynamism), 표현력 (expressiveness)을 중심으로 하며, 즐겁고 유쾌한 사용자 경험에 초점을 맞췄다.
이런 Goals를 기반으로 만들어진 Apple의 새로운 디자인은 Liquid Glass라 부릅니다.
Luquid Glass는 유리의 광학적 특성을 활용한 디자인으로,
아래에 있는 콘텐츠를 굴절시키고 / 주위의 빛을 반사하도록 설계되었으며 / 가장자리 (edge)에는 반응성 렌즈 (responsive lensing) 효과가 들어간 것이 특징입니다.
부드럽고 생동감 있게 Glass와 상호작용할 수 있는 것이 이번 새로운 디자인의 핵심이라고 언급합니다.
반사 하이라이트, 굴절, 반투명한 특성이 기기의 UI가 유리 화면이 된 것처럼, 마치 제어기는 떠 있는듯한 효과를 제공합니다.
☑️ High-level Design Concepts : Hierarchy, Harmony, Consistency
앱에 이번 새로운 디자인, Liquid Glass를 구현할 때 애플이 제시하는 세가지 기본 원칙은 아래 이미지와 같습니다.
Establishing Hierarchy 파트부터 살펴보겠습니다.
애플은 이번 디자인 업데이트를 통해 직사각형 디스플레이용으로 설계되었던 요소를
하드웨어의 둥근 모서리에 맞춘 스타일로 리디자인해 "앱 콘텐츠를 위한 더 많은 공간을 제공"한다고 설명합니다.
새로운 플로팅 레이어에 신중하게 Control들을 그룹화 (Grouping)하여 시각적 밀도를 제거하고, 콘텐츠가 디스플레이나 창의 가장자리 끝부분까지 늘어날 수 있기 때문이죠.
이때 Liquid Glass의 색상은 앱의 콘텐츠에 의해 결정됩니다.
라이트 모드와 다크 모드 스타일의 앱 환경에 맞춰 모두 스마트하게 자동으로 정해집니다. 물론 원하는 색상을 세밀하게 직접 적용하는 것도 가능하죠.
이를 염두해두고 앱의 주요 동작 (Key action)과 선택 상태 (Selection State), 그리고 현재 앱 상태 (status within app) 항목을 모두 고려해 디자인을 할 것을 Apple은 소개합니다.
Creating Harmony 파트에서 강조하는 것은 Dynamic한 Control을 활용해 Hardware, content, controls 사이에 조화 (Harmony)를 이루는 것입니다.
새로운 디자인은 제어기 (Controls)를 강조하고, 상태를 자연스럽게 전환해 사용자 경험 전반에 있어서 우아하게 계층 구조를 강화합니다.
현대 기기에서는 곡률, 크기를 비롯한 UI 요소에 사용하고 있는 Concentricity를 통해 시각적 조화를 제공하고 있는데요.
특히, 아래 보이는 것과 같은 둥근 형태의 디자인은 손가락의 기하학적 특성을 고려해 앱에서 더 자연스러운 터치 상호작용을 구현하도록 돕는다고 합니다.
새로워진 모양, 크기, 색상 등과 함께 타이포그라피도 개선되었습니다.
이는 콘텐츠 접근성을 높이기 위한 노력의 일환입니다. 아래 보이는 것처럼 타이포그라피를 크거나, 굵게, 혹은 왼쪽 정렬로 바꿀 수 있다고 합니다.
새로운 디자인 언어인 Liquid Glass를 앱에 적용하면, 모든 앱의 Component와 Control은 자동으로 업데이트됩니다.
모든 Apple Platform을 가로지르는 경험이 조화로워지는 셈인데요.
이는 Maintaining Consistency, 즉 앱의 일관성을 유지하는데 도움이 되는 요소라고 소개합니다.
1-2. Developer APIs : 앱을 만드는데 사용할 개발자용 API
새로운 디자인을 적용하기 위해서는 아래와 같은 흐름을 따르라고 소개합니다.
우선 최신 버전에서 기존 앱을 다시 컴파일한 다음 (Recompile) -> 새로운 디자인 API로 결과물 다듬어 앱에 맞게 디자인을 조정하고 (Refine and tailor) -> 새로운 디자인 원칙과 Liquid Glass 효과로 맞춤형 뷰를 업데이트하는 방향 (Liquid Glass Effects)입니다.
순서대로 개발자의 흐름을 따라가볼까요?
☑️ Recompile
앱에서 기존에 사용중인 프레임워크 뷰는 새로운 디자인으로 자동 업데이트된다고 합니다.
예를 들어, 기존에 사용중인 TabView는 Liquid Glass 탭바가 포함된 새로운 디자인이 자동으로 적용되고요.
NavigationSplitView를 사용하는 앱은 macOS와 iPadOS에서 자동으로 Liquid Glass 사이드바가 적용될 것이구요.
이 외에도 toolbar의 스크롤 시 발생하는 Glass 효과, toolBar를 자연스럽게 전환하도록 도와주는 NavigationStack, toolBar의 Menu나 popover 전환도 자연스럽게 이루어질 것입니다. 혹은 새로운 API를 사용한 추가 제어를 주는 것도 가능합니다.
지금 위에서 설명한 예시 뷰 외에도,
앱이 기존에 사용했던 아래와 같은 View의 대부분은 (플랫폼을 가리지 않고) 자동으로 디자인과 measure를 변화시킨다고 언급합니다.
☑️ Refine and tailor
자동으로 업데이트 되는 것은 되는거지만, 새로운 API를 적응할 수 있는 기회는 많아졌습니다.
툴바에서는 Content를 자동으로 분리하여 구룹화하는 ControlGroup, 확장 가능한 Menu, ToolbarSpacer를 사용한 추가 그룹화 등의 사례가 그것을 보여주죠.
또한 목적에 따라 색상을 지정하는 .tint(_:) 수정자나 주요 버튼 동작에 Prominent 스타일을 지정할 수 있는 API도 새롭게 추가되었습니다. (buttonStyle(.borderedProminent)
탭바에서는 추가적인 악세서리에 해당하는 tabBarBottomAccessory(_:), 스크롤 시 탭바를 축소해서 앱 콘텐츠를 위한 공간을 제공하는 tabBarCollapsesOnScroll(_:)을 활용할 수 있습니다.
이 외에도 Search, SideBar에서 Liquid Glass를 새로운 API Modifier를 사용해 적용하는 것을 세션에서 소개하고 있습니다.
(searchable(text:), DefaultToolbarItem, .searchable(_:), .flexibleHeaderContent(), .backgroundExtensionEffect() 등)
☑️ Liquid Glass Effects
이런 High-level Framework View 뿐만 아니라 Liquid Glass의 Custom Experience를 선사하게 해주는 추가적인 새 API도 소개합니다.
물론 앱마다 새로운 디자인의 적용 방식은 다르겠지만, 여기서 말하는 것은 tinting이나 interactivity와 같은 기능으로 완성되는 것들입니다.
세션에서 대표적인 예시로 소개된 것은 glassEffect(_:) API네요!
1-3. Iconography : 새 아이콘으로 앱을 디자인하는 방법
앱 아이콘에서 적용된 Liquid Glass는 레이어링 (layering)과 깊이 (depth), 그리고 활력 (vitality)을 가져다줄 수 있습니다.
이번 새로운 디자인에서는 라이트, 다크, 틴트에 이어 새롭게 적용해볼 수 있는 모드인 clear mode에 대해 소개합니다.
iPhone뿐만 아니라 Mac에서도 clear mode와 tint mode의 아이콘을 지원하죠!
새로운 디자인에 맞추어 아이콘의 레이어를 만들고, 강조 및 투명 효과를 사용하는 방법은 바로 Icon Composer입니다.
Apple은 기본 앱의 아이콘을 다시 디자인하면서 2~4개의 Layer를 사용하는게 가장 적절하다는 것을 알게 되었다고 합니다.
그것을 위해 만들어진 도구가 바로 Icon Composer인 것이구요.
Vector Contents를 가져다두고,
다중 렌더링 모드에서 레이어를 정리하거나 주석을 달고,
Blur나 반투명도 (Translucency)를 조절하고, 반사 하이라이트 정도를 확인하는 것만으로 앱 아이콘을 쉽게 만들 수 있는 것이죠.
Publish할 준비가 되면 Icon Composer는 single source artifact를 생성하게 되는데, 즉시 Xcode로 가져와 앱 아이콘으로 사용할 수 있습니다.
이 Icon Composer 기능은 Xcode에 포함되어 있습니다!
Design 파트의 마무리입니다.
SwiftUI나 UIKit, AppKit 중 그 무엇을 이용해도 이 새로운 디자인 시스템 Liquid Glass를 자연스럽게 만나볼 수 있습니다.
Xcode 16으로 만든 앱을 실행하면, User Interface는 변하지 않고 기존 디자인을 유지하는데요.
하지만 Xcode 26으로 동일한 앱을 다시 빌드하면 standard controls는 자동으로 새로운 디자인과 재료로 렌더링된다고 합니다! 간단한 것이죠!
그럼에도 불구하고, 앱의 UI를 평가하고 새로운 디자인을 적용하는데 시간이 걸리기 때문에 Xcode 26으로도 앱의 기존 디자인을 계속 유지할 수 있는 옵션 또한 제공한다고 합니다. (해당 옵션은 다음 릴리즈에서는 사라질 예정이라고 해요!)
2. Apple Intelligence
2-1. 새로운 세상이 시작되었다. Foundation Models Framework
강력하고, 빠르며, 개인정보를 보호하도록 설계되었고
오프라인 상태에서도 이제 Foundation Models 프레임워크를 사용해 바로 온디바이스 모델에 접근해 많은 기능을 구동할 수 있게 됩니다.
Foundation Models API 모델 기능을 사용하여 구동할 수 있는 Intelligence 기능은 텍스트 추출 (text extraction)과 요약 (summarization), 그리고 더 많은 것들 (and more)이 있습니다.
아래 보이는 것처럼 Swift 언어와도 자연스럽게 통합되어, 단 세 줄의 코드만으로도 Apple Intelligence의 기본 모델을 호출할 수 있을 만큼 사용이 간편합니다. (This is a first-class experience written in Swift for Swift)
Swift Concurrency와 API를 함께 사용해 답변을 하나의 응답으로 표시할지. 혹은 스트리밍 출력을 통해 점진적으로 보여줄지 선택할 수 있습니다.
이때 전자의 방식을 Batch Generation, 후자의 방식을 Streaming Generation이라고 부르는 군요.
기본적으로는 아래 왼쪽과 같은 사례에 적합하게 사용할 수 있지만,
다양한 개별 사용 사례에 맞추어 모델을 미세 조정 (fine-tune)할 수도 있다고 합니다.
또한 모델을 호출할 경우 Content Tagging과 같은 Adapter를 추가하여 특정 작업에서 성능을 더욱 발전시킬 수도 있구요.
모델에 프롬프트를 입력할 때 구조화된 응답을 생성해 앱에 바로 적용하려면 LLM이 필요하기도 한데요.
이때 Gudied Generation (@Generable)으로 간단히 처리할 수 있습니다.
자신의 데이터 구조에 맞추어 응답 모델을 생성 가능하게 만들 수 있는 것이죠.
모델에 요청을 보낼 때마다 구조체에는 구조에 맞는 정보로 채워지고 / 모델의 프롬프트로 들어가 데이터 유형의 완전한 인스턴스를 만들 수 있습니다.
또한, Foundation Models API는 tool 호출 기능도 지원합니다.
즉, model의 동작에 필요한 추가로 필요로 하는 정보를 식별하고, 그에 맞는 기능을 불러내는 것도 가능하다는 것입니다. 이와 동시에는 사용자 요청도 처리합니다.
예를 들면, 위키피디아에서 최신 콘텐츠를 가져오거나 앱의 정보를 참조하고 일기 입력을 생성하는 등의 작업을 수행할 수 있다는 것입니다.
이때 tool의 선택은 모델이 스스로 "어떤 것"을 "언제 사용할지" 결정해주니 programmatically하게 결정할 필요는 없습니다.
WWDC 세션에서 #Playground 매크로를 사용해서 예시로 테스트해보는 FoundationModels 프레임워크를 보고 정말 놀라웠습니다.
사용하는 방법이 너무나도 편했고,
@Guide 매크로를 사용해서 프롬프트에게 특정한 조건과 원하는 형태의 값을 받도록 할 수 있다는 것이 놀라웠습니다.
게다가 이게 온디바이스라는 점까지 있었죠!
(물론, 이게 앱에서 직접 적용해서 Preview를 바로바로 적용하기에는 성능적 문제가 있을 수 있어 이 Playground를 만든 이유가 이해가 되기도 하네요😊)
Apple이 "너도나도 너희들의 앱에서 우리의 이 놀라운 온디바이스 모델을 사용하라!"는 강한 의지가 느껴졌다고나 할까요?
Foundation Models API는 "온디바이스 모델"이기 때문에 사용자 데이터가 외부로 공개되지 않습니다.
서버에 있는 모델이나 다른 유저에게 전달되지 않기에 보안적인 측면에서 우수함을 Apple이 강조하고 있습니다. 그만큼 모델에 제공하는 데이터가 외부로 나가는 것에 우려를 표한다는 것이겠죠?
쉬운 사용방법, 오프라인에서 동작가능하다는 점, 특별히 계정을 설정해주거나 API Key와 같은 요소를 고려할 필요도 없다는 점, 게다가 무료라는 점까지. 정말 놀랍고 내년 내후년의 발전이 더욱 기대되었습니다. (물론 자세하게 써보고 앱에 적용하기 전까지는 모르는 일이겠지만요💬)
2-2. App Intents
앱의 기능과 역량을 향상시킬 수 있는 또 다른 방법은 App Intents framework로 앱의 visibility를 높이는 방법입니다.
App Intents는 사용자가 핵심 앱 기능을 쉽게 찾고 사용할 수 있도록 돕는 기능입니다. 앱을 사용하지 않을 때도요.
이 App Intent 프레임워크를 사용하면, 앱이 수행할 수 있는 작업과 / 처리 및 생성 가능한 콘텐츠인 앱 엔티티를 정의할 수 있습니다.
앱 인텐트는 context 인지를 위한 액션 버튼 경험, 위젯의 상호작용, 단축어 (Shortcut) 등록을 통한 자동화, 제어 센터 (Control Center)의 빠른 제어, Spotlight의 맞춤형 결과와 함께 사용할 수 있습니다.
특히 이번 MacOS Tahoe의 완전히 새로운 Spotlight 경험으로 사용자는 Spotlight에서 바로 생성한 모든 앱 인텐트에 접근할 수 있게 되었다고 합니다!
Visual Intelligence를 위한 새로운 App Intents Schema도 소개했습니다.
앱별 시각적 검색 로직을 Visual Intelligence에 적용할 수 있다고 합니다. (= app-specific Visual Search logic to content in Visual Intelligence)
이게 무슨 말이냐면, 검색 환경에서 바로 Intelligence 결과가 나와 -> 사용자는 딥링크를 통해 바로 앱으로 이동할 수 있다는 것입니다.
3. Xcode & Swift
3-1. Xcode 26
작년 WWDC에서 소개한 예측 코드 자동완성 (Predictive Code Completion) 기능으로 이야기를 시작합니다.
Swift Assist를 테스트하는 과정에서 많은 개발자들과 "Model" 파트에서 많은 피드백을 주고받았다고 합니다.
즉, 코드를 작성할 때 모델을 손쉽게 사용할 수 있어야한다는 것이죠.
(어차피 너희들 이미 다양한 플랫폼 챗 지피티...커서..등등의 모델을 사용해서 코딩하고 있잖아..근데 Xcode가 개발 워크플로우에 있어 중요할테니 우리가 여기에 코드를 작성할 때 쓰게 해줄게와 같은 느낌이랄까요..?)
이 분야는 reasoning과 multimodality, 그리고 그 이상의 분야로 빠르게 움직이고 있다고 합니다.
그래서 하고싶었던 결론이 무엇이냐?
☑️ Xcode Coding Assistant
💡 이제 Xcode에서 ChatGPT를 제공합니다.💡
상단 왼쪽 툴바에서 Coding Assistant를 통해 ChatGPT를 열 수 있고,
검색 결과에서 나온 코드 스니펫을 누르면 변경 사항을 볼 수 있고 -> 코드 변경 사항은 알록달록한 블록과 함께 보여줍니다.
특히, 커서처럼 Xcode에서 ChatGPT가 만들어준 코드를 자동으로 업데이트해서 반영할 수 있습니다.
모델과 상호작용할 때 Xcode는 작업 중인 파일, 선택된 코드 블럭, 오류와 연관된 파일 등의 모든 맥락을 자동으로 전송할 수 있습니다.
화면을 만들길 원하는 스케치 디자인을 던져줄 수도 있구요.
시각적인 아이디어 (drawing, mockup, 아니면 annotated scrrenshot과 같은 것)를 모델에 함께 전달해주는게 더 효과적이라고 합니다.
이 외에도 업무 흐름을 유지한 채,
테스트 및 문제 작성이나 문제 해결, 단순 코드 이해와 같은 매일 수행하는 업무 생산성을 높이기 위해 여러 기능들을 배치했다고 언급합니다.
Coding Tools는 글쓰기 도구와 같은 역할로 코드 작성에 사용합니다.
코드 어디에서나 가져올 수 있고, Preview나 Playground 생성, 혹은 문제 해결과 같은 동작을 제안받을 수 있습니다. 더 구체적인 동작을 그냥 요청하는 것 역시 가능하죠. (Message ChatGPT 칸에 입력하는 방식입니다!)
새로운 Playground 매크로는 코드 탐색을 위한 새로운 도구입니다. Preview와 비슷한 역할을 하죠. 무엇이든 미리볼 수 있습니다.
Document 동작에서는 자동으로 DocC 주석이 생성해주고, 렌더링된 문서도 볼 수 있습니다.
버그가 발생해도 "Generate Fix for Issue" 기능을 지원하고, (Intelligent error fixing)
대화기록 히스토리 (Conversation History) 기능도 지원해 - History Slider를 통해 시간 순으로 모든 코드의 변경사항을 추적해 손쉽게 롤백 (roll back)할 수 있도록 돕습니다.
이런 식으로 OpenAI와 공유하는 데이터는 자신이 직접 제어할 수 있습니다. (역시 보안적 장점을 언급하네요!)
다른 Provider로부터 모델을 사용한다면, 이를 Xcode로 가져오는 것도 가능합니다.
예를 들어, Anthropic API Key를 추가해 Claude 4 Opus나 Sonnet과 같은 최신 모델을 Xcode에서 직접 사용할 수 있는 것이죠.
그니까 결국 ChatGPT 말고도 본인이 원하는 모델을 원하는 환경 (로컬)에서 Xcode 26과 함께 사용하라는 말!
☑️ Xcode Voice Control
키보드 사용이 제한되는 경우 Xcode 26은 향상된 Voice Control을 통해 음성만으로 Swift 코드를 받아쓰고 인터페이스를 탐색하도록 도울 수 있습니다.
이를 Voice Control이라고 부르죠.
추가적으로, 이 외에도 앱의 현지화를 돕는 String Catalog에서 자동으로 usage descriptive comment를 생성해 정확한 번역을 위한 올바른 맥락을 새롭게 제공한다고 설명합니다.
3-2. Swift 6.2
Swift 6.2는 성능에 중점 (focused on performance)을 두고 있는 기능을 업데이트했습니다.
문법 내용 하나하나를 자세하게 + 깊게 들어가는 것은 아니고 Overview 개념으로 훑는 것이라 - 자세한 내용은 공식 홈페이지와 WWDC 세션에서 확인하는 것이 더 좋을 거에요☺️
☑️ InlineArray, Span Type
먼저 인라인 배열 (InlineArray) 입니다.
인라인 배열이란, 힙 메모리를 사용하지 않고 스택에 저장되고 / 다른 유형 안에 직접 저장 가능한 고정된 크기로 배열을 선언하는 방식입니다.
컴파일 시 배열의 크기를 알고 있다면 Swift 컴파일러로 최적화를 활용해 성능을 높일 수 있기 때문이죠.
새로운 Span 타입도 있습니다.
연속 메모리 (contiguous memory)에 빠르고 직접적으로 접근할 수 있도록 포인터에 대한 안전한 대안을 제시하는 기능인데요.
C 언어와 같이 안전하지 않은 언어 (unsafe language)와의 communication을 향상 시킬 때 도움이 되는 기능이죠.
☑️ WebKit, 외부 언어와의 Interaction
WebKit은 Swift를 코드 베이스에 도입해 새로운 strict memory safety feature인 opt-in을 활용함으로써 C API와의 안전한 상호작용이 이뤄지도록 돕는다고 합니다.
(그리고 역시 매번 빠지지 않는) C++, C, Java, JavaScript 등의 언어와 상호 운용성이 확장되었다고 언급합니다.
☑️ Concurrency
그리고 동시성 (Concurrency) 파트가 언급됩니다.
최근 Swift의 업데이트는 안전하고 안정적인 앱을 위해 데이터 레이스 (Data race)로부터 자유롭도록 하는 방향으로 진행되어 왔습니다.
이번 Swift 6.2의 업데이트는 특히 Swift 6에서 도입된 철저한 동시성 검증(strict concurrency checking) 기능을 토대로 단일 스레드 코드 (single-threaded code)를 더 쉽게 작성할 수 있도록 개선된 내용입니다.
구체적으로, 모듈이나 개별 파일이 MainActor에서 실행될 수 있도록 @MainActor 어노테이션 없이 구성할 수 있다는 내용입니다.
더 자세한건 역시 이후에 더 찾아봐야할 것 같아요! 그냥 그렇구나 정도로만 이해하고 넘어가겠습니다.
☑️ Containerization : Container Framework
Swift를 서버에서 활용할 때 (아직 저는 해본적도 없고... 많이 들어본적도 없지만)
server-side component 개발을 간소화하기 위해 컨테이너용 새 오픈소스 프레임워크 Containerization을 만들었다고 합니다.
Command line tool을 사용하면 Mac에서 바로 Linux 컨테이너 이미지를 생성, 다운로드, 실행할 수 있다고 하는데요.. 제가 쓸일이 있을지는 잘 모르겠습니다..!
아무튼 Swift 언어의 세계도 참 무궁무진하다는 생각이 드는군요!
4. Frameworks : "Better apps with less code"
새롭게 업데이트된 Apple의 네이티브 프레임워크를 간략하고, 다양하고, 빠르게 알아보도록 하겠습니다!
4-1. SwiftUI
☑️ Web APIs
이제 SwiftUI에서 WebKit의 WKWebView API로 앱에 웹 콘텐츠를 내장할 수 있습니다. (이게 아직까지 SwiftUI에서 안되었다고?)
☑️ Rich Text
SwiftUI 텍스트 편집기가 풍부해졌습니다.
Text Editor와 연결된 Text 바인딩을 String에서 AttributedString으로 바꿔주기만 하면 되죠.
이때 AttrubutedTextSelection selection에서 트래킹하면 선택한 텍스트의 서식을 control 할 수 있게 되는 기능입니다.
☑️ 3D Charts
SwiftCharts는 RealityKit으로 3D를 지원합니다.
특히 이번 업데이트에는 카메라와 직접 상호작용할 수 있는 지원 기능이 있어 모든 각도에서 차트를 회전하거나 확대할 수 있는 기능을 지원합니다.특히 visionOS에서 사용하면 공간 환경 (spatial environment)에서도 동작합니다. (사실 이게 애플이 핵심으로 의도한 것 같아요!)
☑️ Performance
앱을 빠르게 만드는 방법 중 가장 대표적인 것은 (List와 Table에서의) 부드러운 스크롤 (Smooth Scrolling)입니다.
iOS, SwiftUI, UIKit은 다음 프레임 렌더링을 시작하기 위해, 현재 프레임을 먼저 렌더링한 후 Idle time을 활용하는idle prefetch라는 기술을 활용합니다.
이 idle time을 활용하는 것이 스크롤 시에 프레임이 dropping되는 가능성을 줄여주는 도움이 되죠.
SwiftUI에서는 이 Idle prefetch 기술을 올해 Mac에도 도입한다고 소개합니다.
즉, Mac에서도 smooth scrolling에 기술적 향상을 가져왔다는 의미죠. 각종 플랫폼에서 적용할 수 있는 최적화 기능 + 성능 극대화의 목적입니다.
성능이 어느정도로 향상이 되었는지는 세션에서 자세한 수치로 소개하니 살펴보면 되겠습니다. (여기서는 생략!)
또한, 강하고 새로운 Performance instrument를 도입했습니다.
나만의 코드 최적화를 지원해 앱 성능에 영향을 미치는 순간을 파악할 수 있고, 커스텀 뷰가 업데이트되는 위치나 이유를 정확하게 분석할 수 있게 됩니다.
이 외에도 SwiftUI에서는 유연해진 SwiftData와 Entity Inheritance (엔티티 상속),
그리고 일반적인 데이터 유형에 대한 AttributedString과 같은 지원도 확인할 수 있을 것입니다.
이 외에도 위젯용 푸시 알림 (Widget push notifications), 드래그 앤 드롭 제어 기능 향상 (better control over drag and drop), 장면의 상호운용성 (Scene interoperability) 등 재밌는 기능이 많다고 소개합니다!
저도 빨리 각 세션을 들으면서 어떤 재밌는 기능들이 기다리고 있는지 확인해봐야겠어요 ^__^
4-2. Building Spatial App
visionOS 26과 관련된 내용입니다.
이 파트는 저의 전문 분야는 아니기도 하고 이해도 쉽지 않아 별도의 설명없이 키노트의 캡처본으로 정리를 하고자합니다.
크게는 Spatial App에서 적용할 수 있는 새로운 API 덕분에 쉽고 강력한 volumetric experience을 만들 수 있다고 합니다.
새로운 volumetric API, 고급 공유 기능, 흥미롭고 몰입감이 뛰어난 미디어 도구, 강력한 엔터프라이즈 기능으로 업데이트를 진행한 것들이 그 사례이죠.
이 내용들은 SwiftUI, RealityKit, ARKit에 주요 내용을 두고 있습니다.
대표적으로 다양한 몰입형 콘텐츠를 재생하고 배포할 수 있는 API, Apple Projected Media Profile과 같은 것을 소개하기도 했습니다.
4-3. Game
역시 잘 모르기에 카테고리 정도로만 크게 설명하고 넘어가보겠습니다.
이번 업데이트에서 Apple이 초점을 맞춘 세가지 영역은 아래와 같은 것들입니다.
- Graphics (고급 그래픽 기술) : Metal 4가 릴리즈되었습니다. 많은 기술 중에서도 기존 그래픽과 머신 러닝 추론을 결합하는 Neural Rendering 기술이 핵심처럼 소개하는군요.
- Developer tools (향상된 게임 개발자 도구) : Game Porting Toolkit이라는 것이 향상되어 Windows 게임을 Apple 플랫폼에 이식하는데 필요한 모든 기능을 제공하게 되었다고 합니다.
또한, Windows 환경에서 Remote로 게임을 빌드, 실행, 디버그할 수 있는 Mac Remote Developer Tools for Windows 툴을 소개했습니다. - System experience (플레이어에게 제공하는 멋진 게임 경험) : 게임 개발 이후에도 강력한 시스템 프레임워크를 적용해 플레이어들에게 몰입감이 뛰어난 그래픽과 오디오, 훌륭한 반응성을 자랑하는 입력, 매끄러운 게임 환경을 제공할 수 있다는 것을 의미합니다.
마무리!
Apple Silicon 이야기로 이번 세션은 마무리됩니다.
5년 전 마이그레이션이 시작되었고, 2년 전 전체 Product 라인업에 걸쳐 Apple Silicon으로의 마이그레이션이 끝났다는 점을 소개합니다.
즉, MacOS Tahoe 이후로 Intel Mac은 릴리즈되지 않을 것이라는 거죠. (Final release for Intel Macs)
위에서 설명한 Liquid Glass라는 새로운 디자인, 놀라운 Apple Intelligence, Xcode와 Swift의 업데이트, 그리고 다양하고 간편한 Apple의 Native Framework까지.
이 외에도 다루지 못한 재밌는 새로운 기능과 API가 정말 많다고 하네요!
- iPad의 새로운 MenuBar에는 Menu와 Commands를 생성할 수 있습니다.
- iOS, iPadOS에서 업데이트된 Background Tasks API (BGContinuedProcessingTask)를 사용하면 오랫동안 백그라운드에서 수행될 작업 (예를들어, 비디오 export와 같은 작업)을 시작할 수 있습니다.
- 이제 CarPlay에서는 Live Activity를 지원합니다.
- macOS의 터미널 디자인은 24비트 색상과 Liquid Glass에서 영감을 받은 새로운 테마 Powerline으로 새로워졌습니다.
- HTML 모델 요소는 3D 모델을 웹 페이지에 포함합니다. visionOS에는 이를 한 번에 입체적으로 보고 현실 세계로 드래그할 수 있습니다.
- visionOS에서 Look to Scroll을 선택하면 사용자는 콘텐츠의 가장자리를 보는것만으로 손을 사용하지 않고 탐색할 수 있습니다.
- Declared Age Range API는 사용자 개인정보를 보호하면서 연령에 맞는 앱 경험을 조정하는데도 활용할 수 있습니다.
- 새로운 PermissionKit 프레임워크는 부모의 감독하에 자녀들이 안전하게 소통하도록 지원하는 도구를 앱에 지원합니다.
- App Store 제품 페이지 전용 섹션에서 앱의 손쉬운 사용 기능을 강조할 수 있습니다.
- 보조접근 (UISupportsAssitiveAccess)의 경우 이제 보다 핵심적인 기능과 간소화된 User Interface로 앱의 경험을 맞춤화할 수 있습니다.
저도 이제 본격적으로 WWDC25의 변화들을 살펴보러 가보겠습니다 ^__^
긴 글 읽느라 모두 고생많으셨어요 ! 오늘 글은 여기까지 ✌🏻
'Swift, iOS Foundation' 카테고리의 다른 글
[GCD] 메인 스레드에서 DispatchQueue.main.sync를 사용하면 안되는 이유 (1) | 2025.06.06 |
---|---|
[Swift] COW (Copy-On-Write) 개념 완전 정복하기 (0) | 2025.06.03 |
[Swift] Swift Equatable 완전 정복하기 (0) | 2025.04.28 |
[iOS] Swift의 UI 작업은 반드시 Main Thread에서 동작해야한다? (0) | 2025.04.07 |
[Swift] some, any 제대로 구분해서 사용하기 (Opaque and Boxed Protocol Types in Swift) (0) | 2025.02.26 |