iOS/Swift 소식을 전해드립니다 💁
레츠스위프트 뉴스레터  제116호 2024년 12월 8일
풍성한 iOS / Swift 관련 소식을 모은 뉴스레터가 도착했습니다. 2024년 뉴스레터도 이제 딱 두 번 남았네요. 그래서 그런지 자잘한 소식들을 제외했더니 분량이 많이 줄어들었습니다. 이번주부터 아이폰 16에 이어서 M4 맥북과 맥 미니가 이제 국내에 풀리기 시작했습니다. 그리고 이번주에 운영체제 업데이트가 예정되어 있고 영어 우선이지만 애플 인텔리전스를 직접 써보실 수 있습니다. 저도 아직은 맥 미니 군침만 흘리고 있습니다 ㅎㅎ
매월 둘째, 넷째주 일요일에 뉴스레터를 발행하고 있습니다. 
누구나 함께하는 뉴스레터 저장소 👉 만약 링크가 깨지는 경우는 저장소 이슈에서 확인하실 수 있습니다.
메일링 리스트 가입은 >가입하기 링크< 주변에 소개해주세요 🤩
주제/분류별 소식들
국/해외 소식들을 비슷한 주제들이 많아서, 다음과 같이 묶어서 정리합니다.
# 애플

> 앱 스토어 시상식(?)을 위한 최종 후보 앱들을 소개합니다. 이미 유명한 앱들도 많지만 처음 앱들은 구경해봐야겠습니다 Apple, 2024 App Store Award 최종 후보 앱 및 게임 45개 공개 - Apple (KR)

# 하드웨어

> 벤치마크 도구로 애플 실리콘 맥 성능을 비교한 자료입니다. M4 Pro 맥 미니도 성능이 상당하네요. The amazing M4 Pro Mac mini Stress Test | by David Lewis

> 좀 더 상세한 맥 미니 하드웨어 리뷰입니다. 엄청 무거운 영상 작업 정도가 아니라면 충분히 좋은 성능을 보여주는 것 같습니다 Three Things Have Shocked Me About the M4 Pro Mac mini | by Michael Swengel

> 이제 애플 실리콘 M4 Pro 이상은 성능이 충분히 좋은 것 같습니다. 회사에서 개발용으로 지급해주는 게 아니라면 에어 수준에서도 할 수 있는게 많으니까요. 하지만 갖고 싶을 뿐이죠 (응?) You Don’t Need An M4 MacBook Pro | by Andrew Zuo

# 일반

> 많은 회사들이 모바일 개발 환경에서 크로스 플랫폼을 활용하기도 하죠. 플러터도 그 중에 하나 일텐데요 플러터가 아쉬운 이유, 선택하면 불편한 이유를 설명합니다. 프로젝트 목적에 부합하지 않으면 선택하지 않는 게 좋다는 의견입니다 6 Reasons to Not Use Flutter | by Ahmad Hassan

> 애플의 제품 디자인 중에서 논란이 된 몇 가지 사례들을 소개하면서, 애플 디자인 팀에는 논란이 될 만한 것을 일부러(?) 아이디어로 넣는 사람이 있는 게 아니냐는 음모이론을 소개합니다 ㅎㅎ Apple’s Notorious Design Choices. Is MKBHD’s theory correct? | by Manav Tyagi

> M1 맥북 프로에 macOS 와 아사히 리눅스, 도커와 패러랠스, UTM 가상 환경까지 CPU 와 IO 성능을 벤치마크로 비교한 자료입니다. 결론적으로는 네이티브 리눅스가 확실히 좋네요. 가상 머신은 어쩔 수 없구요 Benchmark — macOS vs Asahi vs Virtualized Linux | by TechHara

> 구글과 젯브레인이 주도하는 멀티플랫폼 플러터와 KMP에 대한 비교입니다. 크로스 플랫폼을 선택할 때 선택하더라도 적절한 기준을 정하고 네이티브와 비교해서 선택하는 것이 중요한 시점입니다 Flutter vs. Kotlin Multiplatform: Which Should You Choose for Cross-Platform Development? | by Rushabh Prajapati

> 제목은 스포트라이트를 욕하면서 Raycast 런처 앱을 광고하고 소개하는 글입니다. 가볍게 보세요 MacOS Spotlight Sucks. Use this amazing tool instead. | by Andrii

> 러스트가 리눅스 커널에 영향을 주고 있지만, 여전히 C 언어로 작성하고 기여한 부분에 비하면 부족하기 때문에 C 언어의 영향력은 막강한 것 같습니다 The C Programming Language is Irreplaceable | by Jose Crespo, PhD

> iOS 18.2 RC가 나왔기 때문에 다음주에 정식 버전이 올라오겠지만, 그 사이에 보안 패치가 나온 것에 포함된 내용들입니다. Time to update! Apple’s iOS 18.1.1 and 17.7.2 Address Severe Security Flaws. | Mac O

> AI 기반 개발 도구를 얼마나 적극적으로 사용하고 계신가요. Xcode 때문에 직접적인 도구는 아니지만 Windsurf 와 Cursor를 비교하는 자료입니다. Windsurf vs. Cursor: A Developer’s Dilemma | by Murat Aslan


# 스위프트

> 저장소 데이터를 불러올 때 입출력 때문에 동시성 방식으로 모델을 처리하는 전반적인 내용을 상세하게 설명합니다. 비동기 함수가 Sendable 하지 않은 경우 문제를 해결하기 위한 설명입니다 Concurrency Step-by-Step: Reading from Storage | massicotte.org

> 이제 슬슬 스위프트 6로 마이그레이션하는 사례들이 공유되기 시작했네요. @preconcurrency를 지정하거나 @unchecked Sendable 프로토콜을 채택해서 해결하는 과정을 설명합니다 How I migrated my app to Swift 6 | by Bartłomiej Lańczyk

> 11월 스위프트 에볼루션 요약 내용입니다. 오브젝티브-C 호환성 개선과 메타타입 키패스 승인된 부분이 눈에 띄네요 Swift Evolution Monthly: May-November 2024 | by Cihat Gündüz

> 유니코드 기반 문자열을 다룰 때는 로케일 언어 설정에 따라 달라질 수 있어서 주의해야 합니다. 몇 가지 사례로 알려주는 주의사항입니다. Why Can't You Loop Over Ranges of Characters in Swift | TIL with Mohammad

> @frozen 속성을 자주 사용하시나요? 최적화를 위한 선택이기도 하지만 무작정 선언한다고 도움이 되는 것인가 궁금할 때가 있습니다 frozen Attribute in Swift: A Guide for Developers | by Shobhakar Tiwari

> Enum explained in-depth with code examples in Swift

# 설계 구조 : 패턴

> 최근에는 클린 아키텍처에 대한 글이 뜸하긴 합니다. 이 글은 수평적인 그림 대신 수직적인 관점에서 여러 모듈을 한꺼번에 보여주는 게 좋습니다. Clean Architecture Struggles to Scale in Mobile Development | by Elye - A One Eye Dev By His Grace

> SwiftUI 뷰 상태 관리를 위해서 Core, Data, Domain, Presentation 계층으로 나눠서 클린 아키텍처를 구현한 예제입니다. Efficient View State Management in SwiftUI with Clean Architecture | by Ben

# AI/ML

> 모두가 범용 목적을 가지는 LLM 에이전스를 구현할 필요는 없을텐데요, 어떤 과정을 거쳐서 동작하는지 관점에서 살펴보면 좋을 것 같습니다. 교양 수업 같은 느낌으로요 How to Build a General-Purpose LLM Agent | by Maya Murad

# 뷰 프로그래밍 : SwiftUI

> 💎 별 내용 아니겠지.하고 읽다가 어..어? 하면서 계속 읽게 되네요. VStack 이나 HStack 에 scaping 매개변수에 nil 값을 주는 경우 숨겨진 spacing 속성에 따라서 약간의 공간이 생긴다는 내용입니다. 이런건 좀 명확하게 밝혀주면 좋을텐데 말이죠 nil Mean in SwiftUI? | ITNEXT

> 내비게이션을 위해서 뷰 컨트롤러처럼 동작하는 뷰 빌더를 만드는 게 정말 필요한 것일까요. 내비게이션을 위한 노력할 때마다 많은 개발자들이 UIKit 을 떠올리는 것 같습니다 ㅎㅎ Best navigation for SwiftUI | Medium

> 불꽃놀이 효과를 만들기 위해서 메탈 쉐이더를 활용한 사례입니다. 꽤 상세하게 설명하는 자료라서 좋네요 Create Firework Effects with Metal & SwiftUI | by Uladzislau Volchyk

> 직접 만든 #StorybookPage 매크로를 활용해서 뷰를 미리보기 형태로 만들어주는 스토리북 앱을 설명합니다. Displaying all SwiftUI Previews in a Storybook app | by John Estropia

> SwiftUI 화면을 서로 다른 패키지에서 공유할 수 있도록 만드는 컨테이너 방식을 제안합니다. Enable SwiftUI Views Sharing Across Packages Without Dependency Constraint | by Elye - A One Eye Dev By His Grace

> 레이아웃 프로토콜을 적극 활용하고 계신가요. 복잡한 레이아웃을 만들 수 있고 서브뷰를 관리할 수 있도록 레이아웃을 조정하는 방식을 설명합니다 SwiftUI: Mastering Layout Values in Layout Protocol | by Itsuki

> Skip 도구를 사용해서 iOS와 Android 모두를 지원하는 SwiftUI 화면을 만드는 방식을 설명합니다 SwiftUI: Try to Build Dual-platform Android and iOS | by Jerry PM

> 기본 제공하는 텍스트 필드에 추천 단어가 뜨도록 개선하는 과정을 설명합니다 Text field enhancements in SwiftUI | Swift with Majid

> 스크롤 뷰를 다루른 API가 변화했고 iOS 18부터 scrollPosition에 접근해서 UIKit 처럼 동작할 수 있습니다. SwiftUI는 왜 이렇게 느리게 변화하는 걸까요 The Evolution of SwiftUI Scroll Control APIs and Highlights from WWDC 2024 | by fatbobman

> 시계처럼 시간 변화에 따라 반응하는 뷰를 구현할 때 고민할 사항을 살펴볼 수 있습니다 Time-Based View Updates in SwiftUI

> SwiftUI matched geometry effect in a custom segmented control

# 뷰 프로그래밍 : UIKit

> 저는 개인적으로 이렇게 뷰 프레임워크를 섞어서 사용하는 것을 비추하는 데요. 코드가 간단해지기는 하지만 이런 방식은 양쪽 프레임워크 모두에 의존하고 영향을 받을 수 있기 때문에 귀찮은 일이 생길 수 있겠습니다 Animate UIKit views with SwiftUI animations in iOS 18

# 프레임워크

> 이 글을 어디로 분류할까 하다가 워치용 앱으로 분류했습니다. 플러터로 앱을 만들고 워치용 앱과 연결하도록 구현하는 방식입니다. 플러터와 워치쪽 둘 다 할 일이 많군요 (저라면 그냥...) Building a WatchOS Companion App for Flutter | by Scott Hatfield

> Realm 방식으로 데이터를 로컬에 저장하다가 아이클라우드로 동기화 기능을 지원하려고 했을 때 만난 문제 해결 과정을 설명합니다. 코어데이터와 클라우드킷을 같이 쓸 수 있지만 유니크 제약사항을 못 쓴다던가 또 다른 문제가 있다고 지적합니다. How to Overcome a Sync Nightmare: A Developer’s Story | by Delfina Sugandi

# VisionOS

> 애플이 RealityKit에서 폴리곤 개수를 제한하지만 폴리곤 매쉬를 작게 나눠서 표현을 부드럽게 만드는 기법인 서브디비전 방식을 소개합니다. Subdivisions in RealityKit

# 개발 환경

> AI 기반 개발 환경 Cursor를 Xcode에서도 활요할 수 있도록 도와주는 플러그인 형태입니다. 알렉스라는 개인 개발자가 만든 사이드바라서 추천하기는 애매하고, 어떤 식으로 돌아가는 지 구경할 정도는 되는 것 같습니다 The Cursor for Xcode | by Alex

> 2년내에 코코아팟 프로젝트가 아카이브할 계획을 발표했습니다. 이제 정말 SPM으로 통합하게 되려나요 CocoaPods Trunk Read-only Plan - CocoaPods Blog

> 이제는 다운로드 제약이 별로 없지만 앱 크기가 지나치게 커지는 경우 가볍게 줄이려는 시도는 여전히 필요한 것 같습니다. TPBank 앱 크기를 줄이는 과정을 설명합니다. 어떤 부분이 용량을 차지하는 지 살펴보면 도움이 되실 겁니다 How I reduce the iOS TPBank app size by half

> 프라이빗 전용 pod을 만들어서 별도로 관리하는 방식에 대한 설명입니다. 코코아팟이 2년뒤 사라질 것을 생각하면 애매한 내용이긴 하네요 Multiple Variants of Cocoapods for your Private pod | by Balraj Verma

> SwiftUI 앱 프로젝트를 빌드할 때 빌드 시간을 줄이기 위해서 점검할 팁을 알려줍니다. 가볍게 읽어보시길 추천드립니다 Reduce Xcode Build Time for SwiftUI Apps | by Pavlos Simas

> Periphery 와 FengNiao 명령으로 사용하지 않는 죽은 코드나 에셋을 제거하는 방식들을 소개합니다 Removing Unused Code and Assets in iOS with Periphery & FengNiao | by Mücahit Eren Özkur

> 사실상 산업 표준에 해당하는 홈브루를 대체할 만한 nix를 소개합니다. 애플 실리콘에서 쓰려면 조금 변경이 필요하네요 Why Nix is the Ultimate Homebrew Alternative | Developers

> How to create and upload high-quality App Store assets with RocketSim and Helm

> Set supported platforms in file target membership options in Xcode

# 테스트

> 단위 테스트에 미리보기 기능을 포함해서 자동으로 미리보기 형태로 테스트 커버리지를 늘릴 수 있는 방식을 제안합니다 Enhance Xcode Previews with Unit Test Coverage

> Swift Testing을 소개하는 자료입니다. Swift Testing이 완전히 새로운 프레임워크는 아니고 매크로로 XCTest 테스트 코드를 생성해주는 방식이라는 것을 염두해두고 읽어보시길 추천드립니다 Introducing Swift Testing. Basics. | Swift with Majid

# 도구/오픈소스 

> 저에게 직접 보내주신 자료입니다. 화면 영역 내부에서 둥둥 떠서 따라다는 Floating 화면을 직접 구현하셨다고 합니다. 처음 오픈하다보니 이런저런 의견을 받아보고 싶다고 제안해 주셨습니다. 저장소 둘러보시고 이슈를 생성하거나 의견을 나눠주시면 좋아하실 것 같습니다 OkminLee/FloatingAnchorView: Draggable floating view


# 디자인 
> 샤잠 앱을 UX 관점에서 분석해서 어떻게 사용자를 직관적으로 만족시킬 수 있는지 설명합니다. 단순하고 빠르게 접근성을 지원하며 만족스러운 결과를 줄 수 있는지 분석합니다. 조금 길지만 추천합니다 How Shazam’s UX delivers instant gratification | by Sophia Omarji
📲회사에서 iOS 개발자들에게 홍보하고 싶은 내용이 있으신가요? 
news@letswift.kr 로 언제든지 문의해주세요. 
레츠스위프트 뉴스레터
http://letswift.kr
수신거부 Unsubscribe