xcode

    iOS 에서 Void Observable 테스트 코드 작성하기

    RxSwift 에서 다음 이벤트로 값을 전달할 필요가 없는 경우에는 Void Observable 를 사용합니다. 그리고 테스트 코드를 작성하기 위해서는 RxTest 에 있는 TestScheduler 를 이용하여 가상 시간의 이벤트들을 방출하는 옵저버블을 만들고, XCTAssertEqual 을 통해 events 를 비교하게 됩니다. Bool Observable 은 문제 없이 테스트 가능하지만 여기서 Void Observable 에서 문제점이 발생하게 됩니다. .next 로 들어가는 요소는 Equatable 을 준수해야 하기 때문입니다. RxSwift 저장소에서 해당 문제가 논의되며 PR이 올라왔었지만, 현재는 메인 저장소에 반영되지 않았습니다. 이를 해결하는 방식은 크게 2가지가 있습니다. 1. 별도의 테..

    iOS 에서 Call Stack 으로 버그 해결하기

    Xcode 는 프로그램이 실행되는 동안 "Call Stack" 이라고 하는 데이터 구조에 수행중인 정보를 저장합니다. 이는 개발자가 어떤 코드에서 메서드가 호출되고 해당 동작이 다른 부분과 어떻게 상호작용하는지 파악할 수 있도록 도와줍니다. 이번 예시에서는 RxSwift 에서 synchronizationError 를 해결해보겠습니다. * 꼭 런타임 에러가 아니더라도 특정 코드 라인에 Break Point 를 걸면 Call Stack 를 활용할 수 있습니다. 위는 구독 클로저에서 바로 값을 방출하므로 재진입 에러가 발생하게 됩니다. 이런 런타임 에러 상황 혹은 Break Point 걸린 부분에서 Call Stack 을 확인하면 어떤 메서드가 순서대로 호출되었는지 파악할 수 있습니다. 차례대로 Threads..

    iOS StoryBoard vs Code Base 간단 정리

    storyboard 장점 결과물을 예측하기 쉬움 속성을 쉽게 확인가능 소스코드를 일일히 파악하지 않아도 UI 확인 가능 단점 무겁다 ( 스토리 보드 분리로 해결 가능 ) 링크가 끊어졌을 때 파악하기 힘들다 ( IBOutlet, IBAction ) 협업 문제 ( Diff 로 알기 힘들고, Conflict 나면 해결 어려움 ) Code Base 장점 가볍다 ( 코드만 나와 있으므로 ) Diff 만 보고 파악하기 쉽다 Conflict 발생 가능성이 낮아진다 단점 해당 컴포넌트를 숙지하고 있어야 한다. 어떤 화면이 만들어질지 파악하기 힘들다. 코드가 상당히 길어진다 code base 기반 작성법 Auto Layout 사용 / Auotoresizing 은 더 이상 사용 X NSLayoutConstraint 를 일..

    iOS "UITableView Section Header 로드되지 않는 문제" 해결

    위 영상처럼 처음 로드했을 때에는 섹션 헤더가 제대로 보이지만, ( xib 를 사용한 Custom Section Header ) 나중에 해당 섹션만 reload 했을 때 Section Header 가 보이지 않는 문제가 발생했습니다. Stack Overflow 에 나와있는 일반적인 해결 방법은 아래와 같습니다. 1. UITableViewDelegate 프로토콜에서 heightForHeaderInSection 리턴하기. 2. reloadRows 대신 reloadSection 으로 해당 섹션 리로드 하기 제 경우에는 위 두가지 방식으로도 해결되지 않아서 구글링을 하며 더 찾아보았습니다. // UITableView Delegate func tableView(_ tableView: UITableView, vie..