일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- stateobject
- swift
- 알고리즘
- Animation
- UIKit
- firebase
- ios
- combine
- RxSwift
- view
- state
- iphone
- GCD
- authentication
- date
- withAnimation
- 최적화
- arkit
- CS
- sheet
- async
- dataflow
- SwiftData
- Algorithm
- WWDC
- auth
- Network
- SwiftUI
- Concurrency
- gesture
- Today
- Total
목록Swift (52)
XLOG
왜 이 구조를 도입했나앱 기획이 바뀌고 기능이 추가될 때마다 navigationDestination, sheet, fullScreenCover가 군데군데 늘어나고, 상태 변수도 화면마다 따로 생기곤 합니다. 화면 수가 많아질수록 가독성은 떨어지고 실수가 늘죠.저는 “어떤 View에서든 안전하게 시트를 띄우고, 스택을 쌓고, 쉽게 닫을 수 있는 단일 API”를 목표로 라우터/코디네이터를 도입했습니다. 결과적으로 화면 전환 코드가 뷰 구현에서 분리되어 테스트 가능하고 확장 가능한 구조를 갖게 되었습니다.설계 목표관심사 분리: 화면 전환(네비게이션)은 뷰 로직에서 분리단일 소스: push/pop, present/dismiss를 한 곳에서 관리모달 독립성: 시트/풀스크린 내부도 자체 네비게이션을 가질 수 있게확..
최근 디버그 과정 중 continuation 쪽 문제를 해결하면서 내용을 한번 정리해두는게 좋다는 생각이 들어서 시작한 글입니다.swift의 async/await는 복잡한 비동기 코드를 깔끔하게 정리해주는 강력한 기능입니다. 그런데 기존의 콜백 기반 API를 어떻게 async 함수로 바꿀 수 있을까요? 그 때 등장하는 개념이 바로 continuation입니다.이 글에서는 continuation이란 무엇인지, 그리고 Swift에서 제공하는 관련 API들을 쉽게 설명해보겠습니다.🧠 continuation이란?간단히 말해, 중단된 함수의 흐름을 다시 이어줄 수 있는 객체입니다. Swift의 async 함수는 실행을 잠시 멈췄다가 다시 이어서 실행할 수 있어야 하는데, 그 주체가 continuation입니다...

1. 문제 및 원인요즘 Swift6 의 concurrency와 관련된 checking 이 강화되면서 Non-sendable 과 관련된 경고를 많이 보곤한다.SwiftData 가 나오고 SwiftUI 에서 View 내부에서 query 를 직접 입력해서 View에 바로 적용할 수 있으나 기존 Repository Pattern 을 쓰던앱에 아키텍쳐를 준수하기 위해 ModelContext 접근을 단일 Thread 를 보장하기 위해 ModelActor 를 활용했고, 이를 Repository 에 주입하여 DTO 로 변환을 하면 되겠다고 단순하게 생각했다.import Foundationimport SwiftData@Modelpublic class SwiftDataItem { @Attribute(.unique) ..
1. 문제public enum TransactionType: String, Codable, CaseIterable, Sendable { case income = "income" case fixedExpense = "fixedExpense" case variableExpense = "variableExpense"}@Modelfinal class Category { @Attribute(.unique) var id: UUID var name: String var orderIndex: Int var transactionType: TransactionType var isActive: Bool @Relationship(deleteRule: .cascade, inver..
한번씩 하려다보면 항상 검색을 해야해서 정리해보았다...1. Date - 기본 날짜/시간 타입Date는 Swift의 핵심 날짜/시간 타입으로, Unix 타임스탬프(1970년 1월 1일 00:00:00 UTC부터의 초)를 기반으로 한다.// 현재 시간let now = Date()// 특정 시간 생성let specificDate = Date(timeIntervalSince1970: 1640995200) // 2022-01-01 00:00:00 UTC// 상대적 시간 생성let oneHourAgo = Date(timeIntervalSinceNow: -3600)let tomorrow = Date(timeIntervalSinceNow: 86400)2. TimeInterval - 시간 간격TimeInterval은 ..

SwiftUI 를 사용하다가 보면 .toolbar 나 .onChange 같은 함수들이 iOS 17.0 을 기준으로 deprecated 되어 분기처리를 해야하는 경우를 마주하게 된다. 하지만 매번 사용하는 곳에서 분기처리 하는 코드를 사용하는 건 비효율적이기에 View 의 extension 을 사용하면 중복된 코드를 줄일 수 있다.먼저 onChange의 변화점에서 공통점을 찾아보자.바뀐점은 17 이상에선 initial 이라는 인자를 받는데 이건 initial 될 때 액션을 발생시킬지를 결정하는 값이다.그리고 두 번째로는 변화값을 받아서 전달해주는 action handler 가 17 이전에는 바뀐 값 하나만을 전달해줬다며, 17 이상부턴 바뀌기 전과 후 모두를 전달해준다. 여기서 공통점은 결국 어떠한 값(..

Accessibility 를 공부하다가 보니 흔하게 사용하는 TextField 에서 음성입력 버튼이 없다는 걸 깨달았다. searchable 로 navigation bar 에 search controller 를 추가하더라도 없었다. 물론 키보드가 올라오면 음성입력할 수 있는 버튼이 있지만, 가장 최하단에 있어서 접근하는 것이 여간 불편한 일이라는 걸 깨달았다.해당 코드는에서는 AVAudioEngine 을 사용할 계획이다. 1. 권한 설정info.plist 에 마이크 사용 및 음성 인식 사용 권한 요청을 추가해 준다.2. STTManager 정의2-1 권한 요청 (Combine 으로 진행)import Foundationimport AVFoundationimport Speechfinal class STTMa..

2022년 애플아카데미에 있을 때 Accessibility 관련 주제에 대해 얘기를 들은 적이 있었다.옛 직장에서 홍보관 리뉴얼을 진행할 때 휠체어를 탄 사람들이 관람하기 어려운 곳이란 판단에 그 부분에 대한 업데이트를 요청한 적이 있었다. 국내 성인이면 누구나 알만한 대기업이 었지만 금액, 효율 등의 이유로 바로 반려당한 적이 있던 나였다.하지만 Apple 은 아카데미를 오픈할 당시 자동문의 사이즈가 휠체어 사용자를 위한 사이즈를 충족하지 못하였기에 오픈을 연기했었다. 그런 기억이 있기에 Accessibility 에 관한 내용을 처음 접했을 때 어떤 유저든 사용편의성을 주기 위한 노력을 하는 기업이구나란 생각을 했고, 나도 앱을 개발하게 되면 그런 노력을 해야겠다고 생각을 했는데....여태 잊고 있다 ..

이전 회사에서 혼자 AR 을 담당해서 개발을 했었는데, 바쁘다는 핑계로 제대로 정리를 한적이 없었다....그래서 시작하게 된 AR Posting1. ARKit, RealityKit 은 무엇일까?ARKitAR을 사용하려면 ARKit 을 쓰면된다고 생각하지만 100% 맞다고 할 순 없다. 실제 우리가 App 을 만들때 UI 가 있어야 하지만, ARKit 은 우리가 사용할 수 있는 UI 요소가 존재하지 않는다. ARKit 은 AR 환경을 구축하기 위해 내가 가지고 있는 하드웨어(iPhone, iPad)에 장착되어 있는 센서들을 통해 데이터를 받아와 AR 환경을 만드는데 도움을 주는 프레임워크이다.RealityKitRealityKit 공식 문서 페이지에서 말해주듯이 3D 시뮬레이션 및 렌더링 기능을 제공하는 프..

1. Observation 이란?wwdc 23 에서 발표한 observation 은 프로퍼티의 변화를 추적하는 Swift 기능으로 같은 wwdc 23 에 발표한 swift 5.9에 신기능인 매크로를 사용하여 정의한 데이터 타입을 observable 하게 바꿔주는 기능이다.2. 사용방법정의한 class 에 @observable property wrapper 를 붙여준다.import Foundationimport Observation@Observable class DataModel { var count: Int = 0}이를 View 에서 사용할 땐 @State, @Environment, @Bindable, var 를 사할 수 있다. 여기서의 기준은View의 부분일 경우 @State, 글로벌하게 변수를 사용할..