[25.06.24] MOUP 트러블슈팅 - Listener와 Rx의 timeout
·
iOS/Swift
1. 문제 상황홈 내 테이블뷰에 들어갈 데이터를 불러오는 과정에서 combineLatest를 호출한다.extension HomeViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { guard let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: HomeHeaderView.identifier) as? HomeHeaderView else { return UIView() } Observable...
[TIL / 25.05.27] 날씨 앱 main 페이지 구조 트러블슈팅
·
iOS/Swift
1. 문제 상황현재 기획 상 위 아래로 한페이지씩 pageable하게 구현함. mainPageViewController(UIPageViewController) 하위 뷰컨트롤러들에 위 아랫 UIViewController를 연결해둠.근데 첫번째 페이지에서 화면을 아래로 잡아끌면 새로고침이 되어야함. PTR(Pull To Refresh)가 필요한데,, 문제의 현 구조. 대충 구조만 보고 넘겨주세요class MainPageViewController: UIPageViewController { private let disposeBag = DisposeBag() private let viewModel: PageViewModel private let mainViewModel: MainViewModel ..
[TIL / 25.05.18] 의존성 주입 담당 DIContainer를 처음 적용해보았습니다
·
iOS/Swift
DIContainer란?앱의 각 객체들이 어떻게 구성되고 주입될지 정의해주는 중앙 조립소.UseCase, Repository, ViewModel, ViewController와 같은 컴포넌트들을 하나의 컨테이너에서 만들어주기 때문에, 객체 간의 생성 책임을 분리하고 코드 가독성을 높이는 데 도움이 된다. - 객체 간 생성 책임 분리란?누가 누구를 만들지 결정하는 책임을 명확히 나누는 것임. class MainViewController: UIViewController { private let viewModel = MainViewModel( searchUseCase: SearchBooksUseCase( repository: BookRepository(networkServi..
[TIL / 25.05.13] BookSearchApp Lv 3 트러블슈팅 - Core Data 크래시
·
iOS/Swift
시간이 많이 없어 주 정보원은 GPT와의 스무고개뿐이라, 이중 검증이 아직 덜 된 부분이 많구요..!제가 생각하기에 확실하지는 않지만 "이게 맞는 것 같다"싶은 부분들로 글을 쓰겠습니다. 1. Persistent Store 초기화 전 Entity(context:) 사용 시 크래시 발생An NSManagedObject of class ‘BookEntity’ must have a valid NSEntityDescription.이 메시지와 함께 crash가 났는데담기 버튼을 누르면 코어 데이터에 CartBookEntity를 저장하는 로직을 실행하도록 하는 과정에서 문제가 생겼다.관련 코드를 보며 아직 코어 데이터 생태계에 아무것도 몰라서 찾아봐도 무슨 말인지 모르겠고 gpt랑 스무고개를 진행했다. "persi..
[TIL / 25.05.12] BookSearchApp 트러블슈팅 - 일부 배경색이 투명한 현상
·
iOS/Swift
문제 상황 및 도출요구 사항 맞춰서 16 pro 시뮬레이터 기준으로 작업 중이었고 분명 이 기기에선 제대로 떴는데이렇게 오늘 작업이 끝나는구나..인줄 알았습니다.웬 걸? 16.0버전 SE 2세대를 기준으로 돌리니 상단 서치바 영역이 까맣게 아무것도 안뜨는 현상이 발생했습니다. 자 문제 파악을 위해 각 시뮬레이터 두 환경에서 뷰 디버거를 키면 어떻게 보일지 봤는데 아니 글쎄 뒷 배경 UITabBar에 iOS 18 버전 시뮬레이터에선 배경 색이 자동으로 있는채로 렌더링되고, 16버전에선 그냥 clear하더라구요.. 이게 과연 os 버전 차이로 인한 게 맞는지 좀 더 검증해보기로 합니다. 제 폰이 13 프로라서 일단 13 시리즈를 기준으로 잡아봤읍니다.좌측은 13 프론데 iOS 16.0을, 우측은 13 미..
[TIL / 25.05.08] RxSwift.. 처음 공부해볼게요 1
·
iOS/Swift
RxSwift란?RxSwift는 Swift에서 비동기 이벤트를 선언형으로 처리할 수 있게 해주는 프레임워크.쉽게 말해, 값의 변화와 비동기 흐름을 스트림처럼 다룰 수 있게 해준다. RxSwift Github에선 Reactive Programming in Swift라고 나와 있는데,, 그게 뭐신디요; 반응형 프로그래밍 (Reactive Programming) 반응형 프로그래밍이란, 데이터의 흐름 및 변경사항을 전파하는 데 중점을 둔 프로그래밍 패러다임.이 패러다임을 사용할 경우, 주변 환경 / 데이터에 변화가 생길 때 연결된 실행 모델들이 이 이벤트를 받아 동작하도록 설계하는 방식 a = 10, b = 20이고, c = a + b일 때 c는 30이 될테고 그 뒤에 a를 20을 하던 100000을 하던 c..
[TIL / 25.04.17] URLSession으로.. 네트워크 통신을 어떻게 하는지.. 보여줄래요
·
iOS/Swift
URLSessionAn object that coordinates a group of related, network data transfer tasks.네트워크 데이터 전송 작업과 관련된 그룹을 조정하는 객체. 라고 공식문서에 나와있듯이 이제 API를 통해 데이터를 주고 받으려면 서버와 통신할 수 있어야 합니다. 이를 가능토록 하는 게 URLSession이라고 할 수 있습니다 ! 이 URLSession을 통해서 어떻게 앱과 데이터를 주고받는지에 대한 방식은 일단 두가지. 비교적 전에 쓰던 Completion Handler 패턴, 그리고 이보다 최근에 나온 Swift Concurrency를 이용한 방식이 있는데... 일단 이것들을 다루기 전에 이 안에선 어떻게 해야 URLSession을 가지고 데이터들을 ..
[TIL / 25.04.16] Lv3 서치바 관련 트러블슈팅 기록
·
iOS/Swift
기존엔 navigationBar.searchController = searchController하는 식으로 직접 넣어서 했는데검색 시 아무리 설정해줘도 상단 라지타이틀이 보여야하는데 올라가는 점이 맘에 들지 않았다. 그럼.. navigationBar 내부 설정에 searchController와 관련된 일정한 동작이 이미 구현되어있다면..!?SearchController를 navigationBar 밖으로 빼서 고정하게 된다면 largeTitle에 문제가 없지 않을까!import UIKitclass MainViewController: UIViewController { private let mainView = MainView() private let viewModel = MainViewModel(..
[TIL / 25.04.11] UICollectionView Compositional Layout 1
·
iOS/Swift
기존 UICollectionView를 씀에 있어서 보통 레이아웃 잡을땐 FlowLayout을 주로 써왔고 Compositional Layout의 존재는 솔직히 몰랐는데 이번 플젝을 진행하면서 암것도 모르고 컬렉션뷰 세개를 붙히려 하던 내역이 담긴 PR을 보던 유스승님과 이스승님께서 가르침을 주셨다.  FlowLayout으로 여러개 말고 Compositional Layout을 써보는게 어떨까요? (그걸 들은 나... 그게 뭐예요..?)이번 플젝에선 키오스크 앱이 컨셉이라 첫번째 섹션과 두번째 섹션은 수평, 세번째 섹션은 수직으로 축을 가집니다또 세 섹션 모두 셀의 레이아웃이 많이 다르다. 1행의 형태를 가지는 첫번째 섹션 그리고 2행의 형태를 가지는 두번째 섹션, 1열의 형태를 가지는 세번째 섹션. 각자 ..
[TIL / 25.03.31] 앨범에서 사진 고르고 잘라서 쓸 수 있도록! (feat. PHPickerViewController, TOCropViewController)
·
iOS/Swift
1. 오늘 진행한 부분프로필 수정에 있어서 프로필 이미지 수정 부분을 건드리도록 했다. 우선 모하지 블로그에서 프로필 이미지는 1:1 비율을 가져가도록 하며, 이를 스토리지에 잠시 올리도록 api 요청 후에 UUID를 받아 업데이트할 타 정보들과 함께 프로필 수정 요청을 보내도록 한다. 그럼 로직이 사진을 선택 후 바로 UUID를 받아오도록 요청하기엔 다시 다른 사진으로 바꿀 수도 있고 그렇게 되면 너무 낭비가 되어 프로필 수정 버튼을 탭하면 프로필 이미지 업데이트 여부를 확인 후 새 이미지를 미디어 파일 업로드 api를 통해 UUID를 받아내 수정 api에 body로 함께 실어보내는 로직이 되겠다. 오늘은 조금 집중이 안됐어서 라이브러리 선택 후 기초 구현까지만 했다. 일단 PHPickerViewCon..