일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- environmentobjet
- WWDC
- auth
- Concurrency
- Performance
- CS
- fullscreencover
- authentication
- withAnimation
- 네트워크
- state
- RxSwift
- realitykit
- stateobject
- swift
- UIKit
- Animation
- gesture
- ar
- firebase
- SwiftUI
- ios
- 데이터최적화
- Network
- combine
- arkit
- 달력
- iphone
- GCD
- dataflow
- Today
- Total
목록swift (28)
XLOG
사이드 프로젝트를 진행하면서 Tree 형태의 데이터 구조를 만들어 사용했다.데이터는 SwiftData 를 사용해서 저장을 했으며 Model 은 Hashable 을 상속시켰다.그런데 데이터를 수정하고 나서 한번씩 Fatal error 가 발생했다.테스트를 더 해보긴 해야겠지만 찾아본 바로 원인은 Hashable을 충족하기 위해서 Equatable 또한 상속시켜야 한다. Hashable 이 Equatable 을 상속해야하는 이유는 HashValue 의 비교를 위해서인데, 여기서 내가 실수한 부분은 == 에 정의할 때 비교 연산을 Hash 함수에 사용한 Propertie 와 달라서 였다.예를 들면class Model { let id: UUID = UUID() let name: String let s..
1. ObservableObservable = Observable sequence = seqquenece비동기이벤트를 만들고, emitting 한다.관찰 가능한 함수형태의 연산자next 를 통해 이벤트를 방출completed 이벤트를 통해 종료error 가 발생되더라도 종료된다.// just: 하나의 요소를 방출하는 Observable sequence 를 생성let just = Observable.just(1)// of: 여러 요소를 순서대로 방출하는 Observable sequence 를 생성let of = Observable.of(1,2,3,4,5)// from: array 를 취하며 array 내부 요소를 하나씩 방출하는 시퀀스를 생성let from = Observable.from([1, 2, 3,..
보통 앱 내의 데이터를 저장할 때 많이 사용하는 것이 UserDefault 와 CoreData 이다. UserDefault 의 경우 앱의 설정(라이트모드, 다크모드 등) 과 같은 간단한 데이터를 저장하는데 사용한다면, CoreData 의 경우 좀 더 복잡한 데이터를 저장하는데 사용한다고 한다.처음 Swift 를 접하고 코어데이터란게 있다 라는 얘기를 주변사람들에게 들었을 때는 DB 같은건가 하는 생각을 했었다.하지만 CoreData 는 단순히 데이터베이스라고 생각하긴 어렵다.CoreData 는 프레임워크다. 어플리케이션에서 offline으로 사용할 수 있는 영구적인 데이터를 저장, 관리를 도와주는 프레임 워크로 icloud 계정을 통해 다양한 device 에 데이터를 동기화까지 가능하게 해준다. 공식문서..
1. DiffableDataSource 란?Apple 이 WWDC19 에서 발표한 iOS 13 이상부터 사용이 가능한 UITableView, UICollectionView의 데이터 관리를 쉽게 하기 위한 도구이다.2. DiffableDataSource 의 특징선언적 업데이트DiffableDataSource 를 사용하게 되면 사용하고 싶은 데이터를 선언하여 적용할 수 있다.Snapshopt 기반데이터 소스를 직접 관리하는 것이 아닌 Snapshopt을 활용하여 스냅샷의 변경사항을 단순한 UI 뿐만이 아닌 애니메이션까지 적용한다.프레임 워크에서 자동으로 비교하여 적용하기에 특별한 관리 없이 최적화된 변화를 적용한다.3. 공식 문서DiffableDataSource 는 class 객체로 collectionVi..
IAP 는 In-App-Purchase 의 약자이다.우선 인앱결제를 하기 위해선 개발자계정, 상품등록된 앱, 또한 그 앱의 앱내구입 상품 등록이 필요하다.앱스토어에 앱을 올리면 수익화 카테고리에 앱 내 구입 항목이 있다.클릭하면 내 앱에 인앱결제를 할 수 있는 항목 추가가 가능하다.위에 과정을 보면 알 수 있듯이 결제는 앱스토어 서버를 통해 이루어 진다.우리의 앱은 앱스토어 서버를 통해 Transaction 을 받아서 인앱 결제 로직을 처리한다.인앱결제 상품은 총 4가지가 있다.소모성 항목비소모성 항목자동 갱신 구독비갱신형 구독그럼 In App Purchase 의 테스트 환경을 만들어보자. 실제 공부하는 사람들은 개발자 계정 및 출시한 앱이 없을 수 있다. 하지만 StoreKit에서는 StoreKit C..
GCD VS Concurrency동기화의 대한 처리, 같은 데이터에 접근을 위해 GCD 의 경우 뮤텍스, 세마포어 등을 이용해야 하나, Concurrency 는 컴파일 에러를 발생시킨다.즉 안정성이 높다GCDworkItem 당 하나의 스레드를 할당,스레드는 결국 메모리에 할당, thread explosion., 메모리 오버헤드를 발생시킬 수 있다Context switching 이 발생하며, 블록된 스레드가 어떤 자원을 lock 하고 있을 때 데드락 발생ConcurrencyCPU 성능 이상의 스레드를 생성하지 않는다또한 await으로 중단됐을 때 컨텍스트 스위칭을 하는 것이 아닌 같은 스레드에서 다음 함수를 실행우선순위 역전Concurrency는 FIFO 가 아니기 때문에 우선순위가 높은 작업이 들어오게 ..
회사에서 근무를 하며 백엔드에서 날려주는 상황별 Error Code 는 매우 다양했다. 하지만 Client 측에선 다양한 Error Code 라도 유저가 할 수 있는 Action 은 그리 다양하지 않았다.그리고 회사에서 TCA 를 적용해서 프로젝트를 진행하였기 때문에 Error Handling 을 Composable 하게 구성할 수 없을까 고민을 했다. 그래서 Error Handling 을 위한 Redcuer 와 View 를 만들어 각 Feature 적용해야 겠다는 생각을 했다.우선 내가 throw 할 수 있는 Error Case 와 해당 Error 마다 할 수 있는 액션들의 정의가 필요했다.//// Created by Sooik Kim on 5/15/24.//import SwiftUI// API 통신..
SwiftUI 의 경우 기본 Sheet, FullScreenCover를 제공한다. 하지만 이 경우는 Sheet 의 크기가 정해져 있다.하지만 일을 하며 디자이너가 Content 의 사이즈에 맞는 Sheet 를 원했다. 그를 위해 안에 들어가는 Content 의 사이즈를 확인하여 동적으로 Sheet의 크기를 결정할 수 있는 CustomSheet 를 만들어야 겠다고 생각했다.이 때 필요한 것은 CustomSheet 내부 Content 의 사이즈를 알 필요가 있었다.그것을 위해 이전 SwiftUI Scroll value를 확인할 때 사용했던 PreferenceKey 를 사용하기로 했다.struct CalculateSize: PreferenceKey { static var defaultValue: CGSi..
저번 Animation 공부한 내용을 바탕으로 Camera Shutter 를 구현해 보았다. 우선 카메라 셔터 부터 시작을 해보자. struct ContentView: View { @State var buttonTapped: Bool = false var body: some View { ZStack { Color.black ZStack { // 외각 테두리 Circle() .stroke(lineWidth: 4) .foregroundColor(.white) // 내부 원 Circle() .foregroundColor(buttonColor) .frame(width: buttonTapped ? 56 : 60, height: buttonTapped ? 56 : 60) } .frame(width: 72, heig..
기본적으로 SwiftUI 에 애니메이션을 적용하기 위해 .animation(_:value:) 를 사용하거나 withAnimation() 을 사용했다. 1. 둘의 차이 우선 이 둘의 차이에 대해 먼저 확인을 해보자. animation(_:value:) 는? 먼저 .animation() 이다. 인스턴스 메소드로 some View 를 리턴한다. view를 리턴한다는 것은 viewModifier 로 생각하면 되는 것 같다. 변화를 추적할 값 V 의 변화를 감지, 그로 인해 영향을 받는 변수들을 animation 옵션에 따라 state 의 변화를 주어 해당 View에 애니메이션을 적용한다. 그렇다면 withAnimation은 ? withAnimation은 함수이다. 결과값을 Return 한다. 즉 결과값을 리턴을..