Skip to content

About

☄️아포피스 iOS 파트 달려~~~~ (앱잼용)

Topics

Resources

Stars

25 stars

Watchers

0 watching

Forks

Latest commit

 

History

183 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

미리 맞이하는 당신의 이른 죽음, 아포피스 Apophis 🥀


  • SOPT 27th Virtual Hackathon : APPJAM - Team Apophis

  • 프로젝트 기간: 2020.12.27 ~ 2021.01.15


☄️ 미리 맞이해보는 당신의 이른 죽음

"죽음이라는 새로운 시각으로 과거의 삶을 바라보고, 회고하며 그를 통해 현재와 미래의 삶을 재구성한다."


"지구 멸망 발표가 난 어느 말도 안되는 날, 아무 번호나 눌러 전화를 하게 된 아포니머스. 그리고 그걸 받은 당신. 다짜고짜 멸망까지의 7일을 함께 보내달라고 하더니, 심지어 이 7일 동안 짐을 싸서 당신에게로 가는 여행길에 오른다고 하는데."


KakaoTalk_Photo_2021-01-05-21-48-55



슬라이드1

Apophis_workflow dㅏ포아포

🧑🏻‍💻참여 인원 👩🏻‍💻

이름 파트 역할 레포
송지훈 OB/iOS 채팅, 홈, 2일차 레포 이동하기
최영재 OB/iOS 1일차, 7일차 레포 이동하기
안유경 OB/iOS 3일차, 6일차 레포 이동하기

Foldering

슬라이드4


Convention

슬라이드5

슬라이드6
슬라이드7

Github Commit Convention

슬라이드8

[Add] 기능추가
[Delete] 삭제
[Update] 기능수정
[Fix] 버그수정
[Docs] 문서정리
[Chore] 잡일


사용한 라이브러리

  • ☑️Alamofire :
    • HTTP 통신을 위해 사용
  • ☑️SwiftyJSON
    • JSON 객체를 파싱하기 위해 사용
  • ☑️Kingfisher
    • 이미지를 캐싱하기 위해 사용
  • ☑️lottie
    • 스플래시 및 애니메이션 재생시 사용

뉴스 진행중 (온보딩)

뉴스진행중

전화받기 (온보딩)

통화

홈

홈온보딩

홈

타이머

타이머

채팅 플로우

배경 재생

시계재생

일차별로 수많은 기능들과 다양한 형태의 메세지가 제공이 됩니다! 이후 릴리즈를 기대해주세요 ^_^


기능 구현목록

📝로그인

분류 기능 구현 비고 담당자
소셜 로그인 로그인 후 서버에서 token 값 받아오기 ✅ 유경

📚홈 및 온보딩

분류 기능 구현 비고 담당자
온보딩 뉴스 라이브 ✅ 지훈
온보딩 통화 ✅ 지훈
홈 편지 보기 ✅ 지훈
홈 익명의 지구인에게 보내기 ✅ 지훈
홈 버킷리스트 ✅ 지훈
홈 아포피스 디데이 타이머 ✅ 지훈
홈 설정 뷰 ✅ 지훈

1️⃣ 일차

분류 기능 구현 비고 담당자
1일차 1일차 채팅 플로우 진행 ✅ 영재
1일차 아포니머스 메세지 GET 통신 받아오기 ✅ 영재
1일차 나의 메세지 GET 통신 받아오기 ✅ 영재
1일차 나침반 기능 ✅ 영재
1일차 백그라운드 이미지 애니메이션 ✅ 영재
1일차 사진 촬영 ✅ 영재
1일차 형용사 선택지 ✅ 영재
1일차 사진 메세지 만들기 ✅ 영재
1일차 진동 메세지 만들기 ✅ 영재

2️⃣ 일차

분류 기능 구현 비고 담당자
2일차 2일차 채팅 플로우 진행 ✅ 지훈
2일차 아포니머스 메세지 GET 통신 받아오기 ✅ 지훈
2일차 나의 메세지 GET 통신 받아오기 ✅ 지훈
2일차 가치관 선택지 ✅ 지훈
2일차 배경화면 애니메이션 처리 ✅ 지훈
2일차 시계 애니메이션 ✅ 지훈
2일차 나의 장단점 ✅ 지훈

3️⃣ 일차

분류 기능 구현 비고 담당자
3일차 3일차 채팅 플로우 진행 ✅ 유경
3일차 아포니머스 메세지 GET 통신 받아오기 ✅ 유경
3일차 나의 메세지 GET 통신 받아오기 ✅ 유경
3일차 그림판 그리기 ✅ 유경
3일차 단답형 선택지 만들기 ✅ 유경
3일차 컬러 피커 만들기 ✅ 유경

6️⃣ 일차

분류 기능 구현 비고 담당자
3일차 6일차 채팅 플로우 진행 ✅ 유경
3일차 아포니머스 메세지 GET 통신 받아오기 ✅ 유경
3일차 나의 메세지 GET 통신 받아오기 ✅ 유경
3일차 얼룩 지우기 애니메이션 ✅ 유경
3일차 진동 및 소리 메세지 만들기 ✅ 유경
3일차 서술형 메세지 만들기 ✅ 유경

7️⃣ 일차

분류 기능 구현 비고 담당자
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))
            }
        }

다양한 타입의 메세지들

  • 여러가지 단어 서술하기 스크린샷 2021-01-15 오후 8 44 33

  • 액션 버튼 스크린샷 2021-01-15 오후 8 45 02

  • 애니메이션 배경 + 텍스트 스크린샷 2021-01-15 오후 8 45 24

  • 유저 장문형 텍스트 스크린샷 2021-01-15 오후 8 45 36

  • 다중 선택지 스크린샷 2021-01-15 오후 8 44 14

등등 일차별로 다양한 형태의 메세지가 진행이 됩니다.

다양한 타입의 메세지들

스크린샷 2021-01-15 오후 8 50 51

채팅창에서 계속 진행될 메시지의 데이터형입니다.

다양한 선택지를 모두 고려를 해야 하기 때문에 다음과 같이 설계를 했습니다.

Xcode 기능을 활용한 문서화

스크린샷 2021-01-15 오후 8 52 53

스크린샷 2021-01-15 오후 8 52 26

스크린샷 2021-01-15 오후 8 53 58

Xcode의 문서화 기능을 활용해 같은 프로젝트를 사용하는 입장에서 해당 함수나 구조를 쉽게 이해 할 수 있도록 설명을 첨가하였습니다.


Extension

Extension 폴더에는 각종 클래스에서 필요한 기능들을 확장한 파일들을 저장합니다.

Inspectable

-placeHolderColor + UITextField : TextField 의 placeholder 색을 스토리보드 상에서 inspector 로 조정하기 위해 사용합니다.

Designable

- makeCircle + Designable : UIView,UIImageView,UIButton를 스토리보드 상에서 둥글게 만들기 위해 사용합니다

Function

! 함수의 경우 (함수 이름 + 확장하는 클래스 이름.swift) 형태로 파일을 구분합니다.)

- ColorList : @nonobjc class var color 형태로 색 리스트를 저장합니다
- makeAlert + UIView : UIAlertController,UIAlertAction을 쉽게 사용합니다
- gmarketFont + UIFont : 메인 폰트를 쉽게 활용 할 수 있도록 UIFont를 확장합니다.
- numberOfLines + UITextView : 현재 TextView의 줄 갯수를 확인합니다
- scrollToBottom + UITableView: 가장 마지막으로 테이블을 스크롤합니다
- setImage + UIImageView : Kingfisher를 활용해 이미지를 생성합니다

Kanban Board

스크린샷 2021-01-15 오후 8 30 24

Notion의 보드를 활용해 Status를 구분시켜 칸반보드를 분리해 업무 진행도를 파악하고 있습니다.

스크린샷 2021-01-15 오후 8 31 13

매일 마다 진행한 상황들을 일일 투두 리스트에 기록해
각자 고민하고 있는 이슈나 진행상황을 간단하게 기록합니다.
스크린샷 2021-01-15 오후 8 31 51

About

☄️아포피스 iOS 파트 달려~~~~ (앱잼용)

Topics

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages