IOS/개발일지

개발일지 (5) - ListenApp

hyukji 2023. 4. 2. 17:21

< 지난 포스팅 >

 

2023.02.23 - [개발일지] - 개발일지(4) - ListenApp

 

개발일지(4) - ListenApp

< 지난 포스팅 > 2023.02.03 - [개발일지] - 개발 일지(3) - ListenApp 개발 일지(3) - ListenApp < 지난 포스팅 > 2023.01.27 - [개발일지] - 개발 일지(2) - ListenApp 개발 일지(2) - ListenApp 지난 포스팅 2023. 1. 18 로 부

hyukji.tistory.com

 

 

거의 2달만에 일지를 쓴다ㅎ 

개강하고 나서 할게 많아서 개발 정리를 많이 못했다. 틈틈히 개발을 하긴 했지만 진도가 느려 정리할 필요성을 크게 못느꼈다.

돌아보니 꽤 많은 게 변했다.

 

 

먼저, 지난 일지에서 이런 말을 했었다.

 

 """

AVAudioPlayer의 currentTime을 특정 시점으로 이동시키면 해당 시점부터 재생되는 게 아니라 해당 시점에서 0.04초 정도 앞에서 시작하는 문제가 있었다. 평소에는 큰 문제가 되지 않았지만 구간 반복을 할 때에 문제가 발생했다. 현재 시점이 시작점과 끝지점 사이가 아니라면 시작점으로 돌아가도록 설정을 하였는데, 시작점보다 전에서 시작하니 문제가 발생했다. 코드에 문제가 있다고 생각해 로그도 찍어보고 했지만 이유를 찾지 못했다... 결론은 시작점 판단할 때 0.05초 정도는 여유를 두고 판단하도록 설정해 해결했다. 일단 임시로 돌아가게 설정해둔 것이어서 추후에 해결해야할 점이다!

"""

 

 

여러 검색을 해도 찾지 못했는 데 여러 동작들을 돌려보고 실행해 보면서 돌파구를 찾았다. 바로 AVAudioPlayer가 재생중일때 시간을 바꾼다면 위에서 말한것과 같이 0.04초 정도의 오류가 발행했지만, 일시정지일때 시간이동을 시키다면 오차가 발생하지 않았다. 필자는 처음에 코드상의 오류인 줄 알고 코드의 진행을 따라가며 천천히 복기했지만 찾을 수 없었고 필자의 추측으로는 플레이어 자체에서 재생일 경우 조금의 오차가 생기는 것 같았다.

 

필자는 원래 player의 state를 enum으로 두고 pause, play, stop 세 가지로 구분하여 관리를 하고 있었다. 하지만 재생 중에 시간이동이 필요하면 일시정지 -> 시간이동 -> 재생 이러한 과정이 필요하기에 여기에 intermit을 추가시켰다. 따라서 play중에 시간 이동이 필요하면 state를 Intermit으로 바꿔주고 시간이동을 하도록 코드를 수정시켰다. 따라서 시간이동 뒤에 player의 상태가 pause면 상태를 유지하고 intermit이면 이를 play로 바꾸도록 코드를 작성했다. 수정 이후 0.04초 가량의 오차가 사라졌고 정상적으로 작동함을 확인할 수 있었다.

 

 

 

그 외에도 잔 버그를 좀 수정했다. 

잔 버그 중 하나는 섹션을 넘어갈때 버벅거리는 부분이었다. 사용함에 문제가 있거나 하지는 않았지만 약간 신경쓰이는 정도였다. 이런 버벅거림들을 막고자 파동 이미지들을 deque형태로 저장도 하고 신경도 썻는데 약간 허탈했다ㅎ 문제 해결을 위해 열심히 코드를 살펴보고 여러군데에서 print도 해보니 CoreData에 정보를 업데이트 하는 것과 관련이 있었다. 사용자에게 오디오를 재생시킬 때 이전에 들었던 위치를 제공하기 위해 섹션이 변할 때마다 해당 시간좌표를 coredata에 저장을 했었다. 그 과정에서 약간의 시간이 지연됐고 그로 인해 버벅거림이 생겼었다. 관련해서 구글링을 하면서 coredata 관리하는 거에 더 찾아볼 수 있었고 필자가 작성한 코드는 coredata를 관리할 때 Main thread를 사용하고 있었다. 그렇기에 main thread에서만 돌아가는 uikit이 돌아가지 못했고 이는 버벅거림으로 이어졌었다. 따라서 해당 작업시에는 다른 쓰레드를 사용도록 코드를 고쳤고 버벅거림 문제를 해결할 수 있었다.

 

 

 

그동안 sfsymbol 아이콘을 그대로 가져와 사용을 했는데 필요에 따라 아이콘을 변경하는 법을 찾았다. vector 편집기에서 편집해서 새로운 아이콘들을 만들어서 추가해 주었다. 원래 아이콘들을 좀 사야하나 생각했었는데 다행이도 기본 아이콘들을 잘 활용해서 필요한 아이콘들을 만들 수 있었다ㅎㅎ 

 

 

 

설정 부분은 저장해야 할 양이 많지 않아 userdefault에 저장했다. 앱을 열 때 userdefault에서 필요한 정보들 예를 들어 언어, 테마, 시작 위치 등을 가져와 저장하고 그에 맞추어 필요한 서비스를 제공하도록 만들었다. 

 

 

아직 테마와 언어 항목은 완성하지 못했다. 물론 후에 다크모드를 위해 .black 보다는 .label 이런식으로 코드를 작성해 바로 설정이 가능하지만, 플레이어 화면에서 다른 색상들과 조화가 맞지 않아 추후로 미루었다. 

 

 

먼저 출시를 하고 후에 계속해서 업데이트를 하고자 한다. 학교 생활을 하면서 개발도 같이 진행하니 시간이 너무 부족해서 먼저 출시하기로 했다.