본문 바로가기

전체 글

(67)
iOS) UIViewController view를 다루는 것에 focus되어있는 controller 기본적으로 하나의 view property를 가지고 있다. 가끔 교체하는 경우도 있지만 안건드는 것이 좋다. 기본적으로 뷰 컨트롤러는 화면을 꽉 채우는 것이 목적이다. 화면을 보여주는 단위로는 스크린이 있다. 그 스크린 안에 윈도우라는 개념이 있다. 윈도우는 스크린에 들어가는 실제적인 뷰이다. 그 위에 올라가는 것이 뷰이다. 기본적으로 화면을 보여주기 위해 세 가지 정도가 있다. 초창기에는 뷰 컨트롤러가 꽉 채운 화면만 되었는데 요새는 다른 역할도 한다. ViewController와 MVC MVC 패턴에서 C 역할을 하지만 뷰에 집중되어 있다. 화면 전체 콘텐츠를 담당하거나 특정 영역을 담당한다. 앱을 개념적으로 생각해보면 어떤 뷰컨트롤러 하나..
SwiftUI) 사용자 이벤트 수집 및 Alert로 확인 사용자 이벤트 사용자 이벤트란? 사용자가 앱을 이용하면서 발생할 수 있는 상황에 대해 정의한 것으로, 앱 개선을 위해 수집할 만한 정보를 선정하여 데이터화 한 것입니다. 크게 화면 전환 이벤트와 버튼 클릭 이벤트가 있을 수 있습니다. protocol Event { var name: String { get } var createdAt: String? { get } var metadata: [String: String]? { get } } 이벤트가 무엇에 대한 것인지 이벤트명(name)과 생성된 날짜(createdAt), 기타 세부사항(metadata)를 수집하였습니다. 예로 홈 화면에서 플레이리스트 화면으로 전환되었다는 것을 다음과 같이 표시할 수 있습니다. Event(name: "PlaylistViewd..
iOS) 서버와 데이터 통신을 위해 URLRequest 작성하기 Json으로 Post하기 URLRequest 생성시 기본 헤더는 Json이 아닙니다! Network API 통신을 하여 데이터를 외부 서버로 전송할 때 보통 json 형식으로 인코딩하여 보냅니다. MongoDB로 Json 데이터를 전송하는데 데이터가 계속 이상하게 보내졌습니다. { "name" : "playlistViewed", "createdAt" : "2020-12-16T15:43:07.294+0900", "metadata" : { "from" : "today" } }보내고자 했던 형식은 위와 같은데 자꾸 보내지는 데이터는 아래와 같았습니다. { "\"name\":\"playlistViewed\",\"createdAt\":\"2020-12-16T15:43:07.294+0900\",\"metadata\..
iOS) CoreData - Migration 코어데이터 변경 및 마이그레이션 코어데이터 모델을 변경하고 마이그레이션을 하지 않았더니 다음과 같은 에러가 발생했습니다. 코어데이터를 처음 사용하는 것이라 마이그레이션을 해야한다는 것 조차 모르고 그냥 변경했더니 에러가 주르륵... 일단 급한대로 시뮬레이터에 설치된 앱을 지웠더니 에러는 사라졌습니다. 매번 코어데이터를 변경할 때마다 앱을 지우고 다시 깔 수도 없고 특히 이미 배포해 버린 후라면 유저들에게 일일이 앱을 지우고 다시 설치해달라고 할 수 없으니 코어데이터 모델을 변경하는 법을 알아봅시다. 새로운 모델 버전 추가 Add Model Version Editor -> Add Model Version 을 선택하고 이름을 버전 2라는 의미로 기존 모델 명에 v2를 추가하여 생성합니다. 그러면 다음과 같이..
SwiftUI) NavigationLink와 Memory Leak Memory Leak 지난 글인 ViewBuilder 와 guard let에서 보면 메모리 누수가 발생한 것을 알 수 있다. 이를 고치려고 AnyView를 대체했지만 소용이없었다. 그러던 중 이미지를 네트워크 api 통신을 통해 불러오는 ImageLoader객체가 비이상적으로 생성된 것을 발견하였다. 현재 네이버 바이브 클론 프로젝트를 진행중인데 음악 스트리밍 서비스인 만큼 이미지가 많이 필요한 상황이라 이미지 객체를 포기할 수 없어서 고쳐보기로 했다. 사실 뷰는 중요하지 않고 다른 것이 중요한 상황이라 이미지는 정적 이미지로 고정할 수도 있었지만 여태 만든 DB 더미 데이터와 네트워크 객체를 포기하기 아까워 고치기로 했다. 홈 화면(Today Scene)과 더보기 화면(Magazine Scene)을 왔..