앱을 개발하는데 있어서, 효율적인 알고리즘 및 로직을 작성하는 것도 중요하지만 불필요한 리소스가 낭비되는 것을 방지되는 것 역시 매우 중요합니다! 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..
오늘은 의존성 주입(DI)에 대해 공부한 내용을 정리해보려 합니다. https://ko.wikipedia.org/wiki/의존성_주입 의존성 주입이란? 객체지향 프로그래밍에서 의존성이 있다는 것은 클래스 간에 의존 관계가 있다는 것을 의미합니다. 즉, 다음과 같이 A라는 클래스에서 B클래스 객체를 생성해 사용하면 의존관계가 형성되는것이죠. class B: A { } class A { let b = B() // 의존 관계 형성 } 의존관계가 형성되면 한 클래스가 바뀔 때 다른 클래스가 영향받게 되는데. 이러한 의존관계를 약하게 만들기 위한 방법이 의존성 주입입니다. 객체의 생성과 사용의 관심을 분리함으로써 가독성과 코드 재사용성을 높이는데 그 의의가 있습니다. 만약 메일을 사용하는 User라는 클래스가 있..
이 문제 포스팅할 생각이 없었는데, 생각보다 테스트케이스 5번과 10번에 대해 어려움을 겪는 사람들이 많은것 같아서 포스팅해보려구 합니다 ㅎㅎ (저도 5번, 10번 통과가 안되어서 뭐가 문제인지 헤멨어요 ㅜㅜ) programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 문제는 위와 같은 격자 배열에서, 블록이 2×2 형태로 4개가 붙어있을 경우 사라지면서 점수를 얻는 게임입니다. 해당 블록이 사라지면 위에 있..
SwiftUI 기초 - 공식 튜토리얼 정리(1)에서 이어지는 내용입니다. SwiftUI 두 번째 튜토리얼입니다. 첫 번째 튜토리얼에서는 사용자에게 보여줄 정보를 하드 코딩했다면 이번 튜토리얼에서는 데이터를 저장하는 모델을 만들어서 사용해 볼 겁니다. 먼저 developer.apple.com/tutorials/swiftui/building-lists-and-navigation 이곳에 들어가서 프로젝트 파일을 다운로드해주세요. 만약 영문으로 튜토리얼을 진행하고 싶으시다면 해당 링크에서 쭉 진행해 주셔도 무방합니다. 다운로드한 프로젝트 Resources 폴더의 landmarkData.json 파일을 우리가 튜토리얼 1에서 만들었던 프로젝트에 드래그 앤 드랍합니다. 그다음 Landmark라는 이름의 Swift ..
새로운 프로젝트에 SwiftUI를 사용해보기 위해 블로그에 SwiftUI를 정리해보려 합니다. ㅎㅎ 조금 찾아보니까 애플이 정리해 놓은 공식 튜토리얼이 잘 되어 있더라구요? 혹시나 영문으로 공부하고 싶으신 분들은 해당 사이트 참고 바랍니다. 제가 앞으로 SwiftUI에 대해 정리하게 될 글 역시 모두 developer.apple.com/tutorials/swiftui를 기반으로 합니다! SwiftUI란? "SwiftUI is a modern way to declare user interfaces for any Apple platform. Create beautiful, dynamic apps faster than ever before." > SwiftUI는 모든 Apple 플랫폼에 대한 사용자 인터페이스..
[iOS] GCD - Dispatch Queue 제대로 알고 쓰자! (1) 에서 이어지는 글입니다 :) QOS developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html Energy Efficiency Guide for iOS Apps: Prioritize Work with Quality of Service Classes Energy Efficiency Guide for iOS Apps developer.apple.com A quality of service (QoS) class allows you to categorize work to be performe..