iOS/Swift 소식을 전해드립니다 💁
레츠스위프트 뉴스레터  제103호 2024년 5월 26일
다양하고 풍성한 iOS / Swift 관련 소식을 모은 뉴스레터가 도착했습니다. 애플 이벤트 다음이라 역시 다양한 소식들이 많습니다. 반가움과 우려가 섞인 아이패드 관련된 소식이 가장 눈에 띄구요. WWDC를 앞두고 앞으로 나올 것들에 대한 기대가 반영된 글이 많았습니다. 이번 호부터는 인공지능/ML 관련 카테고리를 추가했습니다. 이제 어쩔 수 없는 대세가 된 것 같습니다. 그나저나 한국도 이번주면 아이패드 전파인증이 통과될 것 같은데요 중국산 직구 금지와 함께 더 비싸진 아이패드도 관심의 대상이 되지 않을까 예상해봅니다. 
매월 둘째, 넷째주 일요일에 뉴스레터를 발행하고 있습니다. 
누구나 함께하는 뉴스레터 저장소 👉 만약 링크가 깨지는 경우는 저장소 이슈에서 확인하실 수 있습니다.
메일링 리스트 가입은 >가입하기 링크< 주변에 소개해주세요 🤩
👉 2024년 현재 애플 개발자 여러분들이 궁금해할 만한 것을 모아서 설문 조사를 진행합니다. 
얼마나 어디에서 어떤 환경에서 어떤 버전에 맞춰 개발하는 지 궁금하시다면 설문 조사에 참여해주세요
3년전에 조사했을 때 300명 정도가 참여해주셨는데, 올해는 그 이상 인원을 기대해봅니다 🙏
집에서 개발 환경을 마지막 인텔 27인치 아이맥에서 M1 Max 맥 스튜디오로 옮기면서 x86 가상화가 얼마나 잘 되는지 시험해보았습니다. 패러랠즈는 이제 macOS 버전이 올라가면 구 버전을 실행하지 못하도록 막아둬서 버렸구요. VMware Fusion 맥용이 얼마전에 개인 사용은 무료로 풀렸습니다만 x86 에뮬레이션이 안되서 실패했습니다. QEMU 기반인 UTM으로는 리눅스 설치는 쉽게 가능했습니다. 그래서 조금 더 나아가서 30년전 개발 환경인 NeXTSTEP을 설치해보려고 했는데 드라이버 제한 때문에 설치가 안되더군요. 그래서 여러 디바이스 롬을 지원하는 86box 에뮬레이터로 NeXTSTEP 3.3 for Intel 버전을 설치했습니다
저도 OS X 이후부터 본격 개발을 해서 NEXTSTEP에서 직접 코드를 입력해본 것은 처음이었는데요. NeXT 시절 오브젝티브-C 언어는 지금과 조금 다르고 C와 C++를 혼합한 형태에 더 가까워보였습니다. `@private`나 `@protected` 같은 접근 키워드도 있었더군요. 인터페이스 빌더에서 아울렛을 연결하거나 액션을 연결하는 방식도 비슷하면서도 달라서 살짝 헤맸습니다. 40년전 운영체제면서 개발 환경인 것을 생각해보면 정말 얼마나 시대를 앞서간 것인가 다시 한 번 놀랐습니다. 지금은 macOS와 iOS 구조나 개발 환경이 대신하고 있어서 조상님 만나고 온 기분이었습니다. 조만간 블로그 글로 정리해보겠습니다 🙃
주제/분류별 소식들
국/해외 소식들을 비슷한 주제들이 많아서, 다음과 같이 묶어서 정리합니다.
# 애플

> 애플 개발자 포럼 사이트가 새단장을 했네요. 3년전쯤인가 한 번 바뀌었던 것 같은데 주제별로 묶어서 보여주면서 커뮤니티나 공간 컴퓨팅 같은 새로운 주제들이 생겼네요. Pathways 와 함께 개발자 자료 접근이 개선되고 있어서 좋네요 Apple Developer Forums

> 애플이 가장 잘하는 분야 중에 하나가 접근성 - 손쉬운 사용 기능에 대한 적극적인 대응이겠죠. 5월 16일 세계 손쉬운 사용 인식의 날 (Global Accessibility Awareness Day)에 새로운 손쉬운 사용 기능들을 공개했습니다. 개인적으로 차량 모션 큐 기능이 정말 궁금하네요 Apple, 눈 추적 등 새로운 손쉬운 사용 기능 공개 - Apple (KR)

# 하드웨어

> 라즈베리 파이 한 대쯤 사서 홈 브릿지로 홈킷 지원하지 않는 기구들을 연결하려고 해보신 적 있나요? 저는 책상 스탠드 스위치를 릴레이에 연결해서 시리와 홈킷에 연결을 시도해본 적이 있는데요, 라즈베리파이가 그럴 때 딱 좋습니다. 비교적 최근에 나온 라즈베리 파이 5에 대한 리뷰입니다. Exploring Hardware: The New Raspberry Pi 5 | by Investigator

> M4 아이패드가 출시되고 나서 여러 리뷰가 나오고 있습니다. 영국에 있는 유투버가 언박싱 영상을 올리고 나서 리뷰 글을 올렸습니다. 개인적으로 13인치보다는 11인치가 휴대하기 좋아서 관심이 있었지만 가격과 스펙이 너무 높네요 ㅜㅜ Getting My Hands on the M4 iPad Pro! | by Mark Ellis

> 에어팟을 비롯한 버즈나 이어폰 생태계가 커지면서 수리하기도 어렵고 배터리가 소모적인데도 불구하고 경쟁 회사들이 다양하고 혁신적인 제품들보다는 저렴한 짝퉁 이어폰 제품만 많아지고 있는 현실을 비판합니다. 그만큼 음악을 듣는 방식도 바뀌고 있는게 아닐까요 I Miss The Old Headphone Era. Apple ruined everyone’s fun | by Alex Rowe

> 이번에 발표된 M4 아이패드와 M2 아이패드 에어 중에서 어떤 제품에 관심이 생기셨나요? 저는 스펙만 보면 이제 M2 프로에 가까운 M2 에어가 충분한 데 교모하게 매직 키보드가 구형이네요. 그냥 아이패드는 또 신형이더라구요 ㅜㅜ Is This Apple’s Best Ever iPad?. The 13-inch iPad Air is quite something | by Mark Ellis

> 새로운 M4 아이패드를 고르기 머리가 아프다고 하네요. 마음속으로는 M2 에어가 충분해.라고 하지만 WWDC까지 기다렸다가 M4 아이패드에 숨겨진 기능이라도 있을까봐 그런 것 같습니다 The New M4 iPad Pro Gives Me Headaches | by Tobias Hedtke

> 0.5mm 두께 수준으로 얇은 아이패드 프로는 휘어지기 쉽고, 배터리도 더 적어질텐데 이게 정말 좋은거냐 반문합니다. 얇게 만드는 기술적인 도전보다는 밸런스가 중요하다고 언급합니다 The Real Reason Apple’s New Ultra-Thin iPads Are a Nightmare | by Jano le Roux


# 일반

> 💎 ㅎㅎ 맥이 지루해졌다면 몇 가지 트릭이나 앱으로 소소한 즐거움을 찾도록 도와주는 글입니다. macOS Is Boring — 12 Mini Apps That Make An “Unfathomable” Difference | by Nikhil Vemu

> 웹 어셈블리 WASM을 단지 JS를 더 빠르게 만드는 도구가 아니라 이해하는 만큼 더 꼼꼼하게 사용할 수 있다는 내용입니다. 요즘은 RUST로 WASM BE를 구현하는 경우가 많아지고 있고 Swift로도 시도하는 분들이 늘어나고 있습니다 I was understanding WASM all wrong! | by Yuji Isobe

> 5월에 나온 앱들 중에서 눈에띄는 앱들을 소개해줍니다. Linekeeper는 북마크 앱인데요 그리고보니 제가 만들던 개발 자료 모음 앱과 비슷하네요 5 Game-Changing iPhone Apps — May Edition. | by Clark

> 아이폰과 iOS 자잘한 기능이 엄청 많은데 한 번도 안 써본 기능도 여전히 많습니다. 빨래를 위한 의류 태그 분석이나 자동차 계기판 인식 기능은 저도 한 번도 안써본 것 같네요 7 Amazing Hidden iPhone Features I Bet You Didn’t Know About | by The Evil Geek

> 새로운 아이패드 프로 압착기 광고가 여러 (특히 파괴되는 장치나 캐릭터를 만든) 창작자들에게 불쾌한 감정을 느끼게 했었는데요, 그걸 거꾸로 돌려보면서 비교해보니 또 다른 느낌이네요. 애플이 가진 독특함과 다르게 생각하기 측면에서 변한 것 같다고 지적합니다 Apple Has Changed | by huizhou

> 장인 정신에 대해 이야기하면서 WWDC에 가면 동기부여도 되고 사람들을 만나면서 더 많은 것을 배울 기회가 있다는 얘기를 합니다. 저도 비슷하게 연속해서 WWDC에 참석해왔기 때문에 공감합니다. 북미에 산다면 이동이 더 쉽겠죠 ㅜㅜ 특히 최근 몇 년의 WWDC는 그런 게 약해져서 좀 아쉽습니다 Craftsmanship & Consideration - David Smith, Independent iOS Developer

> 앱 개발하다보면 여러 앱에서 한 곳에 데이터를 저장해서 가져가야 하기 때문에 백엔드 스토리지가 필요해서 파이어베이스 Firestore를 쓰기도 합니다. 최근에는 Supabase라는 대체 서비스가 관심을 받고 있기도 합니다 Firebase Firestore Is Too Expensive | by Andrew Zuo

> 옆동네 소식 중에서 구글 I/O 소식입니다. 이제 KMP 코틀린 멀티 플랫폼이 공식 도구가 되었네요. 안드로이드와 iOS, 웹까지 지원하지만 역시나 안드로이드가 1순위라는 점이 아쉽습니다. It was claimed at Google I/O that they officially support Kotlin Multiplatform | by Ryan W

> 옆동네 코틀린이 2.0 정식 버전으로 나왔습니다. 1.0 버전이 나온게 2016년이니까 8년만에 메이저 버전이 올라갔네요 Kotlin 2.0 Released: Faster And More Reliable | by Tom Smykowski

> 예전에도 소개한 적이 있는 70대 개발자 할아버지가 Xcode 화면이 너무 좁은데 큰 화면이 정말 필요한거냐. 아이패드 프로 13인치 에어라도 사면 어떠냐고 물어보네요 My Struggle With Xcode Continues. But there is hope on the horizon | by Anthony

> UTM 이라는 QEMU 기반 x86_64 가상화 에뮬레이터에 대한 글입니다. 저도 최근에 사용해봤는데, M1 이상 애플 실리콘에서 x86_64용 macOS나 리눅스 설치하기에 딱 좋더군요 Running Any CPU Architecture on MacOS using UTM | by Mad Machine

> 1983년도에 빌 게이츠가 프로그래밍 하던 TRS-80 모델 100이라는 고전(?) 컴퓨터입니다. Radio Shack 이라고 가전 브랜드에서 만든 제품이네요. 구글 본사 옆에 컴퓨터 역사 박물관에서 본 TRS-80이 생각납니다 TRS-80 Model 100: a Computer that was Programmed by Bill Gates | by Dmitrii Eliuseev

> 여러 개발자 커뮤니티에서 플러터가 대세처럼 생각이 됐지만 채택하는 비율이 여전히 낮고, 대형 업체들도 업데이트하지 않고 있는 현실을 꼬집습니다. 집중적으로 지원해도 시원치 않을 판에 구글에서는 리소스가 줄어들고 있어서 우려를 표현합니다. What’s next for Flutter? | by Jasper Morgan

> 얼마전에 업데이트된 iOS 17.5 기능들에 대해 정리한 글입니다. iOS 17.5 Is Way Bigger Than We’ve Expected — 15+ Amazing Features! | by Nikhil Vemu

> 위의 글과 같이 읽어보기 좋습니다. 북미에서 지원하는 Apple News+에서는 낱말 퀴즈도 있었군요! iOS 17.5 — It’s Awesome | by The Evil Geek

> 소프트웨어 개발자가 단순히 요구사항을 구현만 하기 보다는, 제품 비즈니스를 이해하고 시장에 출시할 수 있는 제품을 개발하는 제품 개발자가 되어야 한다. 스크럼 방식은 작업 목록을 소비하는 게 아니라 제품 개발의 복잡한 변화를 팀 전체가 원하는 방향으로 나아가도록 돕는 도구라고 설명합니다 “Why Scrum” for Software Developers | by Roy Klein

> 기술 블로그 작성에 대한 글이네요 Starting and growing your own technical blog

# 인공지능/ML

> 이번호부터 AI 카테고리를 만들었습니다. iOS 18에는 대대적으로 AI 기능이 들어가지 않을까 기대하고 있지만, 이미 지금도 쓸만한 기능이 10개나 된다고 말합니다. 10 AI Features You Didn’t Know Your iPhone Already Has | by The Useful Tech

> SKT 개발자 블로그에서 애플 실리콘에서 MLX를 활용하면 추론 능력이 더 좋아진다는 글을 보고 가져왔습니다. MLX: Apple silicon 용 Machine Learning 프레임워크 - 04.LLM inference example | 개발자 Story

> 구글 I/O와 함께 마이크로소프트 빌드 개발자 행사가 있었습니다. 그 중에서 MS가 윈도우즈에 내장해버린 리콜Recall 기능에 대한 우려와 프라이버시 관점에서 글입니다. 자동화가 필요할 수 있겠지만 모든 데이터를 알고있는 운영체제가, 모든 화면을 보고 판단하는 인공지능 기술까지 가진다면 프라이버시는 어디까지 보호할 수 있을까요 Microsoft’s New “Recall” Feature That Takes Constant Screenshots Of Your PC Is A Privacy Nightmare | by Jim Clyde Monge

> 애플이 여러 모델을 계속해서 시험하고 있다고 합니다. 특히 멀티모달 MLLM 방식으로 이미지나 사진을 개선하거나, 다음에 나올 단어를 예측하거나 다양한 입출력 형식을 지원하면서 대화를 할 수 있는 모델로 촛점이 맞춰진 것 같습니다 Unveiling Apple’s AI Strategy with MGI | Towards AI


# 스위프트

> 스위프트 코드와 빌더 구조로 홈페이지 HTML을 만들고 웹사이트를 만들 수 있는 방법을 설명합니다. Build your next website in Swift – Hacking with Swift

> 가볍게 런루프 만드는 예시를 보여줍니다. 스레드 동작시점부터 autorelease pool 관련해서 조금만 더 설명해주면 좋았을 것 같네요 Exploring Runloop in Swift. Managing Events | by Steven Curtis

> SPI (System Programming Interface) 속성으로 의도하지 않은 API를 숨기거나 특정 고객에게만 오픈할 수 있는 방식들을 설명합니다 spi or How to develop better APIs in Swift | VaraniOS

> Difference Between try, try? and try! and When to Use Them in Swift | by Chase

# 설계 구조 : 패턴

> 구조화를 한다는 것은 여러 가지 기준을 생각해야 합니다. Core 핵심 모듈과 기능 Features 모듈, 기능별 의존성 데이터 Composition Root 계층으로 나누는 방식을 제안합니다 How to modularize Monolith iOS App | by Vitaly Batrakov

> SwiftUI 화면을 구조적으로 나누기 위해서는 데이터 구조도 구조적으로 나눠서 연결해야 하는데요 이게 단지 MVVM 이냐 아니냐의 문제는 아니고 화면이 조금만 복잡할 수록 데이터 구조가 여러 계층이 되기도 하고 struct나 class가 뒤죽박죽 되기도 합니다 MVVM: An architectural coding pattern to structure SwiftUI Views - SwiftLee

> 앱에 필요한 데이터를 저장하는 저장소를 다루는 Repository 디자인 패턴에 대해 설명합니다. 꼭 코어데이터나 데이터베이스를 쓰지 않더라도 구조화가 필요한 경우에 좋은 것 같습니다 Repository design pattern in Swift explained using code examples - SwiftLee

> 단방향 아키텍처로 구현하더라도 입력-출력 처리 코드가 섞이면 서로 다른 계층에서 반복해서 호출하는 반복 루프가 생길 수 있죠. 저자는 ping-pong 문제라고 부르면서 어떤 경우가 있고, 조심해야 하는지 설명합니다 The Dark Side of Unidirectional Architectures in Swift | by Luis Recuenco


# 뷰 프로그래밍 : SwiftUI

> 💎 SwiftUI 미리보기 Preview를 위해 사용한 개발용 에셋들이 앱 스토어 제출하기 위해 아카이브하는 최적화 옵션과 함께 빌드할 때 포함되는 현상에 대해 언급합니다. Jared Sinclair | How Do You Know Whether or Not SwiftUI Previews and Preview Content Are Excluded From App Store Builds

> 내비게이션 스택을 이용하기 위해서 라우터를 구현하고 뷰를 바꾸는 방식을 설명합니다. 이게 참 불편해서 그냥 UIViewController나 UINavigationController를 사용하는 경우가 많죠 Exploring Scalable SwiftUI Navigation | by Nikita Goncear

> 튜토리얼로 나쁘지 않아서 가져와 봤습니다 Mastering SwiftUI: Are You Really as Good as You Think? | by Vladyslav Shkodych

> Mastering the containerRelativeFrame Modifier in SwiftUI | Fatbobman

> SwiftUI App Tutorial. Part 2. First Action | by Alex Zarr

> SwiftUI: Custom Wheel Picker | by Itsuki

> nil Mean in SwiftUI? | Fatbobman

# 프레임워크

> 💎 어디로 분류해야 하나 고민을 하다가 GPU 가속 프레임워크라고 보고 여기로 넣었습니다. NVIDIA GPU 유명세와 함께 CUDA가 가장 인기가 높아졌지만, 개인적으로 OpenCL처럼 CPU와 GPGPU가 복합적으로 합쳐진 Heterogeneous 프로그래밍이 대세가 될 것 같습니다. 아직은 개발자가 구분해서 따로 작성해야 하지만, 점차 하드웨어도 통합되고 개발 도구도 정밀하게 CPU와 GPU를 종합적으로 활용하는 시대가 되지 않을까 예상해봅니다. 물론 애플은 Metal을 선택할 것 같지만요 CUDA vs OpenCL vs Metal : The Battle for GPU Acceleration Supremacy | by

> CPU나 GPU 가속 기능을 이용해서 계산을 더 빠르게 할 수 있는 Accelerate 프레임워크 사용하고 개선해본 경험담입니다. Boost Performance 100x Accelerate Framework

> 특정한 프레임워크를 사용했다기 보다는 앱을 설치하고 온보딩 시점에 일정 기간 무료 사용하는 오퍼Offer를 주고 후에 구독을 유도하는 방식을 도입했을 때 효과에 대해 설명합니다. Blinkist 앱에서 하는 방식을 따라해서 결과적으로 40% 이상 새로운 구독자가 생겼다고 말합니다 My experience with the “Blinkist trial”: Big boost | Filip Němeček

> 기존의 커스텀 뷰를 TipKit으로 바꾸고 저장된 상태에 따라 표시하도록 개선한 과정을 설명합니다 Refactoring to TipKit from AppStorage and Custom Views in SwiftUI | Swiftjective-C

> UIKit 대신에 SwiftUI 기반으로 AVFoundation을 활용해서 카메라 앱을 만드는 과정을 보여주는 예제입니다. 구조적으로 잘 나누기 보다는 돌아가는 방식에 촛점이 맞춰져 있습니다 SwiftUI: Camera App with AVFoundation | by Itsuki

> Swift Data를 TCA와 함께 통합해서 사용하는 방식을 설명합니다 Using Swift Data and The Composable Architecture (TCA) | by Harsh Vishwakarma


# 서버 관련

> 💎 각 언어 기반으로 웹 서버를 준비해서 성능을 비교한 Alex Roest 글을 분석한 글입니다. 스위프트 기반은 Vapor와 비교했는데 Vapor가 비교적 성능이 좋게 나왔었습니다. 실제로는 그렇지 않은 부분이 많다는 것을 지적합니다 Swift sucks at web serving… or does it? – Wade Tregaskis

> 오랜만에 Vapor 소식이네요 FluentKit 에서 사용하는 Fluent 모델들이 Sendable-safe 한 것과 non-Sendable 한 것으로 구분되고 정리하는 중이라고 합니다. 슬슬 Swift 6를 대응해서라도 앞으로는 모델 설계할 때 이런 측면도 고려해야 할 것 같더군요 On Fluent Models and Sendable warnings | The Vapor Blog

# VisionOS

> WWDC 영상에 있는 내용들에서 크게 벗어나지 않지만 깔끔하게 정리가 되어 있습니다 Understanding typography in visionOS

 
# 개발 환경

> 💎 오랜만에 인스트루먼츠 도구를 활용한 글이네요. 앱 성능이나 메인 스레드 성능을 측정하기 위해서 os_signposts를 활용하는 것까지 설명해서 도움이 됩니다 How to profile your app's performance and Main Thread usage with Instruments and os_signposts

> Xcode 최신 버전부터 시뮬레이터 이미지 관리 방식이 달라졌습니다. 시뮬레이터 런타임이라는 일종의 가상 이미지로 관리를 하는데요, 가끔씩 다운로드 다 하고 설치가 안되거나 실패하는 경우가 있습니다. Fix Xcode losing references to downloaded Simulator runtimes | An Tran

> Xcode가 많은 기능을 처리해주지만 여전히 터미널을 열고 명령어로 설정을 바꾸거나, 로그를 확인하거나, 스크립트로 자동화를 시키거나 CLI 명령이 필요합니다. jq 나 jump는 자주 쓰게 되더라구요 Great CLI Applications That Make Using Terminal Effortless For All Users | by Pratik Thapa

> 아마 SPM 버전을 지정하는 부분에서 여러 경험담이 있으실텐데요, 모든 개발팀이나 개발 도구에서 버전 업데이트하는 것을 관리하는 것도 필요한 시점이 있더군요 Pinning Swift Package Versions: Predictable SPM Package Versions Across All Machines

> Xcode 때문에 불편한 부분을 도와주는 지원 도구를 소개합니다. 개발 환경이 용량이 부족하거나, 인공지능 코드 생성 도구, 시뮬레이터 확장도구, 스위프트 형식기 등 애플이 해야할 일을 대신해주는 도구들입니다 Top 5 Tools Every iOS Developer Should Have in Their Xcode Arsenal | by Emin Emini

> 웹 사이트 또는 앱을 연결하는 AASA 형식 유니버설 링크를 테스트하도록 도와주는 사이트입니다 Verify & Test AASA | Digital Bunker

> 효율적으로 더 빠르고 관리하기 쉽게 빌드하기 위해 필요한 사항들을 정리해줍니다. 중간 중간 최적화를 위한 자잘한 사례들까지 꽤 다양한 시도를 설명하고 있습니다 Xcode, Swift: A Guide to Efficient Builds | by Yeskendir Salgara

> "미~즈" 라고 읽는 개발 환경 설정을 도와주는 도구입니다. 여러 개발 환경을 지원하는 데 Xcode를 사용하는 개발자를 위해서 필요한 사항들을 설명합니다 mise en place Xcode · paul-samuels.com

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