전체 글
-
[TCA] EffectSwiftUI/study 2026. 9. 26. 16:06
TCA의 모든 비동기 처리와 외부 데이터 흐름은 전부 Effect를 통해 이루어진다. 왜 필요한가?Reducer는 순수 함수여야 한다.즉, “입력(Action)을 받아 State만 변경하고 빠르게 끝나야 함”을 의미한다.Reducer 내부에서 네트워크 통신을 기다리거나 Task.sleep같은 코드를 직접 넣으면 앱 상태 예측이 불가능해진다.따라서 TCA는 비동기 작업이 필요할 때 “내가 직접 일하지 않고, Effect라는 작업 지시서를 만들어 반환”하는 구조를 취한다. Effect의 기본 동작 흐름 코드 예시 Reduce { state, action in switch action { case .fetchUserButtonTapped: state.isLoading = true //단순 데이..
-
[TCA] ifLet카테고리 없음 2026. 9. 26. 15:20
TCA에서 ifLet은 부모 Reducer가 Optional(?) 상태로 존재하는 자식 Reducer의 로직을 안전하게 연결하고 수명주기를 제어하는 연산자(Operator)이다. ifLet의 정의와 역할정의부모의 State 내부에 자식 State가 Optional 타입 (예: ChildFeature.State?)으로 존재할 때, 이 값이 nil이 아닐 때만 자식 Reducer를 동작하도록 바인딩해 주는 메서드이다.역할조건부 로직 실행 : 자식 State가 존재할 때만 자식에서 들어오는 Action을 자식 Reducer로 전달한다.자동 메모리 & Effect 정리 : 자식 State가 nil로 바뀌어 화면이 닫히는 순간, 자식 Reducer에서 실행 중이던 모든 비동기 작업(Effect)을 자동으로 취소하..
-
@CasePathableSwiftUI/study 2026. 9. 26. 14:45
Swift에서 enum을 각 케이스(case)를 마치 struct의 프로퍼티처럼 다룰 수 있게 해주는 매크로다.Swift의 struct는 \.name처럼 KeyPath를 써서 내부 값에 접근하기 쉽지만, enum은 케이스 안에 들어있는 연관값(Associated Value)에 접근하기가 번거롭다.@CasePathable은 enum에 이 경로(CasePath)를 자동으로 생성해주는 역할을 한다. 언제 어떻게 사용하나TCA에서 Action enum을 정의할 때 (가장 대표적)부모 Reducer가 자식 Reducer의 Action을 감지하거나 식별할 때 \Action.Cases.child 같은 형태의 경로가 필요한데, 이를 자동으로 만들어 준다.enum 안의 특정 값을 안전하게 끄집어내거나 변경하고 싶을 때원..
-
[SwiftUI/TCA] 매크로(Macro) vs 프로퍼티 래퍼(Property Wrapper)SwiftUI/study 2026. 8. 28. 09:20
매크로와 프로퍼티 래퍼는 동작 방식과 역할이 완전히 다르다. 프로퍼티 래퍼ex) @Binding, @State앱 실행 중에 작동한다 (Runtime)변수의 읽기/쓰기 동작을 감싸서 추가 기능을 제공한다.비유 : 변수를 감싸는 스마트 포장지 매크로ex) @Observable, @Reducer 등코드 컴파일 시점에 작동한다. (Compile Time)보일러 플레이트 코드를 대신 작성해서 소스코드에 삽입한다.비유 : 코드를 자동으로 받아 적어주는 AI 비서
-
@BindableSwiftUI/study 2026. 8. 26. 16:02
Swift 5.9 및 swiftUI에서 도입된 Property Wrapper로,@Observable 또는 @ObservableState 객체에서 양방향 데이터 바인딩을 추출할 때 사용한다.TCA(v1.7이상)에서는 기존의 복잡했던 ViewBinding 방식 대신, SwiftUI 표준 방식처럼 직관적으로 텍스트 필드, 토글, Sheet 팝업 등을 연결할 때 @Bindable을 활용한다. 핵심역할Store 객체 바인딩 : TCA의 Store를 @Bindable로 선언하면, $store 표기법을 통해 State 내부 값에 대한 Binding이나 Child Store에 대한 Scope 바인딩을 손쉽게 뽑아낼 수 있다.Boilerplate 감소 : 이전처럼 ViewStore를 선언하거나 일일이 Binding용 ..
-
[TCA] @PresentsSwiftUI/study 2026. 8. 25. 16:46
=> TCA에서 화면전환(Navigation, Sheet, Alert 등)이나 팝업창을 제어하기 위해 상태(State) 속성에 붙이는 Swift 매크로이다.쉽게 말해 “이 데이터는 화면에 팝업이나 새 창으로 떠 있는 자식 화면의 상태입니다.”라고 알려주는 표식.왜 사용?화면 띄움/ 닫힘의 기준자식 화면 데이터가 nil이 아니면 화면이 나타나고, nil이면 화면이 닫힌다.메모리 및 수명 주기 자동 관리자식 화면이 닫혀서 nil이 될 때, 해당 자식 화면이 실행 중이던 비동기 작업(Effect)이나 취소 가능한 작업들을 TCA가 자동으로 안전하게 취소 및 정리해 준다.@ObservableState와의 호환성구버전 TCA에서는 @PresentationState라는 Property Wrapper를 사용했으나, ..
-
[TCA] The Composable ArchitectureSwiftUI/study 2026. 8. 25. 15:55
=> iOS 및 Swift 생태계에서 최근 몇 년간 가장 뜨겁게 사용되고 있는 상태 관리 및 앱 아키텍처 라이브러리=> Point-Free(Brandon Williams, Stephen Celis)팀이 만들었으며, 특히 SwiftUI와 조합이 매우 뛰어나다.=> 쉽게 말해, 앱이 복잡해지더라도 데이터 흐름을 한 방향으로 일정하게 유지하여 버그를 줄이고, 테스트와 모듈화를 엄청나게 쉽게 만들어주는 틀이라고 보면 된다.TCA의 핵심 개념TCA는 단방향 데이터 흐름(Unidirectional Data Flow)을 지향하며, 주로 Redux나 MVI 패턴과 매우 유사하게 동작한다.State (상태)화면을 그리는 데 필요한 모든 데이터의 집합이다.단순한 struct로 정의되며, 이 상태가 변하면 View가 자동으..
-
rsync(84838), Command PhaseScriptExecution failed with a nonzero exit code 에러에 대한 고찰...swift/correct a mistake 2026. 3. 18. 16:25
Moya 라이브러리를 받았는데, 이런 오류가 발생했다. 엄청난 삽질을 했다.... 구글링을 하다보니 권한문제라는 것 같아서혹시나 캐시같은게 꼬였나 싶어서DerivedData도 삭제하고Clean Build도 해보고Xcode도 껐다 켜보고컴퓨터도 껐다 켜보고 별 짓을 다해봤다.(신기하게도 이런 작업으로 해결되는 오류들도 있다.) 하지만 어떤걸로도 해결되지 않아서 다시 구글링을 해봤다.처음에는 무지성으로 따라만 하다가이거 제대로 알아야겠다 싶어서 글로 정리할겸 자세히 알아봤다. 일단 이건 권한 문제가 맞다.에러 로그에서 보이듯이 Sandbox에 file-write-create 가 실패한 것이다. 권한이 없어서.그러면 권한이 왜 막혀있을까?왜 이런 권한이 필요할까? 일단 처음으로 돌아가보자. 나는 Alamof..