본문 바로가기

ISSUE

(7)
[ISSUE] Lottie Animation 백그라운드 진입 후 멈춤 현상 이번 포스팅은 Lottie 애니메이션 사용시 발생했던 이슈에 대해 포스팅 하려 한다. 필자는 Lottie 애니메이션이 동작하고 있는 뷰를 그리고 있었다. 그리고 작업 마무리 시점에 테스트 도중 애니메이션과 연관된 이슈를 만나게 되었다. 이슈 내용은 백그라운드 진입후 포어그라운드로 재진입시 애니메이션의 동작이 멈춰있는 현상이 발생하고 있었던것이였다. 그리하여 그다지 무겁지 않았던 이번 이슈의 리졸브 경험을 기록하려 한다. 해당 작업은 사내 프로젝트이기 때문에 새로운 프로젝트로 포스팅을 이어나가보겠다. 세팅 작업으로는 Lottie 파일 1개와 AnimationView를 준비했다. 그리고 애니메이션의 play 동작 호출까지 작성을 했다. class ViewController: UIViewController {..
[ISSUE] enumerateAttribute를 사용한 부분적으로 Font 변경 이번 포스팅은 enumerateAttribute라는 메소드를 사용하므로써 NSMutableAttribbutedString에 적용 되어있는 속성을 부분적으로 수정하여 최종적으로 기대한 값과 동일한 Attribute 결과를 도출해내는 과정에 대해 알아보겠다. 예를들어 label에 표현해줄 text 값을 서버에서 내려 받아 설정해준다고 가정을 하겠다. (html 형태의 String 타입의 값) 아래와 같이 내려온다고 가정 했을때 "12 34 56 78" html을 변환하는 기본적인 방법을 사용하여 진행해보겠다. let resultAtt = NSMutableAttributedString() let data = "12 34 56 78".data(using: .utf8) let att = try! NSAttribu..
[ISSUE] LaunchScreen 대체 LaunchScreen이 보여지고 난 후에 rootViewController인 TabBar에서 GoogleAdMob을 사용하여 전면 광고를 띄우는 프로세스가 있었다. 광고를 present 하기 전에 먼저 Google에서 부여 받은 UnitID를 사용하여 광고 load를 먼저 했었는데 가끔 가다 load하는 시간이 길어지는 상황이 발행해서 한참 있다가 전면광고가 present 되버리는 issue가 발생했다. 광고 load 시점은 앱이 실행되자 마자 appDelegate의 didFinishLaunchingWithOptions 메소드 내부에서 하단 코드와 같이 맨 처음 load가 진행 되게끔 작성해놨었다. func application(_ application: UIApplication, didFinishLa..
[ISSUE] 저전력 모드 화면 꺼짐 방지 현재 프로젝트에서 3분에서 5분 사이의 Audio 파일이 재생되는 ViewController가 있었다. 그리고 그 VC는 Audio의 재생이 끝날때까지 특정 animation을 동작하는 프로세스를 가지고 있어 무엇보다 시청각이 주 컨텐츠인 VC였다. 하지만 사용자가 디바이스의 설정에서 저전력 모드를 활성화 했을때 일정 시간이 지나면 앱의 화면이 잠겨 버리는 issue가 발생했다. 해당 VC만큼은 저전력 모드 활성화로 인한 화면 자동 잠금이 이루어지지 않아야 한다는 요청이 있었다. 그리하여 idleTimerDisabled이라는 Bool 타입의 속성을 컨트롤하여 issue를 해결했고 그 과정을 포스팅하겠다. 일단 Apple 공식 문서의 설명을 참고하자면 idleTimerDisabled이라는 속성의 기본값은 ..
[ISSUE] AVFoundation ( 3 ) - AVAudioEngine 이번에는 audio의 rate와 pitch를 control 하기 위해 AVAudioEngine을 사용하여 Player를 구현하는 과정에서 생긴 issue에 대해서 포스팅하겠다. AVFoundation의 강력한 클래스 중 하나인 AVAudioEngine은 한 개체의 출력이 다른 개체의 입력이 되도록 오디오 처리 개체를 체인으로 연결하는 것이다. 시작 부분에 오디오를 공급하고 중간에 처리를 적용한 다음 오디오를 출력으로 재생하여 많은 노력없이 실시간으로 오디오 조작을 수행 할 수 있다. 하지만 'local에 위치한 audio파일' 이라는 제한이 있었다. 어쩔수 없이 해당 URL에 있는 audio 파일을 stream이 아닌 디바이스에 다운로드 받는 프로세스로 변경을 하였다. ( 앱에서 제공하는 노래의 개수는 ..
[ISSUE] AVFoundation ( 2 ) - AVAudioPlayer AVPlayer 포멧 관련 issue를 다뤘던 저번 포스팅에 이어서 이번에는 AVAudioPlayer로 진행하며 겪은 issue에 대해 얘기하겠다. 일단 AVAudioPlayer는 AVPlayer와는 다르게 로컬에 저장된 오디오 파일의 재생 기능만을 제공한다. 또한 addPeriodicTimeObserver와 같이 주기적으로 호출되어 현재 재생시간에 따라 인터페이스를 변경하고 싶을때 주로 사용하는 메소드가 따로 구비되어있지 않았다. Apple 공식문서와 많은 블로그에서 AVAudioPlayer는 Stream이 불가능하다고 말한다. 하지만 왜 나는 stream이 가능한걸까..... ( 뭔가 잘못이해하고 있는거 같은데 이거에 대해 아시는 분은 댓글 달아주시면 감사하겠습니다!!) AVAudioPlayer의 i..
[ISSUE] AVFoundation ( 1 ) - AVPlayer 현재 진행하는 프로젝트에서 mp3파일의 음원을 실시간으로 재생하며 컨트롤 해야하는 부분이 있었다. 필자는 사전에 AVPlayer를 사용하여 사용자가 만든 음악을 공유하며 들어볼수 있는 앱을 개인 토이 프로젝트로 만든 경험이 있어 AVPlayer로 진행해야겠다고 생각했고 player를 구현하는 과정에 있어서 많은 issue들이 생겼다. 그리고 해결 했던 과정을 몇편에 나눠 포스팅 해보려한다. AVPlayer로 동일하게 진행했었지만 사전에 진행했던 토이프로젝트에서 사용하던 Firebase URL이 정상적으로 duration을 가지고 올수 있었던 것과는 반대로 필자가 전달 받은 프로젝트에 사용한 url은 playerItem으로부터 제공받는 duration을 가지고 오지 못해 문제가 발생했다. 오디오가 정상적으..