Plot [줄거리] 당신의 만남이 가장 쉽고 빠르게 이루어질 수 있도록, Plot은 당신을 위한 줄거리를 준비합니다.
개발 기간: 2019.12.21 ~ 2020.01.03
iOS : chokyungjin , ujcheon
- 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 | 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 |
초기 홈 화면은 텅빈 더미 데이터로 구성 , 현재 상영작 혹은 개봉 예정작으로 영화 선택과 시간 선택 결정
매칭 이력
-
Issue 1
- Git 을 통한 협업 경험의 부재로 인한 Branch 경험 부족
- Master 에서의 Commit 을 피하고 Develop 브랜치를 하나 더 생성하여 충돌 Handling
-
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]
}
-
조경진
안녕하세요!! Sopt 25기 iOS 파트 조경진입니다! 이번 앱잼으로 더욱 더 실력이 상승하고 디테일한 UX에 대해 고려해보는 시간이었습니다!
-
천유정
안녕하세요! Sopt 25기 iOS 파트 조경진의 노예 천유정입니다! 저는 이번 앱잼을 통해 뷰짜개의 삶을 다하고 코딩의 신으로 거듭날 준비가 되었습니다.
👨💻 Planner
- 신가인
- 김수빈
👩💻 Designer
- 안형민
- 정현강
- 조수민
👨💻 Server
- 이상윤
- 양희연
- 이다현
- 이재용
👩💻 Android
- 황지혜
- 김민진
- 강수빈
- 박길현
👨💻 iOS 💻
- 조경진
- 천유정
Please file issues to send feedback or report a bug. Thank you !