Skip to content

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

Notifications You must be signed in to change notification settings

Apophis-AppJam/ApophisiOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

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

Watchers

Forks

Releases

No releases published

Packages

No packages published