해당 프로젝트는 데일리샷의 클론 프로젝트입니다. 데일리샷은 다양한 주류를 모바일에서 쉽게 주문할 수 있는 앱입니다.
이 프로젝트는 원본 앱의 주요 기능을 MVVM 패턴과 RxSwift를 사용하여 반응형 프로그래밍 방식으로 구현하였습니다.
기술 스택: iOS, Swift, RxSwift, MVVM, SnapKit, Firebase, Naver Maps
프로젝트 구조
.
├── Config.xcconfig
├── DailyshotClone
│ ├── GoogleService-Info.plist
│ ├── Services
│ │ ├── CartManager.swift
│ │ ├── Extensions.swift
│ │ ├── ImageCacheManager.swift
│ │ ├── UserManager.swift
│ │ ├── WebService.swift
│ │ └── WishListManager.swift
│ ├── Models
│ │ ├── Cart.swift
│ │ ├── DetailDataSource.swift
│ │ ├── HomeDataSource.swift
│ │ ├── Item.swift
│ │ ├── Store.swift
│ │ └── User.swift
│ ├── ViewModels
│ │ ├── CartViewModel.swift
│ │ ├── CategoryItemListViewModel.swift
│ │ ├── CategoryViewModel.swift
│ │ ├── FilterListViewModel.swift
│ │ ├── HomeViewModel.swift
│ │ ├── ItemDetailViewModel.swift
│ │ ├── ItemListViewModel.swift
│ │ ├── SelectStoreViewModel.swift
│ │ ├── SignInViewModel.swift
│ │ ├── SignUpViewModel.swift
│ │ └── WishListViewModel.swift
│ ├── ViewControllers
│ │ ├── CartViewController.swift
│ │ ├── CategoryItemListViewController.swift
│ │ ├── CategoryViewController.swift
│ │ ├── HomeViewController.swift
│ │ ├── ItemDetailViewController.swift
│ │ ├── ItemListViewController.swift
│ │ ├── MainTabBarViewController.swift
│ │ ├── MyPageViewController.swift
│ │ ├── SelectStoreViewcontroller.swift
│ │ ├── SignUpViewController.swift
│ │ ├── SingInViewController.swift
│ │ └── WishListViewController.swift
│ ├── Views
│ │ ├── CustomStepper.swift
│ │ ├── Cart
│ │ │ ├── CartCell.swift
│ │ │ ├── CartFooterView.swift
│ │ │ └── CartHeaderView.swift
│ │ ├── Category
│ │ │ ├── CategoryCell.swift
│ │ │ ├── FilterListCell.swift
│ │ │ ├── FilterListHeaderCell.swift
│ │ │ ├── FilterView.swift
│ │ │ └── SectionBackgroundView.swift
│ │ ├── Detail
│ │ │ ├── ItemDetailDescriptionCell.swift
│ │ │ ├── ItemDetailInformationCell.swift
│ │ │ ├── ItemDetailMainCell.swift
│ │ │ ├── ItemDetailReviewCell.swift
│ │ │ ├── ItemDetailStoreCell.swift
│ │ │ └── ItemDetailTastingNotesCell.swift
│ │ ├── Home+List
│ │ │ ├── BannerCell.swift
│ │ │ ├── BannerImageCell.swift
│ │ │ ├── HomeCellType.swift
│ │ │ ├── HomeItemHeaderCell.swift
│ │ │ ├── ItemListHeaderCell.swift
│ │ │ ├── LargeItemCell.swift
│ │ │ ├── MediumItemCell.swift
│ │ │ ├── MenuButtonCell.swift
│ │ │ ├── MenuCell.swift
│ │ │ ├── SmallItemCell.swift
│ │ │ └── SmallItemImageCell.swift
│ │ └── WishList
│ │ └── WishListCell.swift
│ ├── Predifined
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── Base.lproj
│ │ ├── Info.plist
│ │ └── SceneDelegate.swift
│ ├── Resource
│ │ └── productData.json
├── Podfile
├── Podfile.lock
└── Pods
배너 이미지가 무한히 순환되도록 캐러셀(Carousel) 스타일로 구현하였습니다.
TableViewController의 섹션에 CollectionViewController를 삽입하여 상품을 small, medium, large 세가지 스타일로 표시했습니다.
TableViewController를 사용해 상품, 판매처, 테이스팅 노트, 상세 정보, 설명 등의 정보를 제공합니다.
화면 하단의 버튼을 통해 위시리스트에 추가 또는 삭제, 판매처를 선택하는 화면을 보여줍니다.
사용자는 판매처, 상품, 상품개수를 장바구니에 추가할 수 있습니다.
사용자의 위시리스트에 저장되어 있는 상품ID를 통해 위시리스트를 불러옵니다.
사용자는 원하는 상품을 장바구니에서 삭제할 수 있습니다.
각 상품의 수량을 조절할 수 있습니다. 수량 조절 버튼을 통해 수량을 변경하면 해당 상품의 가격이 자동으로 업데이트됩니다.
사용자가 장바구니에서 선택한 상품들의 가격을 합산하여 총 가격을 계산하고 화면에 표시합니다.