일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- swift
- SwiftUI
- view
- state
- WWDC
- iphone
- ios
- firebase
- gesture
- Algorithm
- withAnimation
- authentication
- RxSwift
- 달력
- Concurrency
- 최적화
- async
- Animation
- dataflow
- CS
- UIKit
- GCD
- 알고리즘
- SwiftData
- Network
- arkit
- date
- auth
- combine
- stateobject
- Today
- Total
목록Home (61)
XLOG
최근 디버그 과정 중 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은 ..
1. 배경회사에서 보행자 네비게이션 기능을 개발할 때 실시간 나의 위치가 경로상 어디에 위치하는지를 update 해줘야 했다. 보행자 경로 특성상 경로와 상관없이 지름길을 이용하기 쉽기에 순서와 상관없이 계산을 해야했다. 처음엔 LinearSearch 를 사용해 전체 coordinates 와의 거리를 계산하였다. 3km ~ 5km 의 경로를 테스트하며 UI 업데이트에 큰 무리는 없었으나, 연산량을 줄이면 배터리 및 성능의 이점을 가져올 수 있을거라 판단하여 확인하던 중 KD Tree 를 알게 되어 도입하게 되었다.2. KD Tree 란?KD Tree(K-Dimensional Tree)는 공간상의 점들을 빠르게 검색하기 위해 설계된 자료구조다. 내 경우는 경로가 2차원 (x, y) 좌표로 구성되어 있었고,..

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 에 관한 내용을 처음 접했을 때 어떤 유저든 사용편의성을 주기 위한 노력을 하는 기업이구나란 생각을 했고, 나도 앱을 개발하게 되면 그런 노력을 해야겠다고 생각을 했는데....여태 잊고 있다 ..
하다보니 좌표를 전송해야할 필요가 생겼다. 하지만 나한테 주어진 데이터 크기의 제한이 있었다. 그래서 Google Map APi 에서 인코딩된 폴리라인에 관한 내용을 확인하고 적용하려고 했다.구글에서 얘기하는 인코딩된 Polyline해당 알고리즘은 손실이 있는 압축 알고리즘이다. 하지만 그 손실로 발생하는 오차를 최소화 하여 진행된다.좌표값은 위도(Double), 경도(Double) 로 이루어져 있다. 게다가 Polyline 은 이 위도의 배열로 구성되어 있다. 단순한 핵심 Point 뿐만이 아닌 지도상에 도로의 형태에 맞게 각도를 주기 위해 포인트와 포인트 사이에도 많은 좌표가 들어간다.이를 효율적으로(데이터의 오차는 적고, 압축율은 높게) 전달하기 위핸 알고리즘이다.10 진수 값에 1e5를 곱한 다음..

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