iOS/Swift 소식을 전해드립니다 💁
레츠스위프트 뉴스레터  제33호 2021년 6월 13일

 님을 위한 iOS / Swift 관련 소식을 모은 뉴스레터가 도착했습니다. 
이번주는 새벽까지 잠못들고 출퇴근 시간에 영상보고 그러면서 머릿속이 정말 🤯 터질 것 같네요. 지난 1년동안 애플 엔지니어들은 또 쉬지않고 달렸더군요. 그 내용이 많아서 오늘 다 전달하지는 못할 것 같습니다. 앞으로 최소한 3개월 정도 새 아이폰이 출시할 때까지 공부할 게 잔뜩 쌓여버렸네요. 


매월 둘째, 넷째주 일요일에 뉴스레터를 발행하고 있습니다. 
누구나 함께하는 뉴스레터 저장소 👉 만약 링크가 깨지는 경우는 저장소 이슈에서 확인하실 수 있습니다.
메일링 리스트 가입은 >가입하기 링크< 주변에 소개해주세요 🤩
WWDC 2021
작년에는 판데믹 상황에서 급하게 온라인 행사로 전환하면서 조금 어색하게 진행했다면, 올해는 확실하게 온라인 중심으로 준비한 것을 알 수 있었습니다. 작년과 비슷하게 세션 영상은 짧게는 7분부터 40분정도까지 다양한 길이로 사전 제작됐습니다. 비디오 사이트를 기준으로 2020년은 218개, 올해는 212개입니다. 
작년처럼 세션 영상을 정리하지는 않겠습니다. 개발자 앱에서 필수 Essentials 항목으로 필터링해서 나오는 추천 영상만이라도 꼭 보시길 권해드립니다. 

세션 뿐만 아니라 랩에서는 시스코 Webex로 애플 엔지니어들과 화상 회의를 연결해주고,
Text 기반 채팅으로 이야기하는 디지털 라운지와 파빌리온을 진행했습니다.
개인적으로는 업무가 바쁘다는 핑계로 적극적으로 참여해보지는 못했네요... 😵‍💫

이대로 온라인 행사로 정착되는 것인가 약간 불안한 데(?) 애플도 고민인가 봅니다. 오프라인 컨퍼런스가 좋았어? 온라인 컨퍼런스로 만족해? 이런 내용을 묻는 설문 조사까지 하고 있네요. 전세계 개발자들은 어떤 피드백을 주고 내년 컨퍼런스는 어떻게 진행될 지 궁금해지네요.

이번 WWDC 2021에서 나온 기술에 대해 요약해 놓은 페이지가 있습니다. 샘플 코드 페이지도 있습니다.
학습할 키워들만 나열해도 이 정도네요 🙃 
Xcode Cloud & Developer Tools, Swift, SwiftUI, SharePlay and Group Activities, DocC,
Augmented Reality, Notifications, WatchKit, Accessibility, Extensions,
App Store, Graphics, Audio and Haptics, ShazamKit, Screen Time API, AppKit, UIKit,
Security and Privacy, iCloud, Core Data, Machine Learning, Foundation,
HealthKit, HomeKit, Siri, Games, Apple Pay, Photos, Education, TVUIKit, WidgetKit, Hardware
관련 주제별로 영상과 개발자 문서, 샘플 코드를 보면서 제품에 적용해보시길 권해드립니다.

특히 올해는 개발자들이 체감할 수 있는 변화가 많은 것 같습니다. Xcode 13 자체도 UI를 다듬어서 새로 빌드를 한 것 같구요, 기존 API 변화만큼이나 새로운 API도 생겼습니다. 새로 추가된 API만 살펴보면 다음과 같습니다.
AudioDriverKit, BlockStorageDeviceDriverKit, CoreLocationUI, Device Activity, FamilyControls,
GroupActivities, LocalAuthenticationUIView, MailKit, ManagedSettings, ManagedSettingsUI,
MusicKit, PHASE, QuickLookUI, ShazamKit, TabularData, ThreadNetwork

이 중에 AudioDriverKit, BlockStorageDeviceDriverKit, ThreadNetwork는 Objective-C 전용 API들입니다. 여전히 USBDriverKit 처럼 하드웨어와 관련된 기능이나 좀 더 로우레벨에서 처리해야 하는 경우는 Objective-C 전용 API도 생기고 있습니다. 완전히 사라지지는 않을꺼 같죠? 그렇지만 SwiftUI로 할 수 있는게 많아지고 있기도 합니다.

WWDC 관련 내용 이외에 다른 소식들은 아래에 있습니다.
주제/분류별 소식들
국/해외 소식들을 비슷한 주제들이 많아서, 다음과 같이 묶어서 정리합니다.
# 애플
[한글] 예고한 것처럼 애플 뮤직 드디어 공간 음향과 무손실 음원을 지원하기 시작했습니다. 거의 모든 애플 제품에서 공간 음향과 무손실 음원을 들어보실 수 있습니다. 물론 Hi-Res 무손실 음원은 외장 DAC가 있어야 가능합니다.
[영문] 휴먼 인터페이스 가이드라인 업데이트
Inclusion, SharePlay, Right to Left, Mac Catalyst 항목이 추가되고, SF Symbols 3 와 In-App Purchase, Widgets 등 항목이 업데이트 됐습니다. iOS 관련해서 Spatial Interactions와 Location Button, Microphone으로 ShazamKit 사용에 대한 항목도 추가됐습니다.
올 해는 분야를 플랫폼 별로 나누지 않고, 여섯 개 분야를 나눴습니다. 전 세계 개발사의 혁신, 비주얼 및 그래픽, 상호 작용, 기쁨과 재미, 포용성, 사회적 영향력에 따라 시상을 했다는 게 다른 점이네요.
[영문] 개발자 포럼에 새로운 기능이 추가됐네요. 원하는 태그에 RSS 피드를 가입할 수도 있고, 관심있는 태그를 관리할 수 있습니다. 멀티 태그를 지정할 수도 있고 시각적인 정보를 기술하기 위해서 이미지도 올릴 수 있다네요. (진작 좀 해주지...🤭)

# 일반
[한글] 페르난도님 블로그 - 앱 스토어 1위 경험기
> [영문] 앱스토러 리뷰 가이드만 기록하는 이런 사이트가 있었네요. 새로 바뀐 부분을 형광색으로 표시해줍니다.
> [영문] 에픽과의 애플의 싸움이 끝나가는 것 같습니다.

# 스위프트
드디어 Swift5.5에 포함된 Concurrency - async/await 소식이 많습니다.
스위프트 관련 애플 영상도 14개나 되는데, 그 중에 Concurrency관련 영상이 9개나 됩니다.
특히 URLSession처럼 비동기로 동작하는 클래스는 async/await API가 추가됩니다.
기존에 많이 쓰는 dataTask(with: completionHandler:) 이외에 bytes(for: delegate) async 메소드나 data(for: delegate:) async 메소드가 추가됩니다. 이와 관련해서 protocol AsyncSequnce 내용을 함께 살펴보시면 좋습니다. 당분간 조금 혼란스럽지만 async/await, Actor나 Structured concurrency 활용한 다양한 사례가 나올 것 같습니다.

이 글에서 combine 변화가 없다는 것이 충격적이라고 언급합니다. 특히 AsyncSequence가 Combine을 상당 부분 대체할 수 있지 않냐고 말합니다. 특히 현재 리뷰중인 SE-0314 AsyncStream 관련 내용이 Combine과 결합되거나 영향을 주지 않을까 예상을 해봅니다.

# 설계 구조 : 패턴
# 뷰 프로그래밍 : SwiftUI
[영문] SwiftUI 뿐만 아니라 Foundation 수준에서 바뀐 것 중에 하나가 AttributedString 입니다.
마크다운 조차 쉽게 처리할 수 있는 타입으로 거듭났죠. 클래스 버전 NSAttributedString 말고 스위프트 구조체 버전 AttributedString에 대한 활용 소식이 있네요. 
> [영문] SwiftUI에도 추가된 내용이 꽤 많고 영상도 17개나 있습니다. 로컬라이즈부터 맥, 아이패드, 워치까지 여러 플랫폼에서 개선이 있습니다. 특히 접근성 Accessibility API를 강조하고 있고, 충분히 매력적인 내용이 많네요. 그 중에서도 새로 추가된 타입 AsyncImage에 대한 글입니다.

# 뷰 프로그래밍 : UIKit
SwiftUI만 바뀐 것은 아니고 UIKit도 꽤 변화가 있습니다.
특히 외장 키보드 접근과 관련이 있는 Focus 관련 부분은 완전히 새로운 개념입니다.
기존 Responder Chain과 함께 사용할 수 있지만, 이벤트를 보내는 객체가 달라질 수 있습니다.
TableView나 CollectionView 에서 도입된 Builder Pattern 형태 Configuration 방식도 더 확장됐습니다.

# 프레임워크
다양한 프레임워크를 다루는 예제를 소개하는 글들입니다. 
- Flow는 안드로이드에서 SwiftUI와 비슷한 Jetpack Compose에서 활용하는 멀티플랫폼 기술입니다. 

# 개발 환경
[한글] 강훈님 블로그 - xcodegen에서 tuist로 전환하기
[영문] 올해 개발환경의 변화는 상당히 두드러집니다. Xcode는 새로 만든 것 같고 Swift Playgrounds에서도 앱을 출시할 수 있으니까요. 아직 써볼 수는 없지만 세션으로 소개하는 Xcode Cloud에 대한 글이 있습니다. 단지 앱 스토어에 올리는 것 뿐만 아니라, 빌드, 코드리뷰, 테스트, 베타 배포까지 과정을 클라우드에서 어떤 경험을 줄 지 기대됩니다.

# 테스트
> [영문] 테스트 환경도 개선이 있습니다. 그 중에서도 새로운 async/await 코드를 테스트하는 방식에 대해 소개합니다.
# 디자인 

📲회사에서 iOS 개발자들에게 홍보하고 싶은 내용이 있으신가요? 
news@letswift.kr 로 언제든지 문의해주세요. 
레츠스위프트 뉴스레터
http://letswift.kr
수신거부 Unsubscribe