분류 전체보기 28

SwiftUI의 some View / any View / AnyView 차이 정리

1. some View - "반환값이 View다" 정도로만 보면 부족하다- 정확히는 "컴파일러는 이 함수가 반환하는 구체적인 View 타입을 알고 있지만, 바깥에는 숨긴다"- 핵심은 하나의 구체 타입이 정해져 있다는 점- 예를 들어 내부가 Text든 VStack이든 modifier가 붙은 복잡한 타입이든, 컴파일 시점에는 이미 확정되어 있다.- 그래서 some View는 타입 정보를 유지한다. 2. any View- "이 값은 View 프로토콜을 따르는 값이다."- View 프로토콜을 채택한 어떤 타입의 인스턴스든 담을 수 있다.- some View가 "구체 타입은 잇지만 숨김" 이라면, any View는 "구체 타입을 하나로 고정하지 않고, View 프로토콜을 따르는 값을로 다룸"에 가깝다.- 그래서 ..

Tech Log/iOS 2026.03.12

AppEntity 에러로 이해한 Swift Concurrency: nonisolated vs MainActor.run

최근 App Intents를 공부하면서 AppEntity를 구현하다가 다음과 같은 컴파일 에러를 만났다.Main actor-isolated conformance of 'TodoItem' to protocol 'AppEntity' cannot satisfy ...처음에는“왜 갑자기 MainActor 때문에 에러가 나지?”라는 생각이 들었다. 코드를 보면 특별히 메인 스레드 작업을 하는 것도 아닌데 에러가 발생했기 때문이다. 문제를 해결하는 과정에서 결국 핵심은 두 가지였다. nonisolatedMainActor.run 이 두 개념을 이해하면 Swift Concurrency의 actor 모델도 같이 정리된다. 이번 글에서는 이 에러를 통해 왜 nonisolated가 필요한지, 그리고 왜 저장소 접근은 Mai..

Tech Log/iOS 2026.03.10

iOS ActivityKit 정리: Live Activity를 이론부터 프로젝트 적용까지 이해하기

이번 글에서는 iOS의 ActivityKit (Live Activity)을 학습하면서 정리한 내용을 하나의 흐름으로 정리해보려고 한다. 단순히 API 설명이 아니라 실제 프로젝트에 적용한 구조를 기준으로 정리했다. 글의 구조는 다음 5단계로 구성되어 있다. 이론 설명내 프로젝트 기준 해당 작업실제 프로젝트 작업 위치알게 된 것학습 핵심 요약 이 글 하나로 ActivityKit의 전체 구조를 잡는 것이 목표다. 1️⃣ ActivityKit 이론 설명 Live Activity란 무엇인가 Live Activity는 앱의 진행 상태를 잠금화면(Lock Screen) 또는 Dynamic Island에 실시간으로 보여주는 기능이다. 대표적인 예시는 다음과 같다. 배달 상태 추적택시 이동 상황스포츠 경기 스코어운..

Tech Log/iOS 2026.03.04

[WidgetKit] Weather Widget 학습 정리: TimelineEntry부터 AppIntent 인터랙션까지

WidgetKit Weather 학습 정리 이번에는 HIGPractice 프로젝트에서WidgetKit + Weather 예제를 기준으로 위젯 구조를 학습했다. 이번 학습의 핵심은👉 “보이는 UI”보다 먼저, Timeline 기반 업데이트 구조를 정확히 이해하는 것이었다. 1. 이번에 정리한 핵심 개념 1️⃣ Entry는 TimelineEntry + date가 핵심 Widget의 Entry는 TimelineEntry를 채택하며,반드시 date 프로퍼티를 가져야 한다. 시스템은 이 date를 기준으로 “어떤 시점의 위젯 상태를 언제 렌더링할지”를 판단한다. 즉, Widget은 현재 상태를 직접 그리는 구조가 아니라미래의 상태들을 미리 예약해두는 구조라는 점이 중요하다. 2️⃣ AppIntentTime..

Tech Log/iOS 2026.02.26

Github Issue 생성부터 PR 머지까지 프로세스

요약 🧠 GitHub 이슈 기반 PR 워크플로우 커밋은 이슈 참조, 이슈 닫힘은 PR Description에서 처리하는 방식 iOS 앱 개발에서 GitHub 이슈 → 브랜치 → 커밋 → PR → Merge까지깔끔하고 일관된 워크플로우를 정리했다. 이 방식의 핵심은 다음 두 가지다. 커밋 메시지에는 이슈 번호만 참조한다.실제 이슈 닫힘은 PR Description에 Closes #xx 를 넣어서 처리한다. 이 패턴은 커밋 히스토리를 깔끔하게 유지하면서도이슈 트래킹과 자동화를 모두 챙길 수 있는 실전 방식이다. 1. GitHub에서 이슈 생성하기 먼저 GitHub 웹에서 기능 / 버그 / 개선 요청에 대한 이슈를 생성한다. 이슈 본문 예시는 아래와 같다. 기능 개요 현재 캘린더 Task를 추가해도 앱..

Tech Log/iOS 2026.02.02

2026년 1월 13일

전체적으로 프로젝트를 되돌아봤는데,기존의 나는 업무에서도 그렇고 MVVM을 바탕으로 개발을 이어나가고 있었다. 2022년 3월에 입사해서 곧 4년을 바라보는 와중에 내가 지속적으로 느꼈던건일의 반복에 대한 권태였다. 새로운 기능이 추가되면 해당 기능을 개발해주고, 뷰가 바뀌면 뷰를 바꿔주고 등의 일을 계속 해왔을뿐새로운 개발 방법론이나 요즘 트렌드가 어떻고 애플이 추구하는 바는 어떤지? 같은걸 개발하는 수많은 방법이 있는데 다른건 어떤게 있을까?Swift는 프로토콜 기반으로 개발을 해야하는데 그런 기술적 고찰 없이 주먹구구식으로 했던거 아닐까? 하며 찾아봤더니 모듈화 / 의존성 주입 / 클린 아키텍처 / 테스트 등의 생각을 하지 않고 개발을 하고 있었다.물론 실제 현업에서 개발기간의 압박을 비롯한 여러..

Life Log 2026.01.13

[Tutorial] 04. Map을 표시해보자! (MapKit)

안녕하세요. 벌써 4번째 챕터가 다가왔습니다.앞에 내용은 어렵지 않으신가요? 여러분들은 벌써 SwiftUI에서 각종 View들을 표현하는 법을 배웠습니다.이번시간에는 Mapkit에서 제공하는 Map을 표시하는 법을 배워봅시다!https://developer.apple.com/documentation/mapkit/mapkit-for-swiftui MapKit for SwiftUI | Apple Developer DocumentationMapKit for SwiftUI allows you to build map-centric views and apps across Apple platforms. You can design expressive and highly interactive Maps with minim..

Tech Log/SwiftUI 2025.12.09

[Tutorial] 03. 이미지를 그려보자! (Image View)

저번시간까지 SwiftUI에서 텍스트와 이미지를 표시하는 법을 배웠습니다.그리고 이러한 뷰들을 '스택'이라는 컨테이너 안에 담아서 수직, 수평, Z축에 맞게 원하는대로 배치하는 방법가지도 배웠죠! 이번시간에는 Image를 표현하는법에 조금 더 배워볼건데요! 그전에 준비물이 있습니다. 바로 사진을 하나 다운받아야하는데요. QWER 2주년 축하 사진 사실 제가 좋아하는 QWER의 데뷔일은 10월 18일인데요. 작성 기준으로 이미 두달이나 지나버렸지만 홍보적인 의미를 조금이나마 담아 사진을 선정했습니다! 물론 저 사진 말고도 원하시는 사진을 쓰셔도 무관해요. 자 사진을 준비했으면 프로젝트에 넣어볼까요? 좌측에 보시면 프로젝트의 계층 구조를 파악할 수 있습니다.Assets을 클릭합니다. 준비한 이미지 파일을 드..

Tech Log/SwiftUI 2025.12.04