목록전체 글 (10)
원블루의 블로그

까마득한 2년전, 새로운 직장에서 9개월이 되었을 쯤. 통신 모듈 리팩토링을 단행했었다.그때, 회고록을 작성해야했지만, 이제라도 좀 정리를 해보려고 한다.기존 API 통신 구조의 문제점1. Delegate 패턴 기반의 복잡한 응답 처리현재 API 수신부는 Delegate 패턴을 사용하고 있었고, 하나의 Delegate 함수에서 여러 API 응답을 Flag로 분기하여 제어하고 있었다.성공과 실패 응답 처리가 분리되어 있어, 관련 코드를 여기저기 찾아가며 작업해야 하는 불편함이 있었다.또한, 성공 시에도 CODE 값에 따라 다른 Delegate 함수가 호출되는 구조였다.didSuccess(통신 성공)didFailCode(통신 성공, Code ≠ Success)didFail(통신 실패)이처럼, API 응답이 ..
UIScrollView을 사용할 때 움직임이 종료된 시점을 알아내야 할 경우가 있다. 이때, 보통 아래 3개의 Delegate 고민할 것이다.scrollViewDidScrollscrollViewDidEndDeceleratingscrollViewDidEndScrollingAnimation 위 Delegate들의 차이는 아래와 같다scrollViewDidScroll 스크롤 중일 때 일정 간격으로 지속적으로 이벤트를 수신한다.스크롤이 종료되는 시점에만 호출되는 것이 아니라서 이 경우에 쓸 수 없다. scrollViewDidEndDecelerating 사용자의 제스처로 발생한 스크롤이 종료될 때 호출된다. scrollViewDidEndScrollingAnimation 코드로 발생한 스크롤 animation 종..

오랫만에 깃 프로필을 좀 다듬으려고 깃허브를 들어갔는데, contributions가 제대로 카운트되지 않고 있었다.회사에서, 사이드프로젝트에서 매일 커밋을 하는데 커밋 카운트가 전혀 되지 않았다. 원인을 찾아보니 git의 이름과 이메일 설정 문제였다. GitHub 계정에 등록된 이메일주소와 커밋할 때 사용한 이메일 주소가 달라서 생기는 현상이었다.터미널에서 git 커밋자 이름과 이메일을 github와 동일하게 설정하면 해결되는 문제였다. 아래 명령어들을 참고해서 이름과 이메일을 잘 설정해주면~ [git 현재 설정 조회 명령어]>git config --global user.name> HonGilDong> git config --global user.email> incorrect@email.com [git..

컴퓨터 사용기록을 증명해야 하는 일이 있어서 맥의 로그인 기록이 필요할 때가 있다.맥의 last 명령어, 시스템로그를 통한 기록에서는 시스템의 잠자기 진입 시간 등이 기록될 뿐 화면 잠금/해제에 대한 기록 파악이 불가능했다. 그러다가 모니터의 화면이 켜지고 꺼진 시간 기록을 볼 수 있는 방법을 찾게되었다. 이를 통하면 원하는 날짜의 로그인 시간을 대략적으로 알 수 있다. 모니터 화면이 켜지고 꺼진 시간을 보는 방법은 터미널에 아래 명령을 입력하면 된다."2024-12-31" 에는 원하는 날짜를 넣으면 된다.pmset -g log | grep "2024-12-30" | grep -e "sleep" -e "Display" -e "Idle sleep" -e "System sleep" | grep "Notif..

Xcode16에서 iOS 14 버전의 아이폰에 빌드를 하려고 하니 'Could not locate device support files' 오류가 나면서 빌드 시작이 불가능했다. 이유는 Xcode16에서 iOS15 이하 버전의 Device Support Files를 자동으로 포함하고 있지 않기 때문이다.https://github.com/filsv/iOSDeviceSupport 에서 iOS 12, iOS 13, iOS 14 등의 하위버전 지원파일을 다운로드하면 해결할 수 있다. 원하는 버전의 Device Support File을 내려받아서 아래 경로에 넣어주면 끝./Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupp..
스와이프로 화면 뒤로가기는 iOS에서 기본으로 제공하는 기능이라서코드 한 줄로 간단히 구현할 수 있을 줄 알았지만~스와이프하면서 테이블뷰가 스크롤 되는 문제스와이프를 통한 뒤로가기 시에도 Analytics 로그를 찍어야하는 문제통신 요청 타이밍 문제위와 같은 문제들이 있었습니다. 위 문제의 해결법을 포함하는 코드를 공유합니다.첫번째(최상위) ViewController 설정 코드class RootViewController: UIViewController, UIGestureRecognizerDelegate { override func viewDidLoad() { super.viewDidLoad() //1. Pop Gesture(스와이프해서 뒤로가기) 기..
Line Height는 텍스트 한 줄의 높이를 나타낸다. Line Height를 이용하면 줄간격을 조정할 수 있다.UIKit에서는 NSParagraphStyle의 lineHeightMultiple 값으로 Line Height를 상대적으로 설정한다.예를 들어 글자크기가 10pt 일 때 lineHeightMultiple 값을 1.5로 하면 줄높이(줄간격)는 15pt가 된다.시스템 기본값을 사용하고 싶다면 0으로 설정해 주면 된다. 아래코드는 NSMutableAttributedString에서 기존 ParagraphStyle을 유지하면서 lineHeight 값을 설정하는 Extension 함수이다.extension NSMutableAttributedString { @objc func lineHeig..
불기력 서기력 변환 구현예시로 태국 시간을 나타내는 String "2567-07-05 19:00:00"을 DateFormatter를 이용하여 한국 시간 String 으로 변환해보자.태국인은 기본적으로 불기력(Buddhist Calendar)을 사용한다.명시적으로 Calendar 값을 설정하는 걸 보여주기 위해 Locale 설정은 사용 하지 않았다.import Foundationlet thaiDate = "2567-07-05 19:00:00" //태국 형식의 불기력 날짜 샘플let formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" //날짜 포맷formatter.timeZone = TimeZone(abbreviation: "IC..