iOS/이슈(19)
-
테스트 플라이트 배포 이슈
[TL:DL] - beta를 사용하고 있다면, 새로운 베타버전을 확인해보자 또는 info.plist의 정보를 수정해서 우회해서 업로드 가능하다.Unsupported SDK or XCode version. Your app was build with an sdk or version of xcode that isn't supported. Although you can use beta versions of SDKs and Xcode to build and upload apps to App Store Connect. you need to use the lateset Release Candidates (RC) for SDKs and Xcode to submit the app. For details on curren..
2024.12.01 -
Memory Leak
Coorinator 패턴을 적용 후, Memory Leak이 있는지 없는지 체크해 보았다. 시나리오는 MainCoordinator(TabBar)가 제거 후, Login flow를 탈 때 TabBar가 가지고 있던 VC들에 대해 체크 1. 첫번째 탭의 첫번쨰 VC에서 RX.debug() 해 놓을 것들이 dispose메세지가 뜨지 않았다. 해서 deinit 안에 로그를 찍어보았는데, deinit 로그가 찍히지 않음. 2. instrument에서 Leak을 이용하여 체크 시도 Leak이 없다고 나온다!!? 하지만 Dispose도 되지 않고, deinit 로그도 찍히지 않았음 3. Rx 때문에 Leak이 나는지 child Coordinator 해제 시 Leak이 나는지 체크 기존 Leak이 나던 첫번째 VC 앞..
2023.10.31 -
동영상 피드 스크롤 시 중앙의 비디오만 재생되는 기능
유튜브, 인스타, 트위터 등 앱들을 사용할 때는 몰랐는데 생각보다 셀에서 영상이 재생되는 예제를 찾기 힘들었다. 상태 관리가 힘들어서 그런 것 같다. 그러던 중 아래와 같은 요구 사항이 추가되었다 피드 리스트에서 스크롤 시 중앙에 있는 비디오만 재생해주세요 구현 아이디어 1 [참고1] 테이블 뷰의 center 좌표를 구하고 헤당 좌표에 있는 셀의 비디오를 재생 재생 상태 관리는 이전에 재생한 cell을 변수로 저장 func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { let point = self.convert(tableView.center, to: tableView) guard let ind..
2023.03.29 -
Nested ScrollView - 프로 프로필 피드 탭 구현
피드 기능이 추가 되면서 프로필에 유저가 작성한 피드 리스트를 추가하게 되었다. 스크롤 뷰안에 스크롤 뷰가 들어가게 되면서 자연스러운 유저의 스크롤 경험을 구현하기 어려웠다. 티빙과 같은 자연스러운 스크롤 뷰를 만들고 싶었다. 처음엔 내부 테이블 뷰를 isScrollEnabled 속성을 false로 주어 컨텐츠 사이즈를 다 잡아버리는 방식으로 구현했었다. 그러다 아래의 글을 보게 되었고, 이 방식이 reusable한 cell을 전혀 활용하지 못한다는 것을 알게 되었다. [참고1] 나이브한 테이블 뷰 - https://oleb.net/blog/2014/05/scrollviews-inside-scrollviews/ 찾아보니 크게 두가지 방법이 있었다. 1. 스티키 헤더: [참고2]헤더 뷰를 만들고 스크롤에 ..
2023.03.29 -
AVFoundation - 비디오의 인코딩(압축) 및 업로드(3) - 업로드 개선
짧은 비디오가 아니라 20분가까이 되는 비디오이다 보니 압축과 업로드에 유저가 불편함을 느낄 정도로 시간이 많이 소요된다. 해서 업로드 부분을 탭바가 책임지도록 변경했다. 피드 업로드에서 비디오와 제목/컨텐트 등의 데이터로 피드DTO로 가공하여 탭바-뷰모델로 넘겼다. 이 과정에서 2가지 에러가 발생했다. 하나는 AssetReader 참조 에러 이 과정에서 ARC에 의해 assetReader가 먼저 Release되는 에러가 발생했다. cannot copy next sample buffer before adding this output to an instance of AVAssetReader 나머지 하나는 Memory Crash 용량이 큰 비디오에서 메모리 때문에 앱이 튕기는 현상이 발견되었다. 전에도 해당..
2023.03.21 -
AVFoundation - 비디오의 인코딩(압축) 및 업로드(2) - AssetReader / Writer 이용
AVFoundation - 비디오의 인코딩(압축) 및 업로드(1) - ExportSession 이용 ExportSession을 사용하지 않게된 이유 exportSession은 프리셋을 사용해 인코딩을 조절할 수 있기 때문에, 원하는 화질을 유지하면서 용량을 낮추는데에 한계가 있었다. 따라서, low level API인 Asset Reader / Writer를 사용하게 되었다. stream을 이용한 파일 입출력과 비슷한 느낌이다. Asset Audio Reader: 오디오가 없는 비디오 case를 고려하여 처리 // Set AudioReader var assetReaderAudioOutput: AVAssetReaderTrackOutput? if let audioTrack = asset.tracks(with..
2023.03.20