문제 상황Rx 바인딩도 정상적으로 되어 있고, 버튼 액션도 설정했지만, 버튼을 눌러도 로그가 찍히지 않고 이미지도 변경되지 않음.특히 setChecked(_: Bool)이나 @objc 메서드들이 호출되지 않는 상태.원인 분석해당 체크박스가 포함된 InfoRowView는 WorkingConditionsContainerViewController의 view에 존재함.하지만 최종 부모 컨트롤러에서 해당 VC를 자식 뷰컨트롤러로 등록하지 않고 view만 addSubview() 하여 붙였음.이로 인해 viewDidLoad()가 호출되지 않았고, 내부에서 설정된 Rx 바인딩 및 addTarget 등의 액션 로직이 실행되지 않음.해결 방법WorkingConditionsContainerViewController를 자식 ..
이 글은 UIKit 기반 앱에서 Apple 로그인을 구현하는 전 과정을 다룹니다.RxSwift, MVVM, 클린 아키텍처, 서버 연동을 기준으로 작성되었습니다.1. Apple Developer 계정 로그인https://developer.apple.com/account 로그인 - Apple idmsa.apple.com 2. App ID 생성 (식별자)좌측 메뉴 → Certificates, IDs & Profiles → Identifiers+ 버튼 클릭 → App IDs → App 선택Description: 앱 이름 입력Bundle ID: Xcode에서 사용하는 것과 정확히 일치하도록 입력 (예: com.example.app)Capabilities에서 Sign In with Apple 체크Continue →..
문제 상황 UIStackView 내부에 WorkplaceContainerView, PayContainerView를 배치했음에도 불구하고, 두 뷰가 겹쳐서 출력되는 현상이 발생내부 요소들이 정상적으로 구성되었음에도 StackView가 자식 뷰의 높이를 인식하지 못해 UI가 깨짐원인 분석UIStackView는 자식 뷰의 명시적인 높이 제약 또는 intrinsic content size가 없는 경우, 뷰의 높이를 0으로 인식함WorkplaceContainerView와 PayContainerView 모두 내부에 UI를 배치한 container 뷰만 있고, 해당 뷰의 하단 요소를 기준으로 전체 높이를 계산하는 제약이 빠져있었음distribution을 .equalSpacing으로 설정한 것도 자식 뷰 간의 간격 계..
문제 상황UILabel에서 "근무지 *"와 같이 특정 문자를 강조하려 했으나 에 적용한 색상이 반영되지 않음NSMutableAttributedString을 사용했음에도 불구하고 문자가 회색(gray900)으로 표시되어 의도한 빨간색(accent)이 보이지 않는 문제 발생원인 분석NSMutableAttributedString은 속성을 덮어쓰기 방식으로 적용됨전체 문자열에 .foregroundColor = gray900를 마지막에 적용하면서,앞서 설정한 *에 대한 빨간색 설정이 덮어써져 무효화됨해결방안기본 스타일(전체 폰트 및 색상)은 먼저 설정하고특정 부분 강조()는 가장 마지막에 스타일을 적용하도록 순서 조정private let workplaceTitle = UILabel().then { let f..
Coordinator 패턴이란?코디네이터(Coordinator) 패턴은 iOS 앱에서 ViewController의 "화면 전환" 책임을 분리하여, 별도의 객체인 코디네이터가 화면 흐름과 네비게이션을 관리하도록 하는 디자인 패턴이다.이 패턴의 핵심 목적은 ViewController의 역할을 단순화하고, 화면 간 전환에 따른 결합도를 낮추는 것이 목적이다.왜 코디네이터 패턴이 필요할까?Coordinator 객체는 화면 전환(네비게이션)과 관련된 모든 로직을 담당하게 되는데 ViewController는 더 이상 다른 ViewController를 직접 생성하거나, 네비게이션을 직접 수행하지 않는다.ViewController는 단지 자신의 코디네이터에게 "다음 화면으로 이동해달라"고 요청만 할 뿐이다. Coord..