iOS
SwiftUI 프로젝트에서 AppDelegate, SceneDelegate 사용하기
프로젝트를 생성할 때 SwiftUI를 선택하면 기본적으로 AppDelegate와 SceneDelegate가 생성되지 않습니다. 하지만 아직까지 외부 SDK연결이나 APNs와 같이 AppDelegate가 필요한 상황이 있고,기존 UIKit 에서 SwiftUI 로 마이그레이션하는 과정에 있다면 SceneDelegate에서 SwiftUI 뷰를 UIKit ViewController로 호스팅해 보여주는게 편할 것 같습니다. 그래서 오늘은 SwiftUI로 프로젝트 생성 후, AppDelegate와 SceneDelegate를 만들기, ContentView를 SceneDelegate를 통해 띄우는 것 까지 해보겠습니다. 먼저 SwiftUI 프로젝트를 생성합니다.XCode12 까지는 프로젝트를 생성할 때 AppDeleg..
SwiftLint SPM으로 설치하기
신규 프로젝트에서 SwiftLint를 도입하기로 했습니다!예전에 SPM으로 설치해본 경험이 있지만 너무 오래되서 가물가물하더라구요.그래서 이번 기회에 정리해놓으려고 합니다. 방식이 두가지가 있습니다. 첫번째는 SwiftLintBuildToolPlugin 을 사용하는 방법입니다.하지만 이 방식은 build phase에 script를 추가하지 않는 방법이라 커스텀 룰을 적용할 수 없어보여 추천하지 않습니다. 두번째는 brew를 통해 터미널에도 SwiftLint를 설치하고, SPM을 통해 SwiftLint를 설치하는 방법입니다.이 방식은 build phase에 script를 실행하도록 해 커스텀 룰을 적용할 수 있습니다. 먼저 간단한 SwiftLintBuildToolPlugin 방식을 알아보겠습니다.Swift..
View Draw Cycle
오늘은 View Draw Cycle에 대해 정리해볼거에요.평소에 layoutSubviews와 같은 View Draw Cycle에 해당하는 메소드를 오버라이딩하여 사용하는 경우가 있었는데, 이 메소드가 언제 호출되는지도 모르고 사용하는 건 잘못되었다고 생각하여 이번 기회에 정리해보려고 합니다!틀린 내용이 있을 수 있습니다. 😂Run LoopView Draw Cycle을 알아보기 전에 먼저 런루프에 대한 사전지식이 필요합니다.하지만 아직 런루프에 대해 학습하기 전이고,오늘은 뷰 드로잉 사이클에 대해 학습해보기로 했으므로 간단하게 알아보겠습니다.런루프란?Event(Input source, timer)를 처리하는 루프 객체수행해야 하는 작업이 있을 때 thread를 일하게 하고, 작업이 없을 때 thread를..
왁뮤 3.0 출시 및 장애 대응 기록
2024년 9월 7일(토), 왁타버스 뮤직 3.0 출시와 함께 발생한 장애를 포함한 이벤트들을 타임라인 순으로 기록하려고 합니다. 출시 일정우선 출시 계획은 다음과 같았습니다.오후 5시: 서버에서 진입 금지 플래그 설정오후 5시 30분: 앱 배포오후 6시: PV영상 공개 & 서버 진입 금지 플래그 제거컨텐츠 유출을 막기 위해 서버에서 진입 금지 플래그를 설정해두고, 실제 앱 공개시간인 오후 6시로부터 30분 정도 여유를 두고 배포를 누르기로 했습니다.그리고 6시에 PV 영상이 공개됨과 동시에 진입 금지 플래그를 제거해 유저들을 받을 계획이었습니다. 오후 5시 배포 시작완벽한 계획과는 달리 시작부터 문제가 발생했습니다.배포 당일에 계획이 수정되었지만, 예약 출시 시간을 변경하지 않아 5시에 배포가 시작되게..
GCD Sync, Async, Serial, Concurrent 조합해보기
GCD를 활용해 비동기 코드를 작성하며 자주 헷갈리는 sync, async 그리고 Serial, Concurrent를 조합했을 때 어떻게 동작하는지 그림과 함께 정리해보려고 합니다. GCD가 무엇인지는 이 곳에서 확인 가능합니다!Serial + Syncvar numbers = [0, 1, 2, 3, 4] let dispatchQueue = DispatchQueue(label: "custom") print("Serial + Sync 실행결과") (0..
캐시 데이터 용량 표시 방식 개선하기: ByteFormatter
캐시 데이터 용량 표시 방식 개선하기: ByteFormatter프로젝트를 진행하며 이미지 캐시를 제거하는 기능을 개발하게 되었는데요.캐시 데이터 용량을 어떻게 표기할까 고민하다 너무 작지도 크지도 않도록 MB 단위로 표현하기로 정하고 byte를 1024 로 2번 나누어 MB로 변환하여 표기했습니다.하지만 코드리뷰를 진행하며 팀원분께 더 나은 방식을 배웠는데요.까먹지 않도록 정리해두려고 합니다!왜 ByteFormatter를 사용해야 할까?기존 방식에서는 용량을 항상 MB 단위로 표시했습니다. 이렇게 되면 GB 이상의 큰 용량을 표현하거나, KB나 Byte 단위의 작은 용량일 때는 어색해 보일 수 있습니다. 이를 개선하기 위해 ByteFormatter를 사용하면 Byte, KB, MB, GB 등 적절한 단위..