빈번하게 갱신되는 화면의 경우 어떻게 성능 테스트를 할 수 있을까요? 눈으로 확인했을 때 화면이 버벅이면서 보이거나 끊김 현상이 보이면 당연히 성능이 안 좋다고 판단할 수 있겠지만, 눈으로 확인하는 데는 정확성이 부족할 수 있고 미묘한 차이를 캐치하기 어려울 수 있습니다. 아무래도 가장 좋은 건 데이터, 즉 수치로 확인하는 것이죠. XCode12부터 UI와 관련된 성능 이슈를 파악하는데 도움을 주는 Instruments - Animation Hitches가 도입되었습니다. 아래 내용은 WWDC21 Hitch 관련 세션을 보고 정리한 글입니다. 일반적으로 디스플레이를 갖는 디바이스의 경우 주사율을 갖습니다. iOS 디바이스의 경우 보통 60Hz의 주사율을 갖고 이는 1초에 60번 화면이 갱신됨을 의미합니다..
UnitTest? 개발자가 작성한 프로그램이 의도한 대로 동작하는지 검증하는 단위의 테스트 -> 소스코드의 기본 동작을 검증할 수 있음으로 신뢰할 수 있는 프로그램 작성 가능 -> 특정 모듈, 비즈니스 로직 리팩토링시에도 테스트 함수를 통과해야 하므로 신뢰할 수 있는 프로그램 작성 가능 테스트 코드 작성 방법 함수(비즈니스 로직)에 대한 input case와 output case들을 정의하고 테스트를 통과하는지 검증하는 테스트 코드를 작성 동일한 input에 대해서는 동일한 output이 보장되어야만 함 만약 덧셈, 뺄셈이 가능한 계산기 프로그램을 개발한다고 했을 때 아래와 같이 덧셈 뺄셈에 대한 비즈니스 로직을 설계할 수 있습니다. Tests file로 가보시면, 아래와 같이 처음 보실 수도 있는(?)..
[Swift&iOS/iOS] - [iOS] SwiftUI 학습 순서 (feat. Tutorial & WWDC)에서 SwiftUI Essentials(WWDC 2019)과 Building Custom Views with SwiftUI(WWDC 2019) 세션을 보는 걸 추천한다고 했었는데, 이 포스팅은 이 세션들에 대한 정리 내용입니다 ㅎㅎ (일부 WWDC에 나오지 않는 내용들도 포함 되어 있습니다.) 세션 링크 https://developer.apple.com/videos/play/wwdc2019/216 SwiftUI Essentials - WWDC19 - Videos - Apple Developer Take your first deep-dive into building an app with SwiftU..
현재 회사에서 진행하는 프로젝트에서 SwiftUI와 Combine을 사용하고 있는데, 최근에 드디어..! CBT 버전 개발을 완료하고 배포했습니다 ㅎㅎ 블로그 포스팅을 어떤 내용으로 하면 좋을까 생각해보다가 SwiftUI로 나름(?) 대규모 서비스를 개발해 본만큼 SwiftUI 학습을 처음 시작하려는 분들에게 어떤 순서로 학습을 하면 좋을지 알려주면 좋을 것 같아서 학습 순서를 정리해보려 합니다! (주의: 만약 서비스가 지원하는 OS의 최소 버전이 iOS13이라면 SwiftUI 도입을 극구 말리고 싶습니다. 최소 지원 버전이 iOS14 -> iOS15 ~ 16 일때 도입을 고려해 보세요. 정정: 성능이 중요하거나, 메인 기능의 경우 추천드리지 않습니다.) 1. SwiftUI Tutorial 먼저 첫 시작..
앱을 개발하는데 있어서, 효율적인 알고리즘 및 로직을 작성하는 것도 중요하지만 불필요한 리소스가 낭비되는 것을 방지되는 것 역시 매우 중요합니다! Memory Leak, 즉 메모리 누수의 경우 불필요하게 메모리 영역을 잡아먹음과 동시에 메모리에서 해제되지 않은 인스턴스가 지속적으로 특정 로직을 실행하게 되면 리소스를 잡아먹기 때문에 앱의 성능에도 영향을 끼칠 수 있습니다. 아무튼 쉽게 생각하고 간과해서는 안 되는 문제라는 건데요. 이러한 메모리 누수를 확인하고 해결하는 방법 세 가지를 소개해 드리려고 합니다. 1. retain cycle이 발생하지 않도록 주의 깊게 코드를 작성하자! Swift의 경우 ARC에 의해 힙 영역에 할당된 인스턴스 중 reference count가 0인 인스턴스의 경우 메모리에..
앱에 따라서, 웹뷰(webView)를 사용해야 하는 경우가 있는데요, 이때 웹뷰를 사용하는 앱에서 Safari 개발자용 도구를 사용해 디버깅하는 방법을 소개해드리려고 합니다. 먼저 몇가지 설정이 필요한데요. 아래 순서를 차근차근 따라가면 됩니다 :) 1. 아이폰 - 설정 - Safari - 맨 하단 고급 - 웹 속성 On 2. 맥 Safari 환경설정 - 고급 - 메뉴 막대에서 개발자용 메뉴 보기 체크 3. 아이폰 연결 후, 웹뷰가 포함된 앱에서 웹뷰 띄우기 이미지는 생략! 4. 맥 Safari 개발자용 탭 - 연결된 아이폰 - 해당 앱의 웹 페이지 속성 진입 저는 개발중인 웹앱이 없어서, 아이폰 내 Safari 앱으로 대신했습니다 ㅋㅋ 이렇게 웹 속성에 진입하면, 아래와 같이 네트워크, CPU 사용량,..
저는 아이폰에 설치된 앱이 워낙 많아 아이폰의 '검색' 기능을 자주 사용하는데요. 이때 몇몇 앱의 경우 영어로 된 앱임에도 한글로 검색되는 경우가 있고, 한글로 된 앱임에도 영어로 검색되는 경우가 있습니다. 예를 들어 앱 이름(display name)이 '네이버 지도'라고 하더라도, 아래 이미지와 같이 'naver'라고 검색하면 검색 결과에 '네이버 지도'가 검색 결과로 나오는 거죠 ㅎㅎ 반대로 아래와 같이 앱 이름(display name)이 영어로 되어있어도 한글로 검색 가능하도록 설정할 수 도 있습니다. (duck-z는 제가 개발해 운영하고 있는 앱입니다 ㅋㅋ) 이렇게 앱의 이름(display name)외에 다른 이름으로도 검색 가능하게 하는 방법은 아주 간단합니다. 아래와 같이 앱의 Info.pli..
오늘은 Instruments를 알아보려고 합니다. Instruments는 성능 분석 및 테스팅 도구로 앱의 성능을 신경 쓴다면 반드시 알아야 할 도구입니다. Instruments를 사용하면 CPU분석 메모리 분석을 포함해 여러 가지 분석을 할 수 있고 분석을 통해 성능을 개선시킬 수 있습니다. 오늘 모든 분석을 다 살펴보진 않고 Activity Monitor, Time Profiler, Allocations, Leaks 이렇게 네 가지만 살펴보겠습니다. Instruments를 사용하려면 Product > Profile을 누르시면 됩니다. Instruments가 실행된 후 통계를 기록하기 위해서는 아래와 같이 빨간색 레코드 버튼을 누르셔야 합니다. (모든 분석의 경우 트래킹을 중지하고 Instruments..
오늘은 다양한 디버깅 방법에 대해 알아볼까 합니다. 구구절절 작성하기보다는 핵심만 간결하게 작성해보도록 하겠습니다 ㅎㅎ 1. 콘솔 창 메시지 확인 런타임 에러 발생 시, 앱 종료와 함께 앱이 종료된 이유를 콘솔 창을 통해 확인할 수 있습니다. 2. 디버거 활용 (Breakpoints & lldb) 두 번째 방법은 Breakpoints와 lldb를 활용하는 것입니다. 잘 사용하기 위해서는 디버깅 툴 바에 대해 이해하고 넘어갈 필요가 있습니다. 툴 바 설명 Disable/enable breakpoint: 브레이크 포인트 활성화/비활성화 . Pause/continue execution: 프로그램 실행 중지/이어서 실행 (만약 다음 breakpoint가 있다면 해당 breakpoint에서 멈추게 됩니다.) St..
SwiftUI 기초 - 공식 튜토리얼 정리(1)에서 이어지는 내용입니다. SwiftUI 두 번째 튜토리얼입니다. 첫 번째 튜토리얼에서는 사용자에게 보여줄 정보를 하드 코딩했다면 이번 튜토리얼에서는 데이터를 저장하는 모델을 만들어서 사용해 볼 겁니다. 먼저 developer.apple.com/tutorials/swiftui/building-lists-and-navigation 이곳에 들어가서 프로젝트 파일을 다운로드해주세요. 만약 영문으로 튜토리얼을 진행하고 싶으시다면 해당 링크에서 쭉 진행해 주셔도 무방합니다. 다운로드한 프로젝트 Resources 폴더의 landmarkData.json 파일을 우리가 튜토리얼 1에서 만들었던 프로젝트에 드래그 앤 드랍합니다. 그다음 Landmark라는 이름의 Swift ..