네이버 쇼핑 검색 API를 활용하여 상품을 검색하고 찜할 수 있는 앱
-
기간 :
2024.06.14 ~ 2024.06.30
(약 2주) -
개발 인원 :
iOS 1명
-
기술 스택 및 라이브러리 :
UIKit
Webkit
SnapKit
Then
Toast-Swift
Kingfisher
Realm
Alamofire
-
프로젝트 주요 기능
상품 검색
- 최근 검색어 조회/삭제 기능
- 상품 검색 결과 조회/정렬 기능
- 상품 상세 정보 조회 기능
Apple 브랜드관
- Apple 제품 콜렉션 조회 기능
상품 찜하기
- 상품 찜 버튼 기능
- 찜한 목록 조회/삭제/정렬 기능
상품 검색 | Apple 브랜드관 | 상품 찜하기 |
---|---|---|
![]() |
![]() |
![]() |
-
UserDefaults
와JSONEncoder/Decoder
를 활용하여최근 검색어 조회 기능
구현 -
Repository 패턴
을 활용하여외부 데이터 소스 접근 작업 추상화
라우터 패턴
과싱글턴 패턴
활용하여네트워크 작업 추상화
-
UICollectionViewDataSourcePrefetching
을 활용하여페이지네이션
기능 구현 -
WKWebView
를 활용하여상품 상세 정보 조회 기능
구현
-
UITableView
와UICollectionView
을 혼합하여수직/수평 스크롤 뷰
구현 -
DispatchGroup
을 사용하여데이터 순서 보장과 TableView의 중복 갱신 방지
-
Repoistory 패턴
을 사용하여로컬 데이터 소스 접근 작업 추상화
-
검색 결과 상품 리스트의
찜 여부 판단 로직
을O(N^2)에서 O(N)
으로 개선
-
특정 CollectionView의
렌더링 누락 현상
- 원인 분석:
cellForRowAt
메서드 호출 시점에 위임되어 렌더링 되지 않은 TableViewCell에서 CollectionView를 렌더링하려고 함 - 해결:
willDisplay
메서드 호출 시점에 위임
- 원인 분석:
-
UITableViewCell 재사용 시
데이터 불일치 문제
- 원인 분석: 재사용 시 이전에 설정한 위임이 해제되지 않아, 기존 셀의 데이터가 남아있어 불일치 문제 발생
- 해결:
prepareForReuse
메서드에서 위임을 해제하여 해결
-
원인 분석
찜한 목록 리스트 화면
에서는viewWillDisappear
메서드 호출 시점에 Realm에서 해당 상품을 삭제검색 결과 화면
에서는viewWillAppear
메서드 호출 시점에 찜 여부 정보를 업데이트viewWillDisappear보다 viewWillAppear가 더 먼저 호출
-
해결
검색 결과 화면
에서 찜 여부 정보 업데이트 시점을viewIsAppearing
메서드 호출 시점으로 변경
-
원인 분석
- WKWebView의
didFailProvisionalNavigation
메서드 내에서 에러 메세지를 확인한 결과 iOS의ATS 정책
과 관련된 것을 확인 - 실제로 특정 링크가 사용중인 프로토콜은
HTTPS가 아닌 HTTP
- WKWebView의
-
해결
Info.plist
에서Allow Arbitrary Loads를 NO로 설정
하여 해결