분류 전체보기
-
[Swift 6] 싱글톤, Task.detached, 그리고 의존성 주입(DI)에서 만나는 동시성 문제개발/Swift 2025. 11. 26. 14:29
[Swift 6] capture of self with non sendable type 동시성 문제 Swift 6의 Strict Concurrency 모드가 도입되면서, 기존에 관습적으로 사용하던 코드들에서 많은 컴파일 에러가 발생하고 있습니다. 이번 글에서는 실무에서 가장 빈번하게 마주치는 세 가지 핵심 패턴과 그 해결책을 정리해 봅니다.1. 싱글톤과 가변 상태 (Mutable Global State)가장 흔한 패턴이자, Swift 6에서 가장 먼저 경고를 보내는 것이 바로 **"가변 프로퍼티를 가진 싱글톤"**입니다.🚨 문제 상황final class CustomAlertPopupWindow { static let shared = CustomAlertPopupWindow() // ⚠️ 전역 접..
-
Tuist에서 스킴별로 다른 앱 아이콘 설정하는 방법 (Dev/QA/Release)개발/Swift 2025. 11. 24. 11:05
Tuist에서 스킴별로 다른 앱 아이콘 설정하는 방법 (Dev/QA/Release)개발 환경에서 여러 빌드 설정(Dev, QA, Release)을 사용할 때, 각 환경을 시각적으로 구분하기 위해 다른 앱 아이콘을 설정하는 것은 매우 유용합니다. 이 글에서는 Tuist 프로젝트에서 스킴별로 다른 앱 아이콘을 설정하는 방법을 단계별로 알아보겠습니다.1. App Icon Set 준비하기일반 이미지를 앱 아이콘으로 바로 사용할 수는 없고, Icon Set 형태로 준비해야 합니다.Icon Set 생성 방법Xcode에서 프로젝트의 Assets.xcassets 폴더로 이동좌측 하단 + 버튼 클릭iOS > App Icon 선택생성된 Icon Set에는 다양한 사이즈의 아이콘을 넣을 수 있는 슬롯이 준비되어 있습니다.다..
-
SwiftUI에서 UIKit Push 네비게이션 구현하기 (탭 바 오버레이)개발/Swift 2025. 11. 6. 09:47
🚀 SwiftUI에서 UIKit Push 네비게이션 구현하기 (탭 바 오버레이) 이 문서는 SwiftUI 환경에서 NavigationStack 사용이 어려운 iOS 버전(16 미만) 또는 특정 UIKit 구조(탭 바) 위로 페이지를 Push 하여 탭 바를 덮도록 구현하는 방법을 설명합니다. 1. SwiftUI 기본 네비게이션의 한계 1.1. iOS 16+의 표준 방식 iOS 16 이상을 타겟팅할 경우, SwiftUI의 네비게이션은 NavigationStack 및 navigationDestination(item:destination:)을 사용하여 UIKit의 Push와 유사하게 페이지를 쌓을 수 있습니다. 🚨 제한: 'navigationDestination(item:desti..
-
[SwiftUI] 커스텀 ProgressView 만들기 (feat. 특이한 모양 Progress 애니메이션)개발/Swift 2025. 8. 19. 09:41
SwiftUI에서 제공하는 기본 ProgressView는 간단한 진행 상태를 보여주기엔 편리하지만, 디자인이 조금만 특별해져도 한계에 부딪힙니다. 예를 들어 ㅇ-ㅇ-ㅇ-ㅇ처럼 단계별로 끊어지는 형태의 프로그레스 바를 구현해야 한다면 어떻게 해야 할까요?이럴 땐 직접 그리는 것이 오히려 더 직관적이고 편한 방법이 될 수 있습니다. 이번 글에서는 ZStack과 mask를 활용해 독특한 모양의 프로그레스 뷰를 만들고, 자연스러운 애니메이션까지 구현하는 과정을 단계별로 알아보겠습니다.1단계: 프로그레스 '모양' 그리기가장 먼저 할 일은 프로그레스 바의 전체적인 모양, 즉 '트랙(Track)'을 만드는 것입니다. HStack 안에서 ForEach를 사용해 원(Circle)과 사각형(Rectangle)을 반복해서 ..
-
SwiftUI Text에 gradient 를 적용하는 방법 .mask() (그라데이션 텍스트)개발/Swift 2025. 8. 14. 09:32
HStack { Text(title) .font(.system(size: 14, weight: .bold)) .foregroundStyle(Color.white) .padding(.leading, 20) .padding(.top, 12) .padding(.bottom, 8) Spacer() } .background( LinearGradient( gradient: Gradient(colors: [Color(UIColor(hex: "3D77FF")), Color(UIColor(hex: "9B3DFF"))]), startPoint: .leading, e..
-
SwiftUI ScrollView내에서 Tap, DragGesture 충돌 문제 해결 방법 (SwiftUI touchDown 이벤트)개발/Swift 2025. 8. 8. 12:39
SwiftUI에서 ScrollView 내에 있는 특정 컴포넌트에 여러 제스처를 동시에 적용해야 하는 경우가 있습니다. 이 글에서는 다음과 같은 요구사항을 해결하는 과정에서 겪었던 문제와 최종 해결책을 공유합니다.✅ 최종 목표터치다운 & 터치업: 사용자가 컴포넌트를 누르거나 뗄 때(영역 안팎 무관) 스케일 애니메이션이 즉시 실행되어야 합니다.탭 이벤트: 사용자가 컴포넌트 영역 안에서 손을 떼었을 때(Tap) 특정 액션이 실행되어야 합니다.스크롤: ScrollView의 스크롤 기능은 정상적으로 동작해야 합니다. ❌ 문제 상황: 제스처 충돌가장 먼저 떠오른 방법은 onTapGesture와 DragGesture를 함께 사용하는 것이었습니다.DragGesture의 minimumDistance를 0으로 설정하면 터..
-
SwiftUI BottomSheet Modifier 모디파이어 ViewModifier개발/Swift 2025. 7. 30. 13:45
SwiftUI + TCA 강의 보러가기 SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대 iOS 아키텍처| 덤벨로퍼 - 인프런 강의복잡한 SwiftUI 상태 관리, TCA (The Composable Architecture)로 깔끔하고 견고한 앱을 만드세요. 실전 프로젝트 예제로 핵심만 빠르게 배웁니다. TCA의 핵심 요소(State, Action, Reducer, Store)를 이해하고, Swww.inflearn.com SwiftUI 커스텀 바텀 시트 (BottomSheet) 모디파이어 구현SwiftUI에서 여러 종류의 바텀 시트를 띄워야 하는 상황에 대한 해결책을 제시합니다. 기본적으로 제공되는 `sheet()`나 다른 방법들도 있지만, 현재 **iOS 타겟과 탭바 위로 시트를 띄워야 하는 ..
-
Rxswift Observable 타이머: 서버 시간 동기화 (디바이스 시간 문제)개발/Swift 2025. 7. 22. 16:11
RxSwift 강의 보러가기 RxSwift 와 반응형 프로그래밍| 덤벨로퍼 - 인프런 강의RxSwift의 기초와 활용법을 다루는 강의입니다 RxSwift와 반응형 프로그래밍 기초, RxSwift 의 여러 Operator 활용법, ReactorKit 상태 관리 프로그래밍에서의 Rx활용, CoreData 활용하여 데이터 CRUD, AutoLayout과www.inflearn.com --> -->Rxswift Observable 타이머: 서버 시간 동기화이 글에서는 Swift에서 타이머를 구현할 때 발생할 수 있는 문제점들을 파악하고, 이를 **신뢰할 수 있는 형태로 개선하는 방법**에 대해 다룹니다.타이머 기본 구현 (디바이스 시간 기준)우선, 현재 시간을 기준으로 남은 시간을 초로 계산하여 타이머를 구..