[WWDC] WWDC24 추천 세션들 — 1탄

사실 추천이라기보다는 여전히.. 저의 메모장에 가깝달까여..?

naljin
17 min readJun 17, 2024

들어가기 전에

개-하! 저번주는 덥덥 주간이었져,, 다들 잘 보고 계신가요?ㅎㅎ

저는 게으름 이슈로,, 일단 봐야할것 같은 What’s new 들만 얼레벌레 따라가는 중입니다….?

여기서 꿀팁! 크롬으로 보면 스크립트가 아직 안뜨는데, 개발자 앱으로 들어가면 스크립트 뜨거든여? 그거 쫙 복붙해다가 챗 지피티한테 요약해줘라고 하면 기깔나게해줌여!

그래서 사실 요 내용도 안쓰려고 하다가,, 그래도 제가 인상 깊었던 내용들 위주로 간단히 정리하는게 개인적으로 보기가 좀 더 편하더라구여

그래서 반년만에 돌아왔슴니당 ㅎㅎ

히히ㅣ..

나머지 본 것들 + 보려고 하고 있는 것들은 따로 2탄으로 돌아올게용 (근데 자막 뜨면 보고 싶은것도 한 서너개 있어서… 언제가 될진..?)

작년 WWDC 23 추천 세션에서는 아래와 같이 분류했었는데요!

⭐️ 따로 정리해볼만 함. 다시 보면 좋음.

❤️ 인터레스팅

👀 그냥저냥 봄

사실 왓츠뉴는 그냥 기본적으로 봐야하는거니까… 따로 분류는 하지 않겠습니당 ㅎ (이러고 안본 왓츠뉴도 있음 ㅎ) 튼 2탄엔 하겠슴여!

그리고 각 세션에 대한 내용은 overview 나 핵심적인 내용을 담고 있다기 보다는,, (물론 그런것도 있지만요!) 그냥 제가 기억하고 싶은 것들 위주로 짧게 적어둔거라 빠진 내용도 많습니다잇! 사실 그냥 ㅈㅔ 개인 메모장임!!!

아 틀린 내용은 언제든 환영이에요!! 그럼 시작 ㄱㄱㄱ

What’s new in Xcode 16

  • Swift 와 Apple SDK 전용으로 학습된 온디바이스 코딩 모델 덕분에 코드 자동완성이 나아짐.
  • swift 6 는 Concurrency safe 를 보장함. 미리 적용 가능.
  • 프리뷰 빨라짐. 관련 매크로도 새로 나옴.
  • Explicit Module 등장. 향상된 동시성, 더 나은 진단, 더 빠른 디버깅 제공. Swift 에서는 “Exclicitly Built Modules” 를 YES 로 설정하면 됨.
  • 이를 통해 컴파일 단위를 1. 스캔, 2. 모듈 빌드, 3. 오리지널 코드 빌드 으로 세분화 함. 이전에는 이 세 단계가 소스 파일 컴파일로 퉁쳐졌음.
  • 이런 방식으로 Swift package itegration 도 개선되어서 package resolution 이 끝나기를 기다리지 않고도 빌드를 대기열에 추가 가능.
  • 행잉이나 main thread 에러 잡는것 외에도 앱 런치 시간 같은거 분석 가능 (disk write, laucn diagnostsics)
  • 디버그 포인트 걸고 콜스택 보는걸 코드 조각으로 보여줌
  • 새로운 테스팅 프레임워크 등장. @Test 붙이면 테스트코드 됨. @Test(arguments: ) 같이 인자 넘겨서 한 테스트코드에서 여러개 케이스 테스트 가능. @Test(.tags(.planting)) 같이 태그로 묶어서 그룹화할 수도 있음
  • Instruments 에서 Flame Graph 통해 정밀한 실행 추적을 관찰 할 수 있음

What’s new in Swift

  • swift 5 에서 ABI 도입. 이는 더 작은 다운로드 사이즈를 뜻함. 왜냐면 이제 애플리케이션에 Swift 표준 라이브러리 전체를 포함하지 않기 때문. 대신, Swift 표준 라이브러리는 OS 자체의 일부가 되어, 해당 OS에 최적화되고 모든 Swift 앱 및 프레임워크에 공유됨. 이는 근본적인 변화를 나타내며, 이제 우리는 Swift의 완전한 표현력을 사용하여 더 나은, 더 안전한 API 및 프레임워크를 구축할 수 있게 됨.
  • swift 6 등장.
  • cross compilation 가넝 (ex. linux)
  • Foundation -> swift-foundation 진행 중. 이 패키지는 모든 플랫폼에 대한 Foundation 의 Swift 구현을 목표로 함. 이건 오픈소스임.
  • Swift Testing 등장. label 달아서 설명 쓸 수도 있고, tag 달아서 그룹화 할 수도 있고, arguments 넘겨서 다양한 input 에 대해 테스트 돌릴 수도 있음.
  • Xcode에서 코드를 빌드하는 방법에 개선 사항을 도입 -> Explicit Module 등장.
  • Swift 코드를 빌드할 때 각 모듈은 종종 SDK에서 가져온 다른 모듈에 의존함. Swift 컴파일러가 SwiftUI와 같은 모듈을 만나면, 해당 모듈의 binary version 을 빌드해야 할 수도 있음. 이 과정은 implicit 하게 발생하기 때문에 일회성으로 속도가 느려지는걸 제외하고는 인식하지 못할수도 있음. 하지만 실제로는 많은 작업이 숨어 있음. 왜냐하면 사용되는 각 모듈을 순차적으로 빌드해야 하며, 이 모듈 중 일부는 Objective-C 또는 C++로 작성되어 있을 수 있음.
  • 다른 Swift 모듈이 빌드될 때는 동일한 binary 모듈을 재사용하지만 준비될 때까지 기다려야하기 때문에 원하는 만큼의 병렬성을 얻을 수 없음. 게다가 디버거는 자체적으로 binary 모듈 버전을 빌드해야 할 수 있음. 이로 인해 디버거에서 변수를 처음 출력할 때 긴 일시 중지가 발생할 수 있음.
  • 명시적으로 빌드된 모듈은 이러한 암시적 단계를 명시적인 빌드 단계로 전환. 이렇게 하면 모듈 빌드를 병렬로 수행할 수 있으며 빌드 로그에 명확하게 나타남. 결과적으로 더 예측 가능하고 신뢰할 수 있는 빌드가 이루어짐. 디버거도 이제 빌드와 이진 모듈을 공유할 수 있으므로 디버깅이 더 빨라짐.
  • Swift 6 에서는 noncopyable 타입을 모든 generic context 에서 지원
  • Embedded Swift 등장. ARM 및 RISC-V 마이크로 컨트롤러와 같은 임베디드 환경을 대상으로 할 수도 있음.
  • C++ 과 호환 가능
  • Swift 6 에서 Typed throws 등장. 원래는 에러 throws 할때 타입 지정 못했음. 그래서 catch let error as MyError 처럼 캐스팅 필요했음.
  • 근데 이제 func something() throws(MyError) -> Int 처럼 던질 error type 지정 가능. 그럼 이 함수 catch 쪽에서 핸들링할때는 error 타입이 MyError 인것.
  • 그냥 원래대로 throws 하는건 throws(any Error) 와 같음. throws 없는건 throws(Never) 와 같음
  • Swift 6는 default 로 Data race safety 보장. data race 이슈를 compile time 에러로 끌어 내림.
  • Swift concurrency 는 data isolation 을 달성하기 위한 매커니즘으로 디자인 됨 (ex. actor — mutable state protecting, sendable — safe data sharing..)
  • 새로운 Swift 6 로의 language mode 준비가 완료되면 채택할 수 있음 (모듈 단위로도 채택 가능). Data race safety 는 Swift 6 language mode (Build Setting > Swift Language version) 를 활성화함으로써 관리되는 유일한 업데이트. 다른 모든 업데이트는 Swift 6 컴파일러 (Xcode 16) 로 업데이트할 때 기본적으로 사용 가능.
  • 동시성에서 안전한 접근을 위해 Swift 6 의 Synchronization 모듈에서는 AtomicsMutex 라는 low-level primitives 도 등장.

What’s new in UIKit

  • Document 앱의 시작 화면이 재설계되어 앱의 개성을 더 잘 나타낼 수 있음.
  • iPadOS 18 에서 탭바가 좀 더 컴팩트하게 바뀜. sidebar 쓰는 앱은 UITabBarController API 를 통해 tab / sidebar 왔다갔다하는 UI 제공 가능 (미니마이즈 될때 sidebar 이 tabbar 로 전환됨)
  • iOS 18 에서 새로운 zoom transition 등장. 상호작용적이고 끊김 없는 전환 제공.
  • iOS 18 에서는 애니메이션과 제스처 인식 측면에서 SwiftUI 와 UIKit 과의 호환성 높임. 스유 애니메이션 타입을 UIKit 에서도 쓸 수 있고, UIGestureRecognizerRepresentable 을 통해 UIKit의 gesture recognizer 를 SwiftUI 계층에 추가 가능.
  • iOS 18 에서는 trait 의 사용과 변경 사항의 핸들링이 쉬워짐. UIKit 이 자동 trait tracking 을 지원하면서 trait 가 변경 될 때 setNeedsLayout 등의 적절한 method 를 호출함. 더 궁금하면 Automatic trait tracking 문서 보기
  • colleciton / tableview 가 UITraitCollection.listEnvironment 를 갖게 됨. 이를 통해 셀 업데이트 단순화 가능. 이는 UIListContentConfiguration / UIBackgroundConfiguration 에서 사용.
  • UIUpdateLink 등장. 좀 더 복잡한 애니메이션을 편하게 만들어줌. CADisplayLink 와 비슷하긴 한데, 자동 뷰 트래킹이나 더 나은 퍼포먼스 등의 특징이 있음. 더 궁금하면 UIUpdateLink 문서 보기.
  • SF symbol 에서 .wiggle, .breathe, .rotate 효과 추가. magic replace 기능도 추가됨.
  • 새로운 텍스트 포맷팅 패널 제공. 여기서 하이라이트 기능이랑 Writing Tool 추가.
  • iOS 18에서는 UICommand, UIKeyCommand, UIAction 을 사용하여 iPhone 의 시스템 호출을 지원. 예를 들어 iPhone 미러링을 통해 Mac에서 앱을 사용할 때, Mac 키보드로 UIKeyCommand를 호출 가능.
  • iPadOS 17.5에서는 Apple Pencil Pro의 squeeze 제스처 등을 통해 실행 취소와 같은 새로운 기능을 제공.

What’s new in SwiftUI

  • .sidebarAdaptable modifier 통해 sidebar 와 tab bar 의 전환 쉬워졌고, 탭바가 floating 한 형태로 나타남.
  • .presentationSizing modifier 통해 form 이나 page 등 시트의 크기를 간편하게 조정 가능
  • zoom navigation 전환 지원
  • ControlWidget 을 통해 Control Center 나 잠금 화면에 표시할 수 있는 버튼과 토글을 쉽게 만들 수 있음
  • Swift Charts에 새로운 API가 추가되어 함수 그래프를 쉽게 그릴 수 있음.
  • TableColumnForEach 를 통해 데이터에 따라 동적으로 테이블 열 관리 가능
  • MeshGradient 를 통해 다양한 색상을 혼합하여 그라디언트 효과를 적용 가능.
  • DocumentLaunchScene 을 통해 개성 있는 시작 화면을 만들 수 있음. 큰 제목과 배경, 액세서리 뷰 등을 커스텀하게 설정 가능
  • SFSymbol 에는 Wiggle, Breathe, Rotate 효과 추가됨. MagicReplace 로 심볼 배지를 매끄럽게 애니메이션 처리할 수도 있음
  • iPadOS 17.5에서 더블탭, 스퀴즈 등 새로운 Apple Pencil 제스처를 활용해 더 많은 입력 옵션 제공
  • iOS 기반의 라이브 액티비티가 watchOS에서도 자동으로 표시됨.
  • 위젯과 라이브 액티비티에서 다양한 날짜 형식을 사용하여 라이브 시간과 날짜를 표시할 수 있음.
  • ForEach(subviewOf:) api 생김. 더 알고 싶으면 Demystify SwiftUI containers 보기
  • @Entry 매크로를 통해 EnvironmentKey 와 EnvironmentValue 사용 대체 할 수 있음.
  • accessibilityLabel 개선을 통해 접근성을 강화. 더 알고 싶으면 Catch up on accessibility in SwiftUI 보기
  • @Previewable 매크로 통해 프리뷰 셋업 쉬워짐. preview 에 있는 State 를 바로 접근 가능.
  • .searchFocused modifier 와 @FocusState 통해 검색 필드의 포커스 상태를 제어.
  • .testInputSuggestions modifier 통해 textfiled 에 suggest 기능 추가
  • 두 가지 색상을 혼합하여 새로운 색상을 만들 수 있는 mix modifier 추가.
  • .onScrollGeometryChange(for:) 나, .onScrollVisibilityChange(threshold:)를 통해 스크롤 상태 관리 가능
  • Swift 6의 새로운 language mode 에서 컴파일 타임에 data race 안전성을 제공. View evaluation 은 기본적으로 main actor 로 isolated 됨.
  • SwiftUI 의 애니메이션을 UIKit과 AppKit으로 브리징 가능. 더 알고 싶으면 Enhance your UI animations and transitions 보기

What’s new in watchOS 11

  • iOS 앱의 Live Activities가 Smart Stack에 표시됨. 별도의 watchOS 앱 없이도 가능. (다이나믹 아일랜드에 뜨는 화면이 자동으로 스마트 스택에 뜰 것)
  • .supplementalActivityFamilies[.small] 를 추가하여 Smart Stack용으로 맞춤형 콘텐츠 제공도 가능 (.medium 은 iOS / iPadOS 의 lock screen 용으로 제공)
  • App Intent RelevantContext API를 사용하여 관련 있는 컨텍스트(날짜, 위치, 수면, 운동 등)를 시스템에 제공하면 특정 상황에서 자동으로 Smart Stack에 나타남. (Relevant Widget)
  • watchOS 에서도 모든 위젯에서 인터랙티브 기능 지원 (SwiftUI 버튼 생성 후 perform() 메서드 구현). 단 위젯에서 작업 수행 전에, 추가 확인을 통해 의도된 액션인지 확인 가능. requestConfirmation().lowConfidenceSource 를 넘겨 추가 확인용 프롬프트 표시.
  • AccessoryWidgetGroup 을 통해 최대 세 가지 콘텐츠를 단일 위젯에 표시 가능
  • 원래는 더블 탭 액션이 Apple Watch Series 9 및 Ultra 2에서 전화 응답, 음악 일시정지 등 일반적인 작업 수행을 했지만, watchOS 11 에서는 자동으로 리스트에서는 스크롤 함. 또한 커스텀 액션도 지정 가능.
  • WorkoutKit 에서 수영 activity type 추가. distanceWithTime 이라는 goal type 도 있음. 궁금하면 Build custom swimming workouts with WorkoutKit 보기.
  • HealthKit 에서는 심리 상태를 위한 API 를 통해 감정 데이터를 읽고 쓸 수 있음. 궁금하면 Explore wellbeing APIs in HealthKit 보기.

What’s new in privacy

  • 애플은 데이터 최소화, 온-디바이스 처리, 투명성 및 제어, 보안을 통해 개인 정보 보호를 함. 즉, 사용자 데이터를 보호하고 필요 최소한의 데이터만 수집하며, 사용자에게 명확한 제어 권한을 제공.
  • 기존의 연락처, 사진 앱등에 더해 FinanceKit, Image Playgrounds, AccessorySetupKit 에서도 사용자가 선택한 데이터만 앱과 공유.
  • 이제 macOS 에서도 네트워크별로 MAC 주소를 주기적으로 변경하여 추적 방지. “Rotate Wi-Fi Address” 옵션 제공, 네트워크 유형에 따라 기본 설정 달라짐.
  • 연락처 접근시 제한 혹은 전체 접근을 선택할 수 있는 두 단계 프롬프트 제공.
  • 블루투스 및 로컬 네트워크 접근 요청 시 공유되는 데이터 유형과 위험성을 명확히 시각화
  • 앱을 잠그거나 숨길 수 있으며, Face ID, Touch ID, 또는 비밀번호로 접근해야함
  • 기존 계정을 패스키로 자동 업그레이드, 비밀번호 관리 부담 감소. 자동 패스키 업그레이드 관련해서는 Streamline sign-in with passkey upgrades and credential managers 보기.
  • caller ID 를 사용하는 경우, 서버에서 이게 무슨 전화 번호인지 몰라도 발신자 정보를 제공할 수 있게 함. 더 알고싶으면 Getting up-to-date calling and blocking information for your app 문서 보기

What’s new in SF Symbols 6

  • wiggle / rotate / breathe 애니메이션 생김. Replace / Variable Color 에 변화도 생김
  • Wiggle 애니메이션에서는 방향성 (direction) 이 중요
  • rotate 는 레이어 단위로 돌릴 수 있음
  • breathe 와 pulse 는 비슷하지만, breathe 는 opacity 에 더해 size 까지 조절
  • replace 는 symbol 이 다른 symbol 로 바뀌는거였는데, 연관된 모양을 가진 두 symbol 사이에 전환 (slash 나 뱃지 추가 같이) 을 예쁘게 시켜주는 magic replace 효과가 생김. 이건 연관된 두 심볼 사이에 replace 적용하면 생기는 기본 옵션.
  • variable color 에서 closed loop 의 경우 더 연속적인 애니메이션 적용됨

What’s new in App Store Connect

  • Featuring Nominations 기능을 통해 앱의 새로운 콘텐츠와 개선 사항에 대한 내용을 제출하고 앱 스토어에서 소개될 기회를 얻을 수 있음
  • Testflight invitation 을 통해 앱스토어에 노출되는것 마냥 초대장 꾸미기 가능
  • Public link 를 통해 테플 url 생성 가능. 이때 특정 OS 버전 및 플랫폼을 사용하는 테스터만 제한 걸 수도 있음. 조건 미충족하는 사용자가 link 열면 너 조건 안돼서 다운 못받음이라고 알려줌
  • custom product page 를 통해 앱스토어에서 사용자마다 보여지는 screenshot 등을 다르게 할 수 있음. 이때 각 page 마다 다른 딥링크를 설정하여 사용자가 앱을 열 때 원하는 페이지로 바로 이동 가능.
  • Promote Your App 섹션에서 앱 스토어에 처음 출시되거나 새로운 버전이 출시되었을 때 등 이를 홍보할 수 있는 마케팅 asset 을 생성하여 소셜 미디어에서 쉽게 공유할 수 있음.
  • iOS 및 iPadOS의 App Store Connect에서 필요한 스크린샷 수가 한 세트로 줄어듦!!
  • Apple Developer Enterprise Program에 프로비저닝과 유저 관리 API 지원이 추가.
  • App Store Connect API를 통해 App Analytics Reports를 다운로드하여 앱 스토어 데이터에 대한 정보를 받을 수 있음.

What’s new in location authorization

  • 사용자 위치 얻으려면 먼저 권한 얻어야함. 이 과정이 복잡했는데 CLServiceSession 을 통해 간단하게 가능
  • Core Location은 liveUpdates 또는 Monitor.events의 반복 행위를 암시적으로 CLServiceSession을 유지하는 것으로 처리. 하지만 이러한 암시적 세션이 앱에서 권한 요청을 유도하지 않기를 원할 경우, Info.plistNSLocation-Require-Explicit-Service-Session 키를 설정하여 암시적 세션의 효과 비활성화 가능. (그럼 다시 세션 명시적으로 생성해야함)
  • 앱에서 Core Location을 사용하는 기능을 중심으로 세션을 생성하고 유지해야 함. 즉, 세션의 수명은 기능의 수명에 맞춰야 하며, 백그라운드에서도 세션이 유지되어야함.
  • 사용자가 백그라운드에서 앱을 사용하거나 앱이 중단되더라도, 적절한 권한 (liveUpdates 등) 이 있으면 Core Location은 계속 세션을 추적하며, 새로운 정보가 있을 때 앱을 다시 백그라운드에서 실행할 수 있음.
  • 하지만 Core Location은 이러한 명시적 및 암시적 세션을 영원히 추적하지 않고, 앱이 다시 시작된 후 몇 초 동안만 추적함. 이는 앱이 계속 기능을 재개하지 않을 경우 세션 상태가 누출되는 것을 방지하기 위함임. 따라서 앱이 다시 시작될 때는 필요시 중단된 세션을 가능한 빨리 복구해야 새 객체가 이전 객체를 대체할 수 있음.
  • diagnostic 속성은 권한 목표를 달성할 수 없는 이유를 알려줌.

출처

그룹 — 주제별

그룹 — 요일별

--

--