본문 바로가기

분류 전체보기

(97)
스타트업 5개월차 iOS 개발자의 2023년 회고 - 2부 : 스타트업 신입으로 적응하기 2023년 회고의 2번째 이야기로 찾아왔습니다. 이미 1월 회고도 작성했는데, 양심상 1월을 넘기지 않으려 했지만 벌써 2월이 되었네요. 하반기 - 첫 직장에서의 적응, 성장 타임라인 7월 - 첫 컨퍼런스 : KWDC 참여 - 지구는 둥그니까 프로젝트 인수인계 - 옵시디언 툴 공부 + 입문 - 도쿄 여행 - 입사 준비 : 나는 어떤 팀원이 되고 싶은가 8월 - 사내 온보딩 & 워크샵 - 안드로이드 공부 - 프로젝트 분석 - Tuist 도입, 간단한 모듈화 - 프로젝트 리팩토링 - Crash Free User 95% -> 99% - SwiftUI 딥 다이브 09월 - 일기 CRUD 캐싱 설계, 도입 - fastlane 배포자동화 도입 - 에러 다이얼로그 세분화, 가로모드 도입 - 다양한 안정화 작업들 ..
스타트업 5개월차 iOS 개발자의 2023년 회고 - 1부 : 취업 준비 기간 안녕하세요 Duno입니다. 오랜만에 Public한 글을 쓰게 되었네요. Obsidian이나 노션에 Private하게 작성해 두고 올리지 못한 글이 아주 많습니다..! 올해에는 많은 분들께 도움이 될 글을 많이 작성할 수 있기를 바라며, 그 스타트를 2023년 회고로 끊겠습니다. 우선 작년 말에 쓰려고 마음먹었던 회고를 지금에서야 쓰고 있는 저.. 반성합니다. 사내 연말 달리기 프로젝트, 새로운 집 계약 등으로 연말을 정신없이 보냈더니 회고를 쓸 힘도 남아있지 않았었네요 하하. 2023년 회고라고 썼지만, 2023년부터 오늘(2024.01.20)까지의 회고를 남기려고 합니다. 개인적으로 월별 회고를 작성하고 있었는데, 연간 회고를 작성하려니 월별 회고 기록의 존재가 이보다 든든할 수가 없네요. 회고 작성 ..
[Tuist] Tuist에 Contribute하기 - SwiftUI Font Template 지원 개발 중 느낀 SwiftUI Font의 필요성 최근 Tuist와 SwiftUI를 이용한 멀티플랫폼 프로젝트를 개발 중인데, tuist의 resource synthesizer가 제공하는 Font Template 내부에 SwiftUI의 Font가 존재하지 않아 편하게 사용할 수 있는 메서드가 존재하면 좋겠다고 생각했습니다. Image 또는 Color의 경우는 아래와 같이 SwiftUI의 struct를 가져올 수 있는 메서드가 존재했기에 필요성이 더욱 크게 느껴졌습니다. Fonts Template 파일을 살펴보니 swiftUIFont의 도입이 가능해 보였기에, tuist의 contribution guide를 읽기 시작했습니다. Tuist contributor guide 읽기 tuist는 나름 문서화가 잘 되어..
[Swift/Objc] NSCache 클래스 분석하기(feat. objc 문법 이해해보기) 최근에 이미지 캐싱 기능을 라이브러리 없이 구현해보고자 여러 레퍼런스들을 분석중이었습니다. Swift에서 캐싱을 위해 제공하는 기본적인 API로 NSCache가 존재합니다. 공식 문서를 보면 NSCache는 count 및 cost를 통해 object를 관리하는 caching policy를 제공한다고 합니다. 이 클래스는 Foundation Framework에 속하기 때문에, apple이 2023년부터 github에 공개한 Foundation framework의 swift implemetation을 확인 가능합니다. 다른 방식의 구현을 확인하고 싶다면, GNUStep Base Libary를 확인할 수 있습니다. GNUstep is a mature Framework, suited both for advanc..
[iOS] InjectionIII로 UIKit에서 Hot Reload 사용하기 Hot Reloading Hot Reload란 어플리케이션 개발 시 코드를 변경하고, 런타임에서 변경 사항을 즉시 반영하는 것을 말합니다. 일반적인 UIKit의 개발 과정은 다음과 같습니다. 요구 사항 변경 or 오류 발생 -> 코드 수정 -> 빌드 및 어플리케이션 재실행 -> 어플리케이션 반영 확인 이처럼 개발 과정에 있어 코드를 수정하는 시간 외에도 빌드 및 어플리케이션을 실행하는 시간을 들여야 합니다. 만약 이러한 과정의 일부를 줄일 수 있다면 디버깅 시간이 줄어들고, 결국에는 생산성 향상을 도모할 수 있을 것입니다. SwiftUI의 preview 기능은 Hot Reload와 비슷한 부분이 있습니다. preview는 변경 사항을 작성하고, UI의 변동을 실시간으로 확인할 수 있게 합니다. 주요한 차..
[오브젝트] 오브젝트를 읽고, 3~4장 [오브젝트] 오브젝트를 읽고, 1~2장 3장 : 역할, 책임, 협력 2장까지는 객체지향 프로그래밍의 다양한 요소와 구현 기법을 설명했다. 추상화를 통한 유연성 확보라든지, 상속에서는 인터페이스를 상속 받는 것이 핵심이라든지의 내용을 살펴봤다. 지금까지는 객체지향을 구현하는 도구에 대해 살펴보았다면, 이제부터는 객체지향의 본질이 무엇인지 소개한다. 객체지향 패러다임의 핵심은 '역할', '책임', '협력'이다. 앞서 나온 개념들은 구현 측면에 치우친 것이기에, 패러다임의 본질이라고 할 수는 없다. 책을 읽기 전에는 다형성이나 캡슐화 같은 것이 객체지향의 핵심이라고 생각했는데, 그 저변을 관통하는 무엇인가가 있는 것이다. 저자는 객체지향의 본질이 '협력하는 객체들의 공동체를 창조'하는 것이라고 말한다. 협력,..
[오브젝트] 오브젝트를 읽고, 1~2장 지인 중 오브젝트를 읽고 티스토리에 정리하는 분이 계셔서, 우연히 오브젝트란 책을 접하게 되었다. 핵심을 정리한 내용을 살짝 훑어보니, 내가 요즘 지속적으로 고민하고 있는 좋은 구조, 좋은 프로그래밍, 좋은 설계에 대한 실마리를 얻을 수 있을 것 같았다. Tuist를 이용해 모듈화를 진행하고, 여러 디자인 패턴 및 아키텍쳐를 실용적으로 사용하는 과정에서 늘 최선이 무엇인지에 대해 끝없이 재고중이었다. 모듈화를 공부하며 느낀 점은, 모듈 수준의 분리, 즉 컴포넌트를 이루는 클래스 간의 설계 이전에 클래스 자체의 설계를 먼저 깊게 고민해야겠다는 것이다. 지금까지 기본적인 '객체지향'에 대해서는 공부하고 익히려 노력했지만, deep dive한 경험은 없었기에 더욱 오브젝트라는 책이 반가웠다. 프롤로그 : 프로..
[Swift] Modern Concurrency Swift ( 3편 - async-await 알아보기 ) Modern Concurrency Swift ( 1편 - Thread Class로 Thread 문제 파헤치기 ) Modern Concurrency Swift ( 2편 - GCD와 Operation의 특징과 문제점 요약 ) 지난 2편의 글에서는, Thread Class부터 시작하여 GCD 및 Operation까지, iOS에서의 전통적인 멀티스레딩 방식에 대해 알아보았습니다. 본문은 WWDC 및 Swift Evolution을 참고하여 작성했습니다. async-await 앞서 알아본 기존의 멀티스레딩 방식들이 가진 문제점을, Swift Concurrency가 해결할 수 있는지 알아보기 전에 Swift Concurrency의 기본이 되는 async-await에 대해 알 필요가 있습니다. async-await는 ..
[Tuist] Interface Module을 사용하여 domain을 여러 Features로 분리하기 현재 진행 중인 프로젝트에서 Feature가 단일화된 상태에서 Scene Flow를 기준으로 하여 여러 Features로 분리하는 작업 중에 있습니다. 아래의 아이디어를 기준으로 구현했습니다. 앱 구현 특성 상 서로 다른 Feature의 명세가 필요할 때가 있습니다. 이때 구현 모듈이 서로를 직접 참조하게 되면 순환 참조가 생길 수도 있고, 모듈 간의 결합도도 강해집니다. 따라서 구현 모듈 간에 직접 의존하지 않게 만들기 위해 Interface 모듈을 도입했습니다. Interface 모듈 내부에는 ViewController를 추상화 할 수 있는 Protocol을 정의하여, 다른 Feature에서 참조하여 viewController를 생성할 수 있도록 하고자 했습니다. 추상화된 인터페이스와 의존성의 조립은..
[SwiftUI/TCA] CMPedometer, AsyncThrowingStream, TCA dependencies 라이브러리로 만보기 기능 구현하기 현재 진행중인 프로젝트에서 실시간으로 걸음수를 업데이트하는 기능을 구현해야 했습니다. 프로젝트 스펙은 tuist 모듈화 및 TCA 아키텍쳐를 사용하고 있었기 때문에, TCA에 내장된 dependencies 라이브러리로 의존성을 관리하고자 했습니다. 걸음 수 데이터 가져오기 걸음 수 데이터는 HealthKit 또는 CoreMotion의 CMPedometer를 이용하여 가져올 수 있습니다. HealthKit을 이용하기 위해서는 사용자의 건강 정보에 접근 권한을 가지고 있어야하며, CoreMotion의 경우 Motion 정보 접근 권한을 허가받아야 합니다. CMPedometer를 이용할 경우 HealthKit보다 더욱 빠르게 sync되는 걸음수 데이터를 얻을 수 있기 때문에, 실시간 만보기를 구현해야 하는 입..