-
SOPT 27th Virtual Hackathon : APPJAM - Team Apophis
-
프로젝트 기간: 2020.12.27 ~ 2021.01.15
"죽음이라는 새로운 시각으로 과거의 삶을 바라보고, 회고하며 그를 통해 현재와 미래의 삶을 재구성한다."
"지구 멸망 발표가 난 어느 말도 안되는 날, 아무 번호나 눌러 전화를 하게 된 아포니머스. 그리고 그걸 받은 당신. 다짜고짜 멸망까지의 7일을 함께 보내달라고 하더니, 심지어 이 7일 동안 짐을 싸서 당신에게로 가는 여행길에 오른다고 하는데."
이름 | 파트 | 역할 | 레포 |
---|---|---|---|
송지훈 | OB/iOS | 채팅, 홈, 2일차 | 레포 이동하기 |
최영재 | OB/iOS | 1일차, 7일차 | 레포 이동하기 |
안유경 | OB/iOS | 3일차, 6일차 | 레포 이동하기 |
[Add] 기능추가
[Delete] 삭제
[Update] 기능수정
[Fix] 버그수정
[Docs] 문서정리
[Chore] 잡일
- ☑️Alamofire :
- HTTP 통신을 위해 사용
- ☑️SwiftyJSON
- JSON 객체를 파싱하기 위해 사용
- ☑️Kingfisher
- 이미지를 캐싱하기 위해 사용
- ☑️lottie
- 스플래시 및 애니메이션 재생시 사용
일차별로 수많은 기능들과 다양한 형태의 메세지가 제공이 됩니다!
이후 릴리즈를 기대해주세요 ^_^
분류 | 기능 | 구현 | 비고 | 담당자 |
---|---|---|---|---|
소셜 로그인 | 로그인 후 서버에서 token 값 받아오기 | ✅ | 유경 |
분류 | 기능 | 구현 | 비고 | 담당자 |
---|---|---|---|---|
온보딩 | 뉴스 라이브 | ✅ | 지훈 | |
온보딩 | 통화 | ✅ | 지훈 | |
홈 | 편지 보기 | ✅ | 지훈 | |
홈 | 익명의 지구인에게 보내기 | ✅ | 지훈 | |
홈 | 버킷리스트 | ✅ | 지훈 | |
홈 | 아포피스 디데이 타이머 | ✅ | 지훈 | |
홈 | 설정 뷰 | ✅ | 지훈 |
분류 | 기능 | 구현 | 비고 | 담당자 |
---|---|---|---|---|
1일차 | 1일차 채팅 플로우 진행 | ✅ | 영재 | |
1일차 | 아포니머스 메세지 GET 통신 받아오기 | ✅ | 영재 | |
1일차 | 나의 메세지 GET 통신 받아오기 | ✅ | 영재 | |
1일차 | 나침반 기능 | ✅ | 영재 | |
1일차 | 백그라운드 이미지 애니메이션 | ✅ | 영재 | |
1일차 | 사진 촬영 | ✅ | 영재 | |
1일차 | 형용사 선택지 | ✅ | 영재 | |
1일차 | 사진 메세지 만들기 | ✅ | 영재 | |
1일차 | 진동 메세지 만들기 | ✅ | 영재 |
분류 | 기능 | 구현 | 비고 | 담당자 |
---|---|---|---|---|
2일차 | 2일차 채팅 플로우 진행 | ✅ | 지훈 | |
2일차 | 아포니머스 메세지 GET 통신 받아오기 | ✅ | 지훈 | |
2일차 | 나의 메세지 GET 통신 받아오기 | ✅ | 지훈 | |
2일차 | 가치관 선택지 | ✅ | 지훈 | |
2일차 | 배경화면 애니메이션 처리 | ✅ | 지훈 | |
2일차 | 시계 애니메이션 | ✅ | 지훈 | |
2일차 | 나의 장단점 | ✅ | 지훈 |
분류 | 기능 | 구현 | 비고 | 담당자 |
---|---|---|---|---|
3일차 | 3일차 채팅 플로우 진행 | ✅ | 유경 | |
3일차 | 아포니머스 메세지 GET 통신 받아오기 | ✅ | 유경 | |
3일차 | 나의 메세지 GET 통신 받아오기 | ✅ | 유경 | |
3일차 | 그림판 그리기 | ✅ | 유경 | |
3일차 | 단답형 선택지 만들기 | ✅ | 유경 | |
3일차 | 컬러 피커 만들기 | ✅ | 유경 |
분류 | 기능 | 구현 | 비고 | 담당자 |
---|---|---|---|---|
3일차 | 6일차 채팅 플로우 진행 | ✅ | 유경 | |
3일차 | 아포니머스 메세지 GET 통신 받아오기 | ✅ | 유경 | |
3일차 | 나의 메세지 GET 통신 받아오기 | ✅ | 유경 | |
3일차 | 얼룩 지우기 애니메이션 | ✅ | 유경 | |
3일차 | 진동 및 소리 메세지 만들기 | ✅ | 유경 | |
3일차 | 서술형 메세지 만들기 | ✅ | 유경 |
분류 | 기능 | 구현 | 비고 | 담당자 |
---|---|---|---|---|
7일차 | 7일차 채팅 플로우 진행 | ✅ | 영재 | |
7일차 | 아포니머스 메세지 GET 통신 받아오기 | ✅ | 영재 | |
7일차 | 나의 메세지 GET 통신 받아오기 | ✅ | 영재 | |
7일차 | 유서 작성하기 | ✅ | 영재 | |
7일차 | 결말 애니메이션 처리(스포 금지) | ✅ | 영재 | |
7일차 | 결말 만들기(스포 금지) | ✅ | 영재 |
이 기능들이 어떻게 동작하는지
궁금하다구요?
어플로 확인하세요 ^^
연락하시면 개인적으로 비공개 테스트가 가능합니다 ^^*
(* 010 - 3공66 - 7이3육 *)
아포피스의 핵심 기능은 각 일차별로 아포니머스와 메세지를 주고 받는 것입니다.
아포피스 - 컨셉 = 0 이기 때문에,
사용자 입장에서 몰입감을 주는 것이 매우 중요한 서비스입니다! 따라서, 전반적인 애니메이션을 완성하고 다듬는 과정이 많았습니다.
애니메이션은 animateKeyframes
를 활용해 각 에셋별로 애니메이션을 다르게 구분해서 처리를 하고 있습니다.
(예시) 아포니머스 메세지 재생 방식 전송중 Lottie 파일 재생 -> 일반 메세지의 alpha 값 올리기 -> 대기 -> 애니메이션 종료 후, 다음 메세지가 차례로 전송되도록 NotificationCenter 를 활용해 신호 전송
UIView.animateKeyframes(withDuration: 4, delay: 0, options: .allowUserInteraction) {
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 1/12,animations: {
self.waitMessageImageView.alpha = 1
})
UIView.addKeyframe(withRelativeStartTime: 10/12, relativeDuration: 1/12, animations: {
self.waitMessageImageView.alpha = 0
})
UIView.addKeyframe(withRelativeStartTime: 11/12, relativeDuration: 1/12, animations: {
self.messageTextView.alpha = 1
self.messageBackgroundImageView.alpha = 1
self.check = true
})
} completion: { (_) in
self.loadingView.stop()
// 애니메이션이 끝날 때 post를 해주는데, 그 때 object에 index값을 넣어서 쏜다.
// 여기서 index는 loadingAnimate를 호출할 때 받아온다.
NotificationCenter.default.post(name: NSNotification.Name("AponimousMessageEnd"), object: index)
if self.check && vibrate {
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
}
}
등등 일차별로 다양한 형태의 메세지가 진행이 됩니다.
채팅창에서 계속 진행될 메시지의 데이터형입니다.
다양한 선택지를 모두 고려를 해야 하기 때문에 다음과 같이 설계를 했습니다.
Xcode의 문서화 기능을 활용해 같은 프로젝트를 사용하는 입장에서 해당 함수나 구조를 쉽게 이해 할 수 있도록 설명을 첨가하였습니다.
Extension 폴더에는 각종 클래스에서 필요한 기능들을 확장한 파일들을 저장합니다.
-placeHolderColor + UITextField : TextField 의 placeholder 색을 스토리보드 상에서 inspector 로 조정하기 위해 사용합니다.
- makeCircle + Designable : UIView,UIImageView,UIButton를 스토리보드 상에서 둥글게 만들기 위해 사용합니다
! 함수의 경우 (함수 이름 + 확장하는 클래스 이름.swift) 형태로 파일을 구분합니다.)
- ColorList : @nonobjc class var color 형태로 색 리스트를 저장합니다
- makeAlert + UIView : UIAlertController,UIAlertAction을 쉽게 사용합니다
- gmarketFont + UIFont : 메인 폰트를 쉽게 활용 할 수 있도록 UIFont를 확장합니다.
- numberOfLines + UITextView : 현재 TextView의 줄 갯수를 확인합니다
- scrollToBottom + UITableView: 가장 마지막으로 테이블을 스크롤합니다
- setImage + UIImageView : Kingfisher를 활용해 이미지를 생성합니다
매일 마다 진행한 상황들을 일일 투두 리스트에 기록해
각자 고민하고 있는 이슈나 진행상황을 간단하게 기록합니다.