본문 바로가기

UIKit Project/UIKit Troubleshooting13

[LilsMusic] Coordinator를 활용해 MusicKit 권한, 구독 제안 화면이동하기 이번 프로젝트를 하면서 MVVM에 Coordinator를 더한 MVVMC패턴을 활용했는데요, Coordinator를 이전부터 프로젝트에 적용해보면서 느꼈던 점들이 있는데 우선 MVC보다는 MVVM의 Input, Output패턴에서 함께 썼을때 플로우도 깔끔하고 궁합이 잘 맞았다는 생각이 들었고, 재사용하는 화면이 많을때, 복잡한 화면이동을 관리할때 편하다는 생각이 들었습니다. 이번 제가 만든 앱에서는 재사용하는 화면이 많았는데요, 이렇게 첫번째 탭과 세번째 탭에서 플레이리스트를 누르면 List화면이 나오고, 노래를 누르면 플레이어 화면이 나오는 구조로 만들었습니다. 그래서 첫번째, 세번째 탭에서 각각 같은 화면인 List화면과 플레이어 화면이 나와야 해서 ListCoordinator와 MusicPlaye.. 2024. 4. 4.
[LilsMusic] MusicKit의 Swift Concurrency, Combine과 RxSwift 연동하며 생긴 트러블 슈팅 MusicKit을 활용한 음악앱을 만들기로 결정하고 한 가지 걱정되는 사실이 있었습니다. 그것을 바로..! MusicKit이 비교적 최신 API이고, SwiftUI를 대상으로 만든 API이기 때문에 대부분의 비동기 함수가 async / await함수이고, 이번에 제가 사용할 기술스택은 UIKit + RxSwift이기 때문에 잘 연동해서 만들 수 있을까는 걱정이 들었습니다. 만들면서 몇 가지 트러블이 있었고, 어떻게 해결했는지 정리해보려 합니다. 1. 다양한 Player시점의 부재 재생되던 음악이 끝나고 다음 노래가 재생될때의 시점을 파악해 화면에 바뀐 노래의 정보를 표시해줘야 했습니다. 기존의 음악플레이어인 MPMusicPlayer는 오래 사용한 만큼 다양한 시점의 Notification을 제공해줍니다... 2024. 3. 31.
[LilsMusic] MusicKit을 활용한 음악앱 만들기 - 뮤직비디오 로딩 최적화 새싹 메모리스의 iOS 개발과정을 열심히 진행중에 있습니다! 지금은 개인 출시 프로젝트가 한창인데 저는 예전부터 관심이 있던 음악앱을 MusicKit을 활용해 구현해보기로 했습니다! MusicKit은 AppleMusic에 가입 + 개발자 계정까지 있어야 사용 가능한 비싼 API인데요 마침 제가 둘 다 충족하고, 돈도 많이 내고 있는 김에 겁 없이 도전해보았습니다! 만들다 보니 MusicKit은 비교적 최근 프레임워크가 자료도 많이 없었고, GPT도 아직 잘 모르는 친구이더라구요. 게다가 SwiftUI용 API로 설계되었기 때문에 UIKIt에서의 자료는 더더욱 없어서 처음에 어려움을 많이 겪었습니다! 아직까지 많이 구현하지는 못했지만 오늘 너무 큰 난관에 봉착했고, 문제를 해결해나가는 과정을 기록해보려 합.. 2024. 3. 13.
[날씨의 i] 쌓여가는 앱 용량..realm 데이터와 iOS 데이터 확인하고 임시파일 삭제하기 (Realm CRUD, RealmStudio, iOS FileManager, tmp) 위젯을 모두 완성하고..! 즐거운 마음으로 2.0 업데이트를 신청하려 하는데 앱 용량이 궁금해서 확인해보니 400MB..?였습니다?? 그렇게 큰 앱이 아닌데 이상하다..해서 내부를 살펴봤습니다. 앱 용량은 익스텐션을 3개나 활용해서 이전보다 늘어났을 수 있다고 해도 문서 및 데이터가 52.6MB..?로 생각보다 많이 데이터가 있었습니다. 위젯을 개발하면서 테스트하기 위해 여러 사진을 설정했었는데 그 사진들이 지워지지 않고 앱 안에 쌓여있나..? 해서 새로운 사진을 몇 장 설정해보았습니다. 그랬더니 이렇게 바로바로 용량이 쌓이고 있었습니다ㅎㅎ realm에서 업데이트할때 기존의 사진을 대체하는 메소드를 만들어서 사진이 한 장씩 계속 바뀐다고 생각했는데 잘 못 만들었나..? 생각하며 코드를 다시 확인했습니다... 2023. 9. 18.
[날씨앱] 앱스토어 출시 도전과 세 번의 리젝! 이 앱...출시할 수 있을까? (앱스토어 앱 제출시 주의사항, 앱 crash log 확인하고 해결하기, 리젝 해결하기) 한 달 반 정도에 걸쳐서 드디어 날씨앱을 앱스토어에 제출하게 되었습니다! 와~! 저번에 멋사 앱스쿨을 하면서 SwiftUI로 최종 팀 프로젝트 부트캠핑 앱을 성공적으로 출시해 본 경험이 있었지만 (물론 많은 리젝과 우여곡절을 뚫고..) 이번에 UIKit으로, 혼자, 프로젝트를 마무리하고 출시하게 되어 뭔가 더욱 뜻깊고 보람찬 것 같았어요! 앱 이름은 고민하다가 앱스쿨에서 센스있는 작명으로 도와줬던 친구에게 부탁해 "날씨의 i"로 정하게 되었습니다! 뭔가 이름도 귀엽고 듣자마자 제 마음에 들었습니다 이 앱은 디자이너가..없이 저 혼자 만든 앱이다 보니 아이콘은 예쁘게 만들진 못하고 sf심볼을 이용해서 간단하게 만들었습니다! 날씨 아이콘과 알림..을 합쳐서 만들었는데 혹시나 측은지심을 지니신 디자이너분 계시.. 2023. 8. 10.
[날씨앱] CoreLocation 3탄, 사용자의 위치정보, 위치 호출 최적화하기 (.startUpdatingLocation(), .requestLocation() 차이점) CoreLocation을 적용하면서 사용자의 현재 위치 가져오기, 현재 위치의 주소 가져오기 등을 했었는데요. 오늘은 CoreLocation을 개발하면서 제 앱에 맞게 최적화 했던 것들을 정리해보려합니다. 처음에는 위치 기반 앱이다 보니 위치를 옮길 때 사용자의 위치를 자동으로 가져오려 했습니다. 이전에 만들었던 코드를 보시면 이렇게 작성했었는데요 함수가 실행되는 디테일한 빈도와 순서가 궁금해서 프린트를 하나하나 찍어봤습니다. locationManagerDidChangeAuthorization()에 print("위치 가져옴"), locationManager(didUpdateLocations:) 에 print("위치 업데이트")을 넣고 찍어보면 앱을 실행할 때 이렇게 나오게 됩니다. 처음에 사용자가 위치 .. 2023. 7. 21.