본문 바로가기

전체 글188

[TCA] Effect.swift 공식문서 음미하기 1. TCA에서 호출하는 Reducer Action은 모두 Main Thread니까 Thread Safe? (아님)TCA에서 호출하는 Reducer Action은 모두 MainThread에서 실행됩니다.  이유는 Send에 나와있습니다. 우리가 Reducer의 Action을 호출하는 경우는 두 가지 입니다.  - view에 저장된 Store의 send 매서드를 통해 을 통해 호출 (만약 MainThraead가 아닌 다른 곳에서 호출할 시 런타임 에러 발생) - reducer 내부에서 send를 통해 호출  Store에 저장된 send와, reducer의 send의 경우 다음과 같은 코드를 볼 수 있습니다. @MainActor 때문에 send Struct을 Effect.run에서 호출 할 때 마다 Main.. 2024. 8. 24.
[SUSU] TCA로 여러개의 병렬로 Network요청 보내고 한번에 View Update 하기 (Using Isolated Task Manager) 들어가는 말화면 진입시 여러가지 API요청을 병렬적으로 수행했야하는 과제가 있습니다. TCA에서 비동기는 Effect의 Operation인 run 함수를 통해서 비동기 함수를 실행할 수 있습니다. 이를 통해서 서버를 통해 정보를 가져올 수 있습니다. 또한 run Operation 안쪽에 있는 send를 통해서 다른 Action을 호출 할 수 있습니다. 출처: TCA Documentation var body: some Reducer { Reduce { state, action in // code... case .numberFactButtonTapped: state.isNumberFactRequestInFlight = true state.numberFact = nil.. 2024. 8. 24.
도시와 그 불확실한 벽 - 하루키가 그리는 우연과 사랑 0. 들어가면서책이 호불호를 탄다고 들었습니다. 아마 책에서 풀어내는 난해함으로 사료되는데 끝부분에 갈 수록 책의 난해함은 줄어듭니다. 특히 계속 어렵게만 다가왔던 장치들을 직접적으로 내용으로 풀어줍니다. 1부가 난해한 것은 사실이지만, 책이 끝까지 갈 수록 1부의 내용들이 오버랩 되면서 그 의미를 곱씹을 수 있게 됩니다.  1. 줄거리(시간순)"나"는 어릴 적 소녀와 교제한다. 이성과의 첫 연애는 말로 설명할 수 없는 가슴의 두근거림을 느낀다. 어느 날 소녀는 자신이 그림자라고 말하며 벽으로 둘러싸인 "저쪽 세계"에서는 그림자가 없다고 말한다. "나"는 소녀와 함께 "저쪽 세계"에 대해 그려본다. 하지만 어느 날 소녀가 갑자기 연기처럼 사라져버린다. "나"는 그녀에게 편지를 써보고, 그녀의 집까지 찾아.. 2024. 8. 15.
[자격증] iOS개발자, 정보처리기사 합격 후기(실기 시간 많이 안쓰고 합격 하는 방법 공유) 정보처리기사 자격증에 흔히 따라붙는 말이 있습니다. "정보처리기사 자격증은 없어도 그만이지만, 있는 편이 낫다." 이 자격증이 꼭 필수는 아니지만, 공기업에서는 가산점 5점을 받을 수 있다는 등, 자격증에 대한 긍정적인 이야기가 있곤 합니다. 어렵다고 할 수는 없지만, 전공자라면 조금만 공부하면 충분히 취득할 수 있다고들 하죠. 그래서 저도 "심심하니까 한번 따볼까?" 하는 생각으로 준비해 시험을 보았습니다. 공부할 시간이 없어요 == 정처기라는 자격증에 많은 시간을 소요하고 싶지 않아요즉, 정보처리기사 자격증에 많은 시간을 들이고 싶지 않다는 말이겠죠. 사실 공부하면서 느낀 점은, 어떤 공부든 자신이 하고 싶은 것에 더 큰 가중치를 두게 된다는 것입니다. 특히 학교를 다니며 프로젝트까지 병행하니 공부할.. 2024. 8. 1.
2024 젊은작가상 수상 작품집 젊은작가상 말도 많고 탈도 많지만, 올해도 사서 읽었다. 작년과 똑같이 올해는 다를 거라는 믿음으로 산 책이지만, 많이 아쉬웠다. 아쉬운 이유는 작년과 똑같이 소재의 진부함과 필력, 주제의 난잡함 세가지 이다. 특히 대상을 받은 김멜라 작가의 "이응 이응"의 "이응"에 대한 이야기가 와닿지 않았다. 다양한 성적 취향, 성적 욕구가 완전히 해결된 세상, 카뮈의 팬티 등 많은 장치들이 있었다. 이 장치들은 유기적인 결합이 아닌 삐걱되는 프로그램 버그같이 눈에 어른거렸다. SF에서 제일 중요한것은 세계의 배경이라고 생각하는데, 인간이 섹스를 통해 얻을 수 있는 쾌락을 기계를 통해 대체하는 세계가 설득력이 부족했다. 과연 그런 세계는 갈등이 줄어들까 라는 상상을 해보았지만, 전혀 아닐 것으로 생각한다.   책을.. 2024. 7. 28.
[SUSU] SwiftUI로 Custom Apple Login Button 만들기 문제 상황: SwiftUI 로 Custom Apple Login Button을 만들어야 하는 상황이 있었습니다.  Apple Login 을 위해서 두가지 방법이 있습니다.1. delegate 을 채택하여 구현하기2. SwiftUI의 직접 완성된 뷰를 통해 구현하기 이중 우리는 2번 SwiftUI에 대해서 말씀 드리려 합니다. 일단 코드 먼저 보면 다음과 같습니다. SwiftUI로 버튼을 만면 화면도 잘 나옵니다. SignInWithAppleButton(.continue) { request in // Request Code request.requestedScopes = [.fullName, .email] } onCompletion: { result in switch result { .. 2024. 6. 28.
[SUSU] 수수앱에서 Navigation 방식을 정의하기 part 3(TCA With Navigation) Velog 에서 최적화로 볼 수 있습니다.현재 상황: Part2의 문제점과거 Navigation Architeture는 SwiftUI에서 UIKit ViewController를 끌어오는 방식으로 아키텍쳐를 작성했습니다. 하지만 이것이 TCA와 SwiftUI가 바라는 방식은 아니라고 생각했습니다. 그 이유는 다음과 같습니다.SwiftUI View는 class가 아닌 structSwiftUI뷰는 class가 아닌 struct입니다. struct의 가장 큰 특징중 하나는 상속이 되지 않는다는 점 입니다. 그렇기 때문에 뷰를 만들거나 혹은 만들어진 뷰를 땡겨쓸 때 구체타입에 대해서 알아야 합니다. 이를 보충 설명하면 UIViewController만 있으면 되었던 UIKit과 달리 some View라는 구체 타입.. 2024. 6. 15.
[SUSU] 수수앱에서 Navigation 방식을 정의하기 part 2 (TCA With Navigation) Velog에서 최적화로 볼 수 있습니다.현재 상황: Part1의 문제점과거 파트에서 다룬 가장 큰 문제는 가장 상위 뷰에서 모든 Navigation로직을 정의해주는 일 이었습니다. 이렇게 가장 상위 뷰에 네비게이션 로직을 정의 하는 것은 개발하는데에 있어서 매우 불편한 상황을 자주 맞딱뜨렸습니다. 불편한 상황은 다음과 같습니다.읽기 어려운 코드과거에 어떤 코드를 어떻게 짰는지 읽기 위해서 Navigation Reducer를 키면 개발하고 싶은 욕구가 사라질 정도로, 코드를 읽는 것이 너무너무 어려웠습니다.TopRedcuer에 넌 너무 많은 것을 알고 있어TopReducer가 너무 무겁다는 생각을 했습니다. TopReducer가 ChildReducer에 State를 생성해주고 이를 Path에 넣어주었습니다.. 2024. 6. 15.
[SUSU] 수수앱에서 Navigation 방식을 정의하기 part 1 (TCA With Navigation) Velog에서 최적화로 보실 수 있습니다. [SUSU] 수수앱에서 Navigation 방식을 정의하기 part 1 (TCA With Navigation)이 글은 TCA를 활용하면서 SUSU가 달려온 Navigation방식의 변천에 대해서 소개하는 글 입니다. SwiftUI특성상 Navigation을 정의하는 것이 결코 쉬운 일이 아니였습니다. 또한 SUSU팀이 도착한 종착역이 옳velog.io머리말이 글은 TCA를 활용하면서 SUSU가 달려온 Navigation방식의 변천에 대해서 소개하는 글 입니다. SwiftUI특성상 Navigation을 정의하는 것이 결코 쉬운 일이 아니였습니다. 또한 SUSU팀이 도착한 종착역이 옳다고 할 수 없습니다. 그렇기에 비판적인 시각으로 바라봐주시면 감사합니다.상위 Re.. 2024. 6. 15.
[MealGok_개인 앱] 특정 고객에게만 일어나는 버그를 잡기 위해서, 고객의 기기로 디버깅 해보기 (트러블 슈팅) 문제 상황 밀꼭 개인 어플리케이션에서 심각한 문제가 발생했습니다. UserNotification에서 사용자에게 Authroziation을 요청하는 코드가 주석처리 되었던 버그를 발견했습니다. 그리고 이를 해결하고 내부테스팅 이후에 앱을 배포하였습니다. 하지만 유저가 어플리케이션에서 crush가 난다고 하였습니다. 유저는 "프로필 화면 클릭시 앱이 강제종료된다" 라는 말을 덭붙였습니다. 일단 프로필 화면에서 왜 강제종료 되는지에 대해서 고민하였습니다.       자문 구하기(버그를 재현해보기)이런 상황이 처음이라 처음에는 맨붕이 와서, 자문을 구해봤습니다. 공통된 의견으로 버그를 고치기 위해서는 "재현"이라는 키워드 였습니다. 이 버그가 어떤 상황에서 발생하는지만 알면, 버그를 수정할 수 있을 것 같았습니.. 2024. 6. 6.
[iOS] SwiftData를 활용한 간단한 Todo 어플리케이션 만들어 보기 SwiftData를 활용해서 TODO 어플리케이션을 만들어 봤습니다.  CoreData를 활용하기 위해서는1. modelContainer Modifier를 통해 필요한 Model들을 선언 2. 필요 Model을 저장3. modelContext를 활용한 데이터 활용 struct TIL_SwiftDataApp: App { var body: some Scene { WindowGroup { ContentView() } .modelContainer(for: [Todo.self]) }}//// ContentView.swift// TIL_SwiftData//// Created by MaraMincho on 6/2/24.//import SwiftUIimport SwiftDatastru.. 2024. 6. 2.
[수수-경조사비 관리 서비스] 수수의 Custom Numeric Animation View 작성 개요SUSU에서 Custom Numeric Animation을 만들어야 했습니다. Apple에서 제공하는 Numeric Animation의 경우 SUSU팀이 원하는 방향과 달랐습니다.  일단 원하는 애니메이션 동작입니다.    기존 oldValue가 위로 올라가고 newValue가 위로 올라가면서 newValue가 사용자에게 보이도록 뷰를 작성했어야 했습니다. 애니메이션에 대한 조건은 다음과 같았습니다.  숫자값 변경 시 애니메이션 재생숫자 한칸 씩 애니메이션이 들어갑니다.아래에서 위로 등장새 숫자 > 기존 숫자새 문자 혹은 기존 문자가 , 인 경우100,000 새로운 자릿수가 추가 될 경우ex) 5,000 → 15,000 으로 변할 경우, 가장 앞의 1인 아래에서 위로 등장위에서 아래로 등장새 숫.. 2024. 6. 1.