Skip to content

Latest commit

 

History

History
285 lines (201 loc) · 11.9 KB

README.md

File metadata and controls

285 lines (201 loc) · 11.9 KB

🎬 영화관에서의 첫 맛남 , 영화 데이트 매칭 서비스 , Plot 🍿

Plot [줄거리] 당신의 만남이 가장 쉽고 빠르게 이루어질 수 있도록, Plot은 당신을 위한 줄거리를 준비합니다.

언제까지 답장없는 소개팅 앱에 매달릴거야?

준비는 우리가 다 할게. 너는 따라오기만 해 !

10분 만에 대화부터 예매까지 전부 끝나는 영화 데이트 매칭.

스크린샷 2019-10-22 오후 2 37 38

SwiftBadge XcodeBadge iOS

개발 기간: 2019.12.21 ~ 2020.01.03

iOS : chokyungjin , ujcheon


👏 Application Service Work flow

워크플로우


👏 Development Environment and Using Library

  • Alamofire 4.7 [Connection Library]
  • FloatRatingView 4 [Rating Library]
  • Pageboy 3.2 [Top Tabbar]
  • Lottie [JSON Animation IMG]
  • Tabman 2.6 [Top Tabbar]
  • Firebase/Database [FirebaseDatase]
  • Firebase/Auth [FirebaseCRUD]
  • Firebase/Storage [FirebaseDB]
  • Firebase/Analytics [FirebaseDB]
  • Firebase/RemoteConfig [FirebaseDB]
  • SnapKit 5.0.0 [AutoLayout]
  • TextFieldEffects [TextField]
  • ObjectMapper 3.4 [JSON Package]

👏 Function Introduction

Function Implemention Etc , Part Priority
SignIn / SignUp Implementing ujcheon 1
Rating ⭕️ Completed , chokyungjin 2
Tabbar On Top ⭕️ Completed, chokyungjin 1
GradientLayer ⭕️ Completed, chokyungjin 2
MultiInteraction ⭕️ Completed, chokyungjin 1
Firebase_Chatting ⭕️ Completed, chokyungjin 1
Custom PopUp ⭕️ Completed , ujcheon 1
Custom PickerView ⭕️ Completed, chokyungjin 1
RadioButton , Photo Iibrary ⭕️ Completed , ujcheon 1
CustomNavigationBar ⭕️ Completed, chokyungjin 1
Thread Sleep ⭕️ Completed, chokyungjin 1
IBCollection ⭕️ Completed, chokyungjin 1
KeyboardConstraint ⭕️ Completed, chokyungjin 1
SplashLaunScreen ⭕️ Completed, chokyungjin 1
HashTag ⭕️ Canceled , ujcheon 3
MyPageView ⭕️ Completed , ujcheon 2
urlLinkOpen ⭕️ Completed, chokyungjin 2
MatchingSuggestionView ⭕️ Completed, ujcheon 2
ChattingWaitingView ⭕️ Completed, ujcheon 2
PaySystem In App Canceled 3
CustomStepper Canceled 3

👏 Screenshots

초기 로그인, 회원가입



초기 홈 화면은 텅빈 더미 데이터로 구성 , 현재 상영작 혹은 개봉 예정작으로 영화 선택과 시간 선택 결정



매칭 알고리즘을 통한 채팅 파트너 결정



매칭 선택 팝업 , 채팅 뷰



매칭 성공 , 실패 팝업



시간 수정 페이지(Implementing)



매칭 이력

스크린샷 2020-01-03 오후 11 39 34스크린샷 2020-01-03 오후 11 52 10


🎯 Issue and Bug Report

  • Issue 1

    • Git 을 통한 협업 경험의 부재로 인한 Branch 경험 부족
    • Master 에서의 Commit 을 피하고 Develop 브랜치를 하나 더 생성하여 충돌 Handling

    스크린샷 2020-01-03 오후 7 28 17스크린샷 2020-01-03 오후 7 53 25

  • Issue 2

    • 이미지를 캐쉬로 받지않고 사용한 점 , 이미지 리소스를 통신할 때 Cache를 사용하지 않음.
    OperationQueue().addOperation {
                    let thumnailImage = self.getThumnailImage(withURL: movie.thumnailImageURL)
                    DispatchQueue.main.async {
                        cell.imageThumbnail.contentMode = .scaleAspectFill
                        cell.imageThumbnail.image = thumnailImage
                        
                    }
                }
  • Issue 3

    • 유연한 AutoLayout Setting 부족.
    • Scroll view 의 오토레이아웃을 잡는데 view의 height 를 고정해야 하는데 scroll view의 height 를 고정해서 시간이 오래 걸렸었다. view의 height를 고정하고 들어가는 image 에 오토레이아웃을 주니 해결.
  • Issue 4

    • 서버 통신 경험 부족으로 인한 잘못된 데이터 저장 , 이미지 URL 같은 경우에는 KingFisher 라는 라이브러리를 쓰기로 함.
    func getMovieList(completion: @escaping (ListResponse?) -> Void) {
            guard let finalURL = URL(string: appUrl) else {
                return
            }
            let session = URLSession(configuration: .default)
            var request = URLRequest(url: finalURL)
            request.addValue("application/x-www-form-urlencoded" , forHTTPHeaderField: "Content-Type")
            request.httpMethod = "GET"
            let task = session.dataTask(with: request) { (data, response, error) in
                if let error = error {
                    print(error.localizedDescription)
                    return
                }
                guard let resultData = data else {
                    return
                }
                do {
                    let movieLists: ListResponse  = try JSONDecoder().decode(ListResponse.self, from: resultData)
                    self.dataManager.setMovieList(list: movieLists.results.randMovie)
                    self.dataManager.setReserveMovieList(list: movieLists.results.reserveMovie)
                    self.dataManager.setReserveDateList(list: movieLists.results.reserveDate)
                    self.dataManager.setDidOrderTypeChangedAndDownloaded(true)
                    self.reloadMovieLists()
                    completion(movieLists)
                }
                catch let error {
                    print(error.localizedDescription)
                }
            }
            task.resume()
        }
  • Issue 5

    • UIPickerView 2개를 한 뷰에서 쓰는데 하나의 Picker view에서 입력값이(titles.count) 다른 picker view에 옮겨졌던 문제점이 있었고 func pickerView 를 두개로 나눴던 걸 한개로 합치고 delegate를 2개를 만들어서 써서 해결.
extension SignUpSecondVC: ToolbarPickerViewDelegate, ToolbarPickerViewDelegate2 {
    
    func didTapDone() {
        let row = self.pickerView.selectedRow(inComponent: 0)
        self.pickerView.selectRow(row, inComponent: 0, animated: false)
        self.minAgeField.text = self.titles[row]
        self.minAgeField.resignFirstResponder()
    }
    
    func didTapDone2() {
        let row = self.pickerView2.selectedRow(inComponent: 0)
        self.pickerView2.selectRow(row, inComponent: 0, animated: false)
        self.maxAgeField.text = self.titles[row]
        self.maxAgeField.resignFirstResponder()
    }
  
...
  
extension SignUpSecondVC: UIPickerViewDataSource, UIPickerViewDelegate {
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.titles.count
    }
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return self.titles[row]
        
    }

👏 Contributor

  • 조경진

    안녕하세요!! Sopt 25기 iOS 파트 조경진입니다! 이번 앱잼으로 더욱 더 실력이 상승하고 디테일한 UX에 대해 고려해보는 시간이었습니다!

  • 천유정

    안녕하세요! Sopt 25기 iOS 파트 조경진의 노예 천유정입니다! 저는 이번 앱잼을 통해 뷰짜개의 삶을 다하고 코딩의 신으로 거듭날 준비가 되었습니다.


👏 Other Part

👨‍💻 Planner

  • 신가인
  • 김수빈

👩‍💻 Designer

  • 안형민
  • 정현강
  • 조수민

👨‍💻 Server

  • 이상윤
  • 양희연
  • 이다현
  • 이재용

👩‍💻 Android

  • 황지혜
  • 김민진
  • 강수빈
  • 박길현

👨‍💻 iOS 💻

  • 조경진
  • 천유정

👏 Report

Please file issues to send feedback or report a bug. Thank you ! btnSend@3x


👏 References

How to Use Chatting in iOS

ColectionView in TableView

How to Use Lottie