Skip to content

ujcheon/plot-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

316 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎬 영화관에서의 첫 맛남 , 영화 데이트 매칭 서비스 , 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages