본문 바로가기

분류 전체보기

(97)
[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..
[Needle] Uber의 Needle로 컴파일 타임에 안전한 의존성 주입 환경을 구현하기 의존성 주입(dependency injection)의 필요성과 일반적인 문제점 DI, 의존성 주입은 객체 지향 프로그래밍에서 책임을 분리하고, 확장에 유연하게 만들어주는 핵심적인 패턴 중의 하나입니다. 의존성 주입의 장점은 다음과 같습니다. 1. Class와 Structure의 요구사항과 책임이 더욱 분명하고 명확해진다. 2. 의존성을 Mock으로 교체하여 Unit Test를 수행하기 편리해진다. 3. 의존성 주입을 받는 객체는 해당 의존성에 대한 책임을 지지 않으면서도 그 의존성의 기능을 사용할 수 있다. 4. Protocol을 사용하면 프로젝트에 존재하는 Coupling을 제거할 수 있다. 5. 여러 개발자가 분리된 객체에 대한 동시 작업이 가능해진다. 물론 장점만 있는 것은 아닙니다. 프로그래머의 ..
[iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (6편 - Fastlane, github actions로 tuist project의 CI/CD 구현) [iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (1편 - CI/CD란 무엇일까?) [iOS] Fatslane + Github Actions로 CI/CD 파이프라인 구축하기 (2편 - Github Actions 살펴보기) [iOS] Fatslane + Github Actions로 CI/CD 파이프라인 구축하기 (3편 - fastlane으로 TestFlight에 앱 업로드하기) [iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (4편 - fastlane match로 인증서와 profile을 git 저장소에 관리하기) [iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (5편 - Tuist..
[iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (5편 - Tuist와 Fastlane 함께 사용하기, xcconfig과 schemes, match 설정) [iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (1편 - CI/CD란 무엇일까?) [iOS] Fatslane + Github Actions로 CI/CD 파이프라인 구축하기 (2편 - Github Actions 살펴보기) [iOS] Fatslane + Github Actions로 CI/CD 파이프라인 구축하기 (3편 - fastlane으로 TestFlight에 앱 업로드하기) [iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (4편 - fastlane match로 인증서와 profile을 git 저장소에 관리하기) Tuist 프로젝트에 match 적용하기 tuist로 프로젝트를 생성하면 build setting을 설정해주지..
[Swift] Modern Concurrency Swift ( 2편 - GCD와 Operation의 특징과 문제점 요약 ) [Swift] Modern Concurrency Swift ( 1편 - Thread Class로 Thread 문제 파헤치기 ) Dispatch : Grand Central Dispatch(GCD) Grand Central Dispatch(GCD)로 알려진 Dispatch 프레임워크는, 시스템에 의해 관리되는 dispatch queues에 작업을 제출하여 멀티코어 하드웨어에서 동시성 작업을 수행하도록 하는 프레임워크입니다. C에 존재하는 libdispath library의 apple implments이며, 다음에 설명할 Operation Queue도 GCD의 위에서 구현되었습니다. GCD가 다루는 모든 작업들은 GCD가 관리하는 FIFO(First in First Out) Queues에 의해 배치됩니다. ..
[Swift] Modern Concurrency Swift ( 1편 - Thread Class로 Thread 문제 파헤치기 ) Swift Concurrency, 그리고 기존의 GCD, OperationQueue 동시성(Concurrency) 프로그래밍이란 여러 작업을 동시에 여러 스레드에서 처리하는 프로그래밍 방식을 뜻합니다. iOS 개발에서 Concurrency는 어플리케이션의 성능 향상 및 UX 향상에 큰 도움을 주며 없어서는 안될 부분입니다. 기존에는 GCD, OperationQueue를 이용하여 이러한 목표를 이룰 수 있었습니다. WWDC 2021에 소개된 Modern Concurrency Swift, Swift Concurrency는 컴파일 타임에 Thread-Safe한 코드를 작성할 수 있도록 도와주고, 특정 상황에 Thread가 멈추지 않고 다른 작업에 할당될 수 있도록 합니다. Swift Concurrency를 본..
[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는 일관되고 이해할 수..
[Swift] Apple의 Swift 언어에 Contribute하기 (Feat. chatGPT) 얼마 전 medium에서 스위프트 언어에 기여한 경험 이라는 글을 봤습니다. 개발 실력이나 경력과 관계 없이 적극적인 자세로 contribute하는 자세가 멋있어 보여서, '나도 한번 해 볼까?'라는 충동과 함께 typo 정도라면 수정해서 올릴 수 있을거라는 생각이 들었습니다. 그리고 당장 apple의 repo들을 뒤지기 시작했습니다. 결과는 성공! contribute의 과정을 적어나가 보겠습니다. Apple의 Swift 언어에 Contribute한 과정 1. Apple의 Repo를 돌아보며 typo를 찾기가 쉬울지 판단해보기 우선 typo 찾기가 어렵다면 당장 급한 일은 아니니 개발 공부를 하며 천천히 찾아볼 생각이었습니다. apple의 repo 중 변화가 활발해보이는 것을 고른 다음, github1s..
[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..