---
# System prepended metadata

title: 멘토링 2021.11.10

---

# 멘토링 2021.11.10 
## focusViewController 보여주는 방식
  - modal presentation style??
  - transition
  - 도큐먼트를 확인해야 하자
    - [도큐먼트](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle)

## AVKit 
- avplayer error 속성 고려 필요
  - iphone 미디어 초기화(Media Reset)
- SandBox(OS에서 중앙통제, 노티만 주는 방식)
  - 집중앱을 틀고있는데 아이폰 알람이 울리거나 다른 앱에서 음악을 틀때 interruption이 옴. 이때 음악이 강제로 끊어짐. SystemNotification이 있음.
- 예외사항 고려 필요 ( 오디오는 특히 테스트 필요: 마지막 주차에 해야할 일 )

### 계속 status를 추적해야할까요?
- Player control status를 observing 해야 함. System에서 제공하는 observe가 존재 함.
- AVAuidioPlayer에서는 pause, play, wating - spec에 따라 stop/finish가 추가될 수도있는데 그런건 나중에 변수를 추가하여 고려해야할듯

## UI
- lazy var
  - 많이 쓰는 것에 대해 단점은 없다
  - 하지만 필수 요소에서는 그래도 let으로 선언하는게 좋지않을까

## Git Fetch
- 사람마다 다름

## CI이나 Git Action을 이용
- PR에 대한 빌드 성공 여부를 체크

## 일정 산정을 어떻게 해야할까요?
- 서드 파티(pod)을 사용하면 빌드 시간이 오래걸림. 그나마 carthago가 컴파일이 미리된 상태라 속도가 나음. 이런 경우 눈으로 확인해야하는 애니매이션은 체크할 때마다 빌드해야하기 때문에 매우 오래걸림. (현업 기준 설명)
- 경험이 쌓이면 학습 시간 같은 경우 같은 변수도 추가해서 일정 산정을 한다.

## 테스트는 어떻게할까요?
- 가급적이면 실기기에서 테스트
- 오디오 - QA팀 쪽에서 이런저런 상황에서 테스트해보면 좋은데 시나리오를 잘 만들어서 테스트를 해보도록 하자.
- UI - 다양한 기기에서 테스트해보기.
- Control Center(화면 닫았을 때 메뉴) 등의 여러 기능은 실 기기에서 해보기 힘들다.

## Animation
- Emitter/Particle
- 찌그러지는 것은 Lottie로 했을 수도 있음

## 추가 구현 사항
- Audio Engine 으로 애니매이션 처리 할 수 도 있음
- Audio Engine 으로 EQ를 조절할 수 있음
- Bpm 조절도 가능은 하겠지만 매우 고난이도로 보임.
  - 단순한 재생 속도 조절은 된다 


## 리뷰 단위
- 테스트 가능한 단위
- 어쨋든 작게 쪼개야...

## 깃 리뷰 
- 해당 PR 브랜치를 내려 받아서 테스트까지 하는 것을 권장
- 다른 협업 fork 레포들을 origin 으로 추가하여 받을 수 있음.
- PR은 한 줄로 설명 가능하도록 나누어져야한다.

## 주의
- PR, Commit등등 여러 컨벤션은 솔직히 정답도 없고 가이드도 없다. 그냥 알아서해도 된다.
- 본인이 정답이다라는 오만함은 최악의 선택. 정답이 없다라는 멘탈이 가장 중요.

## 현재 레포 디자인은 현재 상태로도 충분히 괜찮다.
Audio Unit, Audio Toolbox, Media Toolbox, PCM raw data 손질,  ... -> 많은 회사에서는 쓰지는 않음.
Audio Session 만져보는 정도까지는 많이 함.

## 뷰컨이 많으면 생기는 문제
- 뷰컨은 4개정도 되도된다. 뷰컨이 많아지면 생기는 문제는 cost가 늘어난다. 만약에 ViewController를 하나만 두면 오히려 Massive한 ViewController를 나눠주면된다.
- 상속을해서 override하는 방식으로 진행해도 될까? 근데 보기 귀찮다는 단점도 있다.
- 대신 개인적으로 뷰만 갈아끼는 방식은 좀 커질 것 같다는 생각이 든다.
- 나중엔 아카이빙해서 앱의 설치사이즈를 측정해봐도되고, 메모리 그래프도 찾아보자.
- 메모리 그래프 확인 필요, "Memory Leak 확인"(필수!!!!!!!!!), Audio Memory를 확 잡아먹는 문제는 반드시 확인
  - 써드파티

- 앱 스토어에 앱의 용량을 확인 할 수 있음. 앱의 용량이 너무 많은 것은 좋지 않음. (Asset 등)

## 메모리 사용량 이슈
- 현재 비디오, 음원 램 사용량은 문제될 수준이 아님. 백 그라운드에서는 높은 메모리 사용량 문제로 운영체제가 앱을 죽일 수 있지만, 현재 앱은 foreground에서 비디오/음원을 사용하기 때문에 고려할 문제가 아님~!
: 메모리 워닝이 뜨지 않으면 괜찮음.

- 관련하여 리팩토링(비디오 메모리 최적화) 추가 구현 사항 정도로 설정 가능.
- AVPlayer/AVAudioPlayer를 사용할 경우 메모리 최적화가 필요 없음. AVAudioPlayer를 사용할 때 file url 형태면 AVplayer가 알아서 잘라서 메모리에 로드.

# 반복 재생될 때 멈칫하는 문제
- "AVQueuePlayer items"을 두개로 밀어넣을 수 있음.
- 무한 스크롤 방법 형태로 구현 가능하지 않을까?
- 로티, apng?를 사용하여 반복재생
- reverse 반복재생
![](https://i.imgur.com/kvFjcRl.gif)


