UI Test Code를 작성하는 방법에 대해 알아보자. 이전에 Unit 테스트를 하는 방법에 대해 알아봤다. 그때는 UI와 관계없이 순수하게 로직이 제대로 동작하는지만 검증했었다. [SwiftUI] - Unit TestingSwiftUI에서 단위 테스트하는 방법을 알아보자. https://github.com/Jaehwa-Noh/Art-Space-App/tree/main/Swift-Art-Space-App 를 참고하여 만들었다. Art-Space-App/Swift-Art-Space-App at main · Jaehwa-Noh/Art-Space-Apphttps://developer.asteelbeartaeng2.tistory.com UI를 개발하면서 느끼는 점은, 새로운 기능을 추가하거나 코드를 수정할 때..
이전에는 화면 이동을 각 View와 ViewModel에서 각각 처리하고 있었다. 그러다 보니 네비게이션 관련 로직이 여러 곳에 흩어져 관리되고, 흐름을 따라가기도 어렵고 수정 시 영향 범위를 파악하기도 힘들었다. 특히 화면이 늘어나고 플로우가 복잡해질수록, 네비게이션 로직이 분산되어 있다는 점이 유지보수할 때 부담으로 느껴졌다. 그래서 네비게이션을 한 곳에서 통합적으로 관리할 수 있는 방식이 필요하다고 판단했고, 그 해결책으로 Coordinator 패턴을 적용해 보기로 했다. 이번 포스팅에서는 Coordinator 패턴을 활용해 SwiftUI에서 네비게이션을 어떻게 구조화했는지 정리해 보려고 한다. 📝 목차1. 이전 navigation 관리 구조2. Coordinator 패턴이란?3. Coordinat..
macOS 앱을 배포하는 방법은 두 가지가 있다. App Store를 통해 배포dmg 파일을 통한 직접 배포 평소 앱 스토어에서 앱을 설치하는 경험이 익숙하지만, 웹사이트에서 .dmg 파일을 다운로드해 설치한 경험도 있을 것이다.바로 이 두 가지 방식이 macOS 앱 배포의 대표적인 방법이다. 이번 포스팅에서는 App Store를 거치지 않고 .dmg 파일로 macOS 앱을 배포하는 방법에 대해 자세히 알아보겠다. 📝 목차1. App Store 배포와 dmg 배포 차이점2. dmg 배포를 선택한 이유3. Notarization과 Code Signing 승인받기4. dmg 파일 생성 및 배포 방법 1. App Store 배포와 dmg 배포 차이점 macOS 앱을 배포하는 방법은 크게 두 가지로 나뉜다...
Claude Code를 활용한 바이브 코딩 도구를 개발하던 중, 1차 User Test에서 결정적인 피드백을 받았다."macOS 앱과 터미널을 번갈아 봐야 하는 게 너무 불편해요." 사용자가 불편함을 겪는 플로우라는 걸 깨닫고, macOS앱 내부에 터미널을 임베딩하는 것이 좋겠다고 팀원들과 합의를 하게 되었다. 이 글은 macOS 앱 내부에 터미널을 임베딩하기 위해 시도했던 세 가지 방법과, 각각의 한계를 마주하며 배운 점들을 정리한 기록이다. 📝 목차1. 터미널을 붙이게 된 배경2. Native 방식으로 구현하기3. SwiftTerm 라이브러리 사용4. xterm.js 라이브러리 사용5. 최종적으로 적용된 macOS 앱 안에 터미널(xterm.js 사용)1. 터미널을 붙이게 된 배경 1차 User T..
Clean Architecture를 적용하면서 의존성 역전 원칙을 지키기 위해 ViewModelWrapper를 도입했지만,SwiftUI의 @Observable 매크로를 활용하면서 구조를 더 단순하고 직관적으로 개선할 수 있었다.이번 글에서는 그 과정과 고민을 정리한다. 📝 목차1. Clean Architecture란 무엇인가?2. ViewModelWrapper를 도입한 이유와 역할3. Memory Leak 원인 분석 및 해결(Combine)4. @Observable 매크로란?5. @Observable 매크로로 리팩토링1. Clean Architecture란 무엇인가? Clean Architecture는 크게 Presentation, Domain, Data 계층으로 나누어져 있고, 의존성 방향이 핵심..
배포된 앱의 메모리를 테스트해보던 중 [앱 실행 -> 스플래시 화면 -> 메인화면]으로 이동해 메인화면을 보고 있는 화면에서 50MB의 메모리를 사용하고 있는 걸 확인했다. 메인 뷰에서 아무 동작을 하지 않고 가만히 있었는데 갑자기 57.5MB로 바뀌는 상황이 발생했다.아무것도 하지 않았는데 메모리가 증가하는 걸 보고 어디선가 Memory Leak가 발생하고 있을 것 같다는 생각이 들었고 메모리 Leak 분석을 시작하게 되었다. 📝 목차1. 메모리 Leak 원인 분석2. 메모리 Leak 해결3. 메모리 Leak 해결 결과 및 배운 점1. 메모리 Leak 원인 분석 위에서 설명했듯이 메인화면에서 어떤 인터렉션을 하지 않아도 메모리가 증가하는 걸 보고 메모리 Leak가 발생하고 있지 않을까 생각하게 되었..
앱이 배포된 상황에서 유저 테스트를 해보던 중 사용자가 API 요청 버튼을 연타한 경우, 그대로 API 요청이 버튼 누른 만큼 전송되는 문제가 발생했다. 그래서 API 요청 버튼을 연타하더라도 API 요청 빈도가 늘어나지 않도록 하는 장치가 필요했고, 이걸 Throttling으로 해결하고자 했다. 📝 목차1. Throttling이란?2. Leading vs Trailing Throttle 3. Concurrency로 구현한 Throttling4. Throttling 테스트 및 분석 1. Throttling이란? Throttling은 일정 시간 동안 함수 호출 횟수를 제한하는 기법이다. 📌 왜 Throttling이 필요한가 여러 상황에서 Throttling이 필요하겠지만, 내가 해결하고자 했던 문제..
iOS 앱을 배포한 후 용량을 확인해 봤는데 65.4MB였다.앱의 기능이 특별히 복잡하지 않고 UI도 단순한 편인데, 65.4MB는 예상보다 훨씬 큰 용량이었다. 이번 포스팅에서는 단순한 기능의 앱임에도 불구하고 65.4MB라는 용량이 나온 원인을 분석하고, 최적화 방법을 통해 앱 용량을 감소시켰던 과정을 보여주려고 한다. 📝 목차1. 앱 용량 확인하는 방법2. 용량 줄이는 방법3. 용량 줄이기 위한 시도 및 결과1. 앱 용량 확인하는 방법 앱 용량을 확인하는 방법은 Apple 공식 문서에서 잘 알려주고 있다. Reducing your app’s size | Apple Developer DocumentationMeasure your app’s size, optimize its assets and s..
