iOS/Swift 소식을 전해드립니다 💁
레츠스위프트 뉴스레터  제99호 2024년 3월 24일
풍성한 iOS / Swift 관련 소식을 모은 뉴스레터가 도착했습니다. 이번에는 일반적인 소식이 많고 구체적으로 분야별 소식은 좀 뜸한 주간이었습니다. 아마도 새로운 소식들이 별로 없어서 그런가 봅니다. WWDC 2024 일정 공개도 얼마남지 않은 것 같고, 이번주에 새 아이패드가 출시한다는 루머도 있습니다. 
저는 비전 프로를 계속 써보고 있습니다. 아직은 제약이 많고 반드시 미국 계정이 있어야 한다고 알려져 있었습니다. 처음 설정할 때 아이클라우드 계정을 정해서 로그인해야만 디바이스가 활성화됩니다. 그리고나서 얼마든지 계정을 바꿀 수 있습니다. 맥 화면이나 에어팟을 비전 프로에 연결하려면 미국 계정이 아니라도 가능한데요, 반드시 같은 계정으로 아이클라우드 로그인되어 있어야 가능합니다. 

iOS나 iPadOS처럼 미디어 & 스토어 계정을 따로 지정할 수 있습니다. 이거를 미국 계정으로 로그인해야 앱 스토어가 열리고, 애플TV 메뉴가 열립니다. 특이한 건(?) 뮤직은 한국 계정으로도 활성화되더군요 (쉽게 열어줄 수 있다는 얘기겠죠?) 미국 스토어에 로그인해서 앱을 구매하고, 한국 스토어로 넘어와도 구매한 앱은 계속 사용 가능합니다. 
(위의 사진은 달 공간에서 맥북에 연결해서 작업중인 모습입니다. 화면 바깥이 달 풍경인 셈이죠 ㅎㅎ)
맥은 외장 모니터에 연결되어 있더라도 딱 한 화면만 새로운 윈도우로 연결됩니다. 눈 대신 트랙패드로 커서를 옮길 수 있어서 익숙합니다만, 맥 화면 바깥에 있는 공간의 다른 윈도우도 커서를 옮길 수 있긴한 데 자연스럽게 화면 바깥으로 넘어가는 게 아니라 결국 어색하게 눈과 손을 써야 합니다. 일상적인 체험 중에서 가장 불편한 건 맥과 다르게 아직 아이폰이나 아이패드 화면이 비전과 연결되지 않는 겁니다. 2FA 로그인할 때마다 페이스-아이디 안되는 아이폰을 열화된 패스-스루 화면으로 봐야 한다는 점은 좀 당황스럽습니다. 

가상 맥 연결은 다행히도 저의 구형 인텔 맥을 지원해주고, 신형 애플 실리콘 맥을 모두 지원합니다. 그렇지만 Xcode 15에서도 visionOS SDK는 여전히 애플 실리콘만 지원하기 때문에 인텔 맥에서는 visionOS 앱을 실행 조차할 수 없습니다. 비전과 맥을 개발자 스트랩으로 유선 연결하면 가상 맥 화면 해상도가 더 좋아지고, 반응속도가 빨라집니다만 지금은 별 차이가 없습니다. 유선으로 연결된 상태에서도 Xcode 화면은 그럭저럭 볼만한 수준입니다. 그게 비전의 디스플레이가 해상도가 더 높지만 눈에 너무 가까워서 레티나가 아니라고 느껴서라고 하네요
매월 둘째, 넷째주 일요일에 뉴스레터를 발행하고 있습니다. 
누구나 함께하는 뉴스레터 저장소 👉 만약 링크가 깨지는 경우는 저장소 이슈에서 확인하실 수 있습니다.
메일링 리스트 가입은 >가입하기 링크< 주변에 소개해주세요 🤩
주제/분류별 소식들
국/해외 소식들을 비슷한 주제들이 많아서, 다음과 같이 묶어서 정리합니다.
# 애플
> 유럽 연합에서 지정한 디지털 서비스 활동 DSA 관련해서 계약과 업데이트 내용이 있다고 합니다. 특정 역할에게 연락할 방법이 있어야 한다고 하더군요 Provide your trader status in App Store Connect - Latest News - Apple Developer
# 하드웨어
> 애플도 맥과 아이패드 라인이 일부 겹치는 것을 알고 있고 계속 고민이겠죠. 하드웨어 스펙도 많이 비슷해졌고 운영체제 모습이나 기능도 비슷하니까요. 아이패드가 맥을 대체할 것 같다는 얘기도 있었지만, 오히려 아이패드 매출이 줄어들고 있는 상황이니까요. Apple’s M-Series Mac Concerns | by Paul Alvarez

# 일반

> 💎 모바일 개발 자체는 아니지만 브라우저 아키텍처 역사와 함께 변화 내용을 정리한 글이라서 흥미롭습니다. 크롬에서 프로세스가 어떻게 나눠지기 시작했는지, GPU나 UI 프로세스가 어떻게 협력하는 지도 모듈화를 고민하는 분들에게 약간의 힌트가 될 것 같습니다 The Past and Present of Browser Architecture | by Frank Lee

> 💎 다른 분야지만 상당히 자극적인 제목이네요. 얼마전에 자바 22가 GA 됐지만 이 글은 21부터 지원하는 가상 스레드나 새로운 기능들 때문에 코틀린이 영향을 받을 것 같다는 글입니다 Java 21 - Is Kotlin Dying because of the news? | ITNEXT

> 💎 미국 법무부와 16개주는 애플을 아이폰에 대해 반독점 혐의로 제소했습니다. 제소 내용 중에 어떤 부분이 사용자들의 권리를 침해하고 있다는 것인지 다툼의 여지가 있는 것 같습니다. 이 글은 의견보다는 제소 배경 정도를 설명해주는 글입니다 Apple U.S. lawsuit: Apple is under attack and users, too | by Susan Fourtané

> 3월 기준으로 흥미로운 앱 10개를 소개해줍니다. 쓰던 앱들만 쓰고 점차 새로운 앱을 설치하고 써보는 경험이 줄어드는 것 같습니다. 가끔씩은 이렇게 새로운 앱들도 구경해보고 그런 것 좋은 것 같습니다 10 Fantastic iPhone Apps — Mar 2024 | by Clark

> 새 버전으로 업데이트하고 나면 자주 보이는 요약 설명. 팟캐스트 받아쓰기랑 음악 앱 추천은 만족스럽더라구요 7 iOS 17.4 Features That Give Your iPhone New Abilities | by The Useful Tech

> 인공지능 시대가 되면서 아날로그 감성 인터페이스가 다시금 레트로 형식으로 인기를 끌려나요. 그 시대를 경험해서 그런지 자꾸 더 눈이 가는 것도 있더라구요. AI Bring Back Analog Interfaces | by Erik Engheim

> 애플과 마찬가지로 유럽 연합 DMA 법 적용을 받는 구글의 입장에서 어떤 제품에 어떻게 반영되는 지 설명하는 공식 문서입니다. Complying with the Digital Markets Act

> 애플이 새로운 macOS에서 구형 장비 드라이버 지원을 끝내면서 해킨토시 시대가 거의 끝나간다는 소식이네요. 이제 애플 실리콘과 자체 칩이 많아지면서 더 폐쇄적이 될 것 같네요 Hackintosh is (almost) dead · aplus.rs

> Code Llama로 나만의 개발 어시스턴트를 만드는 흐름을 설명합니다. Xcode에 직접 지원해주는 시대가 오려나요 ㅎㅎ How to Build Your Own LLM Coding Assistant With Code Llama | by Dr. Leon Eversberg

> 글이나 기사를 쓰는 분들에게도 이제 마크다운 편집기가 필요한 시대가 됐나봅니다. 존 그루버 의외의 등장이 반갑네요. 꽤 비싼 편인 율리시스 Ulysses와 비교하며 아이패드 앱은 Drafts를 추천해주네요. My New Favorite Markdown Editors | by Paul Alvarez

> 건설 현장에서 일하는 분이 아이패드 프로로 일할 때 어떤 앱을 주로 사용하지는 설명하는 글입니다. 앞으로 비전 프로 앱을 개발할 때도 LiDAR 스캐너나 3D 모델링 앱을 같이 써야 할 것 같네요 The iPad Apps I Actually Use At Work | by Carl St. James

> 사이드 프로젝트로 쉽고 빠르게 결과를 내기보다는 조금 느려도 지속적으로 하다보면 결과를 얻을 수 있다는 의미 아닐까요. 꾸준함도 누구나 하기 어렵고 꽤나 강력한 무기더라구요 The power of consistency in side projects - SwiftLee

> 비주얼 스튜디오 앱 센터가 2024년 3월 31일자로 은퇴한다고 합니다. 앞으로 1년 이내에 옮기라는 의미인가 봅니다 Visual Studio App Center Retirement - Visual Studio App Center | Microsoft Learn

> 애플이 애플 제품을 쓰면서 사용자들을 더 강하게 붙잡아두기 위한 소소한 기능들 톱5를 떠올려보세요. 어떤게 있으신가요? 저는 에어드롭이나 유니버설 컨트롤인 것 같습니다. these 5 things make me MAD! | by David Lewis

> Lessons Learnt from 3 Years as Head of Platforms | by Matt Bentley


# 스위프트

> 💎 Ordo One에서 CI 도구에서 단위 테스트를 하면서 성능 측정을 하기 위한 밴치마크 패키지를 소개했네요. 밴치마크를 활용하면 반복 실험 결과나 측정 후 리포트도 꽤 상세하게 나오는 것 같습니다 Swift.org - Introducing the Benchmark Package: Complementing Unit Tests with Performance Checks

> 💎 얼마전에 Swift 5.10 버전이 릴리스됐고, 올해 하반기 iOS 18가 나올 때쯤 Xcode 16와 함께 Swift 6가 나올 예정입니다. 지난 5.x 버전 짧은 요약과 함께 앞으로 나올 변화에 대해 설명해주는 글입니다. Swift 6 New Features | by Md. Ibrahim Hassan

> Swift 6에 포함될 에볼루션 항목 중에서 하나를 가져왔습니다. 리터럴하게 작성할 때 내부 속성을 키패스로 간단하게 접근하는 방식을 제안했고 구현완료됐네요 0416-keypath-function-subtyping · apple/swift-evolution

> 임베디드 스위프트 모드라는 게 정확히는 모르겠는데, 컴파일러 옵션으로 주어지면 C 언어 수준에서 호환성을 높여주도록 생성하는 것 같습니다. enum이나 vtable 동작이 꽤 다른 방식이라 이걸 맞추느냐고 고생했을 것 같네요 Swift.org - Byte-sized Swift: Building Tiny Games for the Playdate

> @TaskLocal로 Task별로 데이터 통합성을 보장해주는 방식을 비교적 상세하게 설명합니다. TaskLocal in Swift: Enhancing Task-Specific Data Handling | by Priyans

> @_silgen_name으로 함수 선언시 원하는 mangled 이름을 줄 수 있어서 드물지만 이런 선언이 필요하다고 합니다. 같은 모듈의 함수 이름을 바꾸거나 호환성을 높이기 위한 도구로 괜찮을 것 같습니다 Using @_silgen_name to forward declare functions in Swift and improve build times


# 뷰 프로그래밍 : SwiftUI

> SwiftUI 사진 픽커 스타일을 코드와 형태를 보여줘서 깔끔합니다. UIKit은 이렇게 하려면 좀 귀찮았던 부분인데 역시 SwiftUI의 장점이기도 하죠 API added to PhotosPicker in iOS 17 | by ganeshrajugalla

> 뷰를 다룰 때 뷰를 표시하는 출력 형태보다 입력 형태를 어디까지 이해하고 다루느냐에 따라 흐름이 많이 달라집니다. 일반 뷰와 버튼의 이벤트를 받을 때 이런 구분은 사소하지만 의외의 결과를 가져다 주기도 합니다 Be careful when using .onTapGesture() — Swift with Vincent

> SwiftUI는 뷰 디자인을 위해서 그리고 그 자체가 코드라서 미리보기를 위해서 컴파일 과정을 거칩니다. SwiftUI 디버깅은 뷰 관점에서도 필요하고, 코드 관점에서도 필요하죠. 몇 가지 modifier와 함께 디버깅 팁을 소개합니다 Debugging techniques in SwiftUI | by abdul ahad

> Lazy 로딩을 막연하게 처리는 예제는 아니고, 스크롤하면서 로딩할 때 성능 개선이나 내부 동작을 고려하는 팁을 함께 알려줍니다. 결국 메모리 관리 관점에서 보이지 않는 데이터를 안써야 하는 건 SwiftUI 세상에도 필수입니다 Decoding SwiftUI’s Lazy Loading: Enhancing App Performance | by Melissa

> 소소하지만 prefix와 surfix 기계적으로 붙이다보면 계속 반복되서 의미가 퇴색되는 것 같습니다. 그냥 -View를 붙이기 보다는 이 글처럼 역할에 따라 다른 이름을 붙여보는 것도 좋습니다. Guide to Naming SwiftUI Components

> 아키텍처라고 할 정도는 아닌 것 같고, #Preview 매크로 기반으로 원하는 .environment를 쉽게 바꿀 수 있도록 전략 패턴을 구현한 정도입니다. SwiftUI Previews-based architecture — Dean’s blog

> 메인 스레드와 MainActor 개념은 Swift Concurrency로 넘어가도 동작을 처리하는 핵심 중에 하나입니다. 스위프트 5.7 부터는 좀 더 강한 isolation 규칙을 적용하고 있기 때문에 더 주의할 필요가 있습니다. SwiftUI Tasks Blocking the MainActor

> OpenAPI 스펙을 지원해주기 때문에 원하는 API 스펙 문서로 간단한 서버 코드를 생성하고 가짜 mock 호출하는 과정을 설명합니다. Using Apple’s OpenAPI Generator to Make and Mock Network Calls in SwiftUI | by Chase

> 세 칸짜리 화면 분할 내비게이션 방식을 사이드바를 지원하기 위한 내용입니다. 이거 이제 템플릿으로 제공해줘야 하는 것 같은데 안해주네요 Write two column settings in SwiftUI that look and feel like Apple’s Settings App | by Gerd Castan

> Jared Sinclair | Be Careful When You Initialize a State Object

> SwiftUI Inverting A Boolean Binding

> SwiftUI loading states with a twist; Solving a mutation puzzle

# 뷰 프로그래밍 : UIKit
> 🇰🇷 라인 앱 개발팀에서 물흐르듯이 자연스러운 iOS 화면 전환에 대해 기술 블로그로 작성해주셨네요. 재지향성과 중단점에 대한 설명이 눈에 띄네요 물 흐르듯 자연스러운 화면 전환을 향한 여정
 
# 프레임워크
> 예전에 웹소설 뷰어를 급히 만들어야 했던 적이 있었습니다. TextView를 검토했지만 뷰어만 만드는 경우에 LayoutManager까지 활용하는 게 좀 과한 느낌도 있었습니다. Label이나 TextView가 LayoutManager가 있던 이전에는 사실 Webview 기반이라 엄청 느렸거든요. 좀 더 시작적으로 보여주면서 Objective-C 코드가 보여서 반갑습니다(?) ㅎㅎ Nerdy internals of an Apple text editor
# VisionOS

> 🇰🇷 비전 프로를 사용하면서 조금씩 생각을 정리중입니다. 두 번째는 글은 공간 컴퓨팅에 대한 글입니다. 과연 공간 컴퓨팅은 모바일 컴퓨팅의 미래일까요 올드보이 개발자가 쓴 비전 프로 시리즈 #2 - 공간 컴퓨팅 | by Jung Kim

> 또 다른 관점에서 비전 리뷰를 작성해주셔서 흥미롭게 읽었습니다. 별거 아닐 수도 있지만 앞으로 바뀔 세상을 조금씩 훔쳐보는 느낌 아닐까요 My Very Strange, Very Sad Apple Vision Pro Demo | by Anthony

# 접근성
> 💎 저도 그랬고, 우리 나라 앱들이 접근성을 잘 고려하지 못하고 만들어지는 빈도가 높습니다. 딱 적절한 제목으로 접근성 점검했던 사례를 설명해주는 글입니다. 적어도 이정도만이라도 출시 전에 시험해보자고 다짐해봅니다 Oh Sh*t, My App is Successful and I Didn’t Think About Accessibility

# 개발 환경

> 💎 지난 호에 공식 소식으로도 소개했었는데, 앞으로 새로운 앱을 스토어에 올릴 때 앱 프라이버시 선언문서를 작성하셔야 합니다. 지금까지는 3자 라이브러리까지는 명세하지 않아도 무방했지만, 이제는 아카이브한 다음 프라이버시 리포트를 바탕으로 어떤 API별로 어떤 데이터를 사용하는 지 상세하게 설명하셔야 합니다 Guide to Apple iOS App Privacy Manifest | by Elye

> Xcode 15 DocC 부터는 extension으로 확장된 네이티브 타입들을 모듈별로 찾아서 정리해주세요 How to link to native type extensions in DocC | Daniel Saidi

> 스위프트 플레이그라운드는 기본적으로 멀티 스레드가 아니라서 비동기 코드를 실행해도 실행되기 전에 메인 스레드가 끝나버립니다. 이런 경우에 대비해서 PlaygroundSupport.PlaygroundPage 객체가 기다리도록 설정할 수 있습니다 How to run asynchronous code in Swift Playground correctly? | An Tran

> 프라이버시 항목별로 필요한 것을 케이스 스터디 형식으로 보여줍니다 Learn Apple’s Privacy Manifests | by Santosh Botre

> Xcode 코파일럿 플러그인을 만드는 개발자들도 있지만, 이번에는 클라우데3로 만든 예제 코드네요. Prompt to code in Xcode with Claude 3. | by James Rochabrun

> 윈도우즈 기반 스위프트 개발 도구에 대한 설명입니다. VSCode 기반 공식 스위프트 익스텐션이 나온 셈이죠. 이제 빌드, 디버깅, 테스트 뿐 만 아니라 깃헙 코파일러까지 잘 되더군요. Swift Tooling: Windows Edition

# 테스트
> 버그를 수정할 때마다 테스트 코드를 추가하는 전략은 리팩토링에도 좋은 접근 중에 하나입니다. 꼭 TDD가 아니더라도 테스트 코드가 많지 않은 프로젝트에서 테스트 적용이 막막하다면 버그 수정할 때마다 필요한 케이스를 추가해보시길 추천드립니다 Test-Driven Development (TDD) for bug fixes in Swift - SwiftLee
# 디자인 

> 동적으로 변하는 UX 디자인 사례들입니다. 비전 프로 관점에서 UX 사례도 좀 많아지면 좋겠네요 ㅎㅎ Dynamic and Remarkable UX Design Works | TMDesign

> Cool and Creative Application Designs | TMDesign

> Illustrative and Tech Mobile App Design Examples | TMDesign

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