Conquer SwiftUI #2 - Intermedaite(Ongoing)
What?
Conquer SwiftUI #1 - Basic 에서 이어진다.
대략 3주정도 SwiftUI 를 공부해보고 적기 시작하는 글이며, Basic글보단 좀 더 근본적이고 어려울 수 있는 주제들을 공부한 것을 열거한다.
Basic글과 이 글을 적는 시간동안도 많은 공부를 했는데 공부한 것들을 모두 열거할 수 없을 정도로 많이했기 때문에 생략한다.
그리고 공부하는 모든 글을 적지는 않을 것이다. 그냥 남겨둘 가치가 있는 것만 조금 적어두겠다.
Current?
현재 앱도 하나 만들고는 있는데, 개발을 처음 배우는 사람이 기본적인 개념을 잡고 바로 앱을 만드는 것은 너무 재미있는 일이지만, 그렇다고 현재 프로젝트에 매몰되어 더이상 넓은 개념을 잡아가지 않는 것은 실수이다.
물론 어플리케이션을 만들기 위해 그 전까지 공부를 함이 맞지만, 당신이 어떤 프레임워크를 접한다면 정말 단순한 개념들을 익히고 제품을 만들 수 있다 자만한다면, 처음엔 거침없었던 당신의 코딩이 점점 느려지고 알 수 없는 버그들과 실수들이 난무하여 종국엔 개발 자체에 흥미도를 잃을 수 있다.
하지만 당연히 실제 개발 실습을 통해 사고하는 것과 그 과정에서의 자잘한 시행착오들이 큰 무기가 됨은 맞지만, 그것은 언젠가는 자연스레 쌓일 스킬이 될 것이며, 오히려 공부를 처음 시작할 때 조금 더 욕심내서 “여기까진 그래도 다 보고 프로젝트를 해보자” 이런식으로 생각하는것이 좋다.
나도 안다. 이것은 굉장히 고통스러운 일이다. 나는 Basic을 공부할 때 실제로 Swift Docs를 A-Z로 다읽으며 점점 흥미도가 떨어졌었고, 몇년간 여러 프레임워크와 언어들을 꾸준히 공부한 내가 이렇게 착잡함을 느낄 정도이면 개발에 익숙하지 않은 사람들이 얼마나 이 과정을 괴로워할지를 짐작할 수 있다.
개념을 익히는건 물론 프레임워크에 더 익숙해진다면 더 쉽지만, 사람들은 대개 다시 돌아와서 기본을 공부하는 경우가 드물기 때문에 프레임워크랑 친숙하지 않은 이 때가 기회라고 여겨야 할 것이다.
TODO
- TCA Architecture 여기서도 Redux나 BloC 같은 친구가 있는지 몰랐는데, 일단 이런 방식을 별로 안좋아해서 추후 공부를 해볼 예정이다.
Daily
23-08-18
WWDC2023 - Explore SwiftUI animation
중간 내용중, Vector delta를 이용한 애니메이션 계산 방식과 merge되는 애니메이션을 올바르게 처리하기 위해 Timing인 쪽에서 두 연산의 결과를 그저 합한 결과물로 렌더링을 한다는 것이 인상깊었다.
난 오히려 Timing curve에서는 merge를 하여 중간에 애니메이션이 변경되어도 기존걸 취소하고 그 다음것을 부드럽게 연결하는 로직이 존재할 줄 알았는데, 반대였다.
WWDC2023 - Discover Observation in SwiftUI
iOS17(Swift 5.9, XCode 15)이 아마 SwiftUI의 큰 분기점이 될 것이라 예상된다.
기존 SwiftUI Data flow의 코어가 되는 @StateObject, @EnvironmentObject, @ObservedObject, ObservableOBject, @Published
등을 아예 @State, @Environment, @Bindable
로 일원화 하며 갈아엎는걸 보면 아직 SwiftUI는 성숙하지 않고 활발히 발전중인 프레임워크라고 생각이 된다.
게다가 Swift 5.9의 매크로 기능으로 Preview라든지 많은 Use case를 벌써부터 소개하는 것을 보면 2,3년 뒤에 어떤 기상천외한 문법을 써서 SwiftUI를 다루게 될지 가늠이 안간다.
SwiftUI 에서의 Dependency Injection에 대한 많은 고민을 했는데, 현재 Factory 라는 라이브러리를 찾아 도입했으며, 이 형용할 수 없는 무언가 불편한 SwiftUI 에서의 Data Flow를 보완해주는 완충제 역할을 할 수 있을 것 같다.
WWDC2023 - Demystify SwiftUI performance
조금 뻔한 얘기지만 ForEach
같은 곳에 constant count를 셀 수 있도록해야하며 identity를 빠르게 entity에서 fetch할 수 있게 하는 등 유용한 팁이 소개되었다.
23-08-22
Official Docs - Controlling Publishing with Connectable Publishers
Timer
객체의 생성에서 쓰이는 autoconnect()
의 쓰임새를 알 수 있다.
이것이 일반적인 Reactive 패러다임에서의 hot/cold 개념과는 어떻게 다른지 잘 모르겠다.
아마 Swift의 Combine에서는 hot/cold를 굳이 명확히 다를 필요가 없을 것 같기도 하다.
Combine에서 multicast와 share의 개념을 알 수 있었다.
23-08-23
짜임새있게 만들어진 샘플들을 보고 공부를 하는것이 효율적이다.
위 프로젝트는 좀 봐서 이것저것 따라해보았고
를 좀 보면서 필요한 부분을 익히려 한다.
Clean Architecture for SwiftUI
한국어번역도 있다.
이전부터 안드로이드 iOS 개발 진영에서 여러 아키텍처가 있었지만,
결국 React를 시작으로 전반적인 프론트엔드의 생태계나 흐름이 Data Flow를 개발자가 조절해 프레임워크가 Rendering을 담당하는 방식으로 진화중이라고 생각했었고, 이것이 결국 거대한 추상적인 MVVM 아키텍쳐라고 스스로 느껴왔는데, 이 글에서 내 생각이 맞다는걸 다시 짚어줘서 좋았다.
23-08-24
Donny Wals: Using Core Data in a Modern SwiftUI Application
Core Data with CloudKit (Series)
Core Data가 아키텍처 적으로든, 그냥 그 프레임워크 자체로든 꽤나 실제 적용하려면 어려운 부분이 많아서 자세히 공부가 필요했다.
SwiftData라는 것도 최근에 WWDC에서 다루는 걸로 알고 있지만, 아직 성숙하지 않다고 느끼기 때문에 보류했다.
How SwiftUI’s Preference Keys are propagated
Preferences를 잘 정리한 글
이것저것 테크닉을 배울 수 있는 좋은 컬렉션이다.
Best Practices for Detecting and Opening URLs in SwiftUI
23-08-28
Mastering Charts in SwiftUI(Series)
Charts
를 공부해봤다
Core Data with CloudKit: Exploring the CloudKit Dashboard
How to Use iOS Background Tasks Framework To Keep iOS App Updated
Mastering In CoreData (Part 12 Multithreading Concurrency Problem)
Mastering In CoreData (Part 13 Multithreading Concurrency Strategy Notifications)
Mastering In CoreData (Part 15 Multithreading Concurrency Strategy Parent — Child Use Case 1)
The New Navigation System in SwiftUI
Memory Optimization Journey for a SwiftUI + Core Data App
Bizarre error in SwiftUI preview
23-08-29
Alignment and alignment guides
Alignment in SwiftUI: Everything You Need To Know
SwiftUI는 완성도는 모르겠고 가장 헷갈리는(가장 인간이 직관적으로 이해하기 어려운) Layout system을 가지고 있다고 생각한다.
23-08-30
WWDC2019 - Getting Started with Instruments
23-09-02
많은 WWDC 영상들을 보고있다.
You don’t (always) need [weak self]
WWDC2022 - Visualize and optimize Swift concurrency
WWDC2023 - Analyze hangs with Instruments
WWDC2021 - Swift concurrency: Behind the scenes
23-09-06
Testing과 Accessibility, 특히 Voice Over쪽을 살펴보고 현재 만들고있는 앱에 알고있는 지식을 모두 적용했다.
Demystifying SwiftUI Animation: A Comprehensive Guide
SwiftUI Accessibility - Series
23-09-07
Xcode의 설정에 좀 더 관심이 생겨서 Tuist를 공부하고 적용해보려고한다.
Working with the XCode configuration(.xcconfig) file
Xcode Scheme, Environment, Project Configuration Setup Recipe
XCConfig 및 Configuration, Scheme에 대해서 공부했다.
WWDC 2023 - Discover String Catalogs
23-09-08
WWDC 2023 - Get started with building apps for spatial computing
WWDC 2023 - Principles of spatial design
WWDC 2023 - Develop your first immersive app
23-09-10
Xcode의 테스트에서 눈여겨봐야할 라이브러리들이 몇개가 있다.
Assertion, Expectation을 좀 더 쉽게 구현할 수 있게 해주는 유틸이다.
SwiftUI View를 Unit testing 환경에서 introspection하여 Assertion 및 Manipulation을 돕는 헬퍼이다.
Swift 5.9의 Macro를 활용해 Spy를 만들어주는 라이브러리인데, 아직 Xcode 15가 정식으로 안나왔지만 기대가 되는 라이브러리이다.
내가 오랜시간동안 JavaScript로 테스트를 생각하다보니 기존 컴파일 기반의 언어들에서 Test Double들을 만들고 Assert하는것이 상당히 난이도 있는 작업이란 것을 망각했다.
실제로 Swift에서 Spy를 만드려면 call count같은걸 직접 기록해두어야 하는 등, 상당히 귀찮다.
이런것들을 종합적으로 고려했을 때 Compile Time에 많은 작업의 자유도를 개방하는 것이 언어의 중요한 측면이라고도 볼 수 있다.
Dart도 Build Runner를 이용하는 방식으로 frozen
, json_serialization
등이 발전한 것이 지금와서 생각해보면 정말 편리하고 좋은 방식이라고 생각이 든다.
그리고 Xcode의 테스트 타겟이 실제로 번들화되어 Simulator에서 실행이 되어야 한다는 점이 처음 봤을땐 미친놈인가 싶었는데, 오히려 장점처럼 보이기도 한다.
Pure한 JVM 환경이나 JavaScript 에서 유닛 테스트를 돌리는 Android, RN 쪽을 생각해보면 사실 Environment를 Mocking하기 위해 많은 삽질이 필요하다.
그런것을 그냥 아예 없애버린 Xcode의 테스트 방식이 사실 더 옳은 방식일 수도 있겠다는 생각이 든다.
WWDC2023 - Fix failures faster with Xcode test reports
WWDC2020 - Handle interruptions and alerts in UI tests
23-09-11
내가 찾던 스타일의 Test framework가 있다. Nimble과 연동한 점도 훌륭해보인다. 굳 이걸로 써야겟다.
Discover Observation in SwiftUI (feat. WWDC 2023)
@Observable
자체가 iOS 17.0
이상의 API라 사실 지금 쓸 수가 없고 무의미하다.
23-09-18
iOS 17 Data Flow with Observation Framework
23-09-20
[WWDC22] Complications and widgets: Reloaded
iOS 공부를 하고있긴 하고 현재 만들고 있는 앱을 빨리 마무리짓고 다른 앱도 만들어볼 생각이다.
일단 이 문서는 23-09-20ㅇ
Comments