본문 바로가기

iOS/SwiftUI

(5)
[SwiftUI/TCA] CMPedometer, AsyncThrowingStream, TCA dependencies 라이브러리로 만보기 기능 구현하기 현재 진행중인 프로젝트에서 실시간으로 걸음수를 업데이트하는 기능을 구현해야 했습니다. 프로젝트 스펙은 tuist 모듈화 및 TCA 아키텍쳐를 사용하고 있었기 때문에, TCA에 내장된 dependencies 라이브러리로 의존성을 관리하고자 했습니다. 걸음 수 데이터 가져오기 걸음 수 데이터는 HealthKit 또는 CoreMotion의 CMPedometer를 이용하여 가져올 수 있습니다. HealthKit을 이용하기 위해서는 사용자의 건강 정보에 접근 권한을 가지고 있어야하며, CoreMotion의 경우 Motion 정보 접근 권한을 허가받아야 합니다. CMPedometer를 이용할 경우 HealthKit보다 더욱 빠르게 sync되는 걸음수 데이터를 얻을 수 있기 때문에, 실시간 만보기를 구현해야 하는 입..
[SwiftUI] Managing Data by Property Wrappers (@State, @StateObject, @ObservedObject, @EnvironmentObject) SwiftUI가 기존 UIKit과 비교하여 크게 다른 점 중 하나는, State를 관리할 수 있는 Property Wrappers가 기본적으로 제공된다는 것입니다. 가장 기본적인 @State부터 시작하여, @StateObject, @ObservedObject, @EnvrionmentObject까지 언뜻 비슷하지만 확연히 다른 성질을 가지고 있습니다. 특성과 용도에 대해 헷갈릴 수 있는 부분이 있어 위의 4가지 프로퍼티 래퍼에 대해 간단히 요약해보려고 합니다. 먼저 @State에 대해 알아보겠습니다. @State A property wrapper type that can read and write a value managed by SwiftUI. @frozen @propertyWrapper struct S..
[SwiftUI] TCA(The Composable Architecture) 아키텍쳐 알아보기 ( 1편 - TCA, ReducerProtocol) 최근 SwiftUI로 새로운 프로젝트를 진행할 일이 생겨 SwiftUI의 아키텍쳐 패러다임에 대해 공부했고, 프로젝트에 적용중입니다. 링크에 SwiftUI의 MVVM에 대한 견해가 담긴 글이 있습니다. UIKit에서는 MVVM을 많이 이용했지만, SwiftUI의 단방향 Data Flow와 선언형 UI가 주는 장점을 이용하기 위해 TCA를 채택했습니다. 각설하고, SwiftUI의 아키텍쳐 중의 하나인 Pointfreeco의 TCA(the composable architecture)에 대해 정리해 보겠습니다. 본문은 TCA API Document와 TCA Readme 한국어 번역을 참고하여 작성했음을 알려드립니다. TCA(The Composable Architecture)란? - TCA는 일관되고 이해할 수..
[SwiftUI 기초] @Environment, Environment Values로 View의 계층적인 환경 관리하기 Environment values Share data throughout a view hierarchy using the enviroment. 스위프트UI의 View들은 Environment 프로퍼티 래퍼를 통해서 환경으로부터 읽은 confiugration 정보에 반응하여 스스로의 UI를 구성할 수 있다. 이러한 environement 정보는 Container로부터 계층적으로 내려가서 하위 View들에게 전해진다. 따라서 Envrionment values를 이용하면 전체적인 뷰 계층의 환경을 조정할 수 있다. @Environment A property wrapper that reads a value from a view’s environment @frozen @propertyWrapper struct E..
[SwiftUI 기초] SwiftUI 맛보기 목표 Xcode Canavas를 이용해서 코드와 UI를 동시에 보며 작업하는 방법 알아보기 재사용 가능한 뷰 만드는 방법 알아보기 @State 키워드에 대해 알아보기 Alert 띄우기 내용 1. App Protocol을 따르는 struct를 정의하여 App을 시작할 수 있다. @main struct RGBullsEyeApp: App { var body: some Scene { WindowGroup { ContentView(guess: RGB()) } } } App Protocol의 기본적인 구조는 아래와 같다. 연관 타입으로 Scene을 정의해주고, body를 구현하면 된다. @SceneBuilder와 같은 어트리뷰트는 추후에 공부해보자. 위의 코드를 보면 WindowGroup을 통해 시작할 Window..