Tech Log/iOS 6

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

🦀 바위게캘린더 배포하다!

🦀 바위게 캘린더, 드디어 앱스토어 심사에 올리다 📅2025년 09월 24일 밍밍 🦋 (예뻐서 올림..) 드디어… 내 두 번째 사이드 프로젝트인 바위게 캘린더를 앱스토어에 최초 배포했다 🎉사실 iOS 개발자로 입사한 뒤 사이드 프로젝트를 시작한 건 많았지만, 끝까지 배포한 건 이번이 최초라서 감회가 새롭다.🚀 왜 만들었나?나는 바위게다.2024년 7월, ‘고민중독’이라는 노래를 통해 처음 QWER라는 그룹을 알게 되었다.그땐 단순히 “노래가 좋다”는 감상으로 끝났지만,어느 날 유튜브 알고리즘이 추천해준 ‘최애의 아이들’ 시리즈를 보게 되면서그들의 이야기와 서사에 완전히 빠져들었다. 그중에서도 QWER의 마지막 궁극기, ‘R’ 시요밍의 이야기가 특히 마음을 강하게 울렸다.세상에 치이면서도 끝까지 ..

Tech Log/iOS 2025.10.14