Xcode Instruments란?
Xcode Instruments는 Xcode 내에 포함된 성능분석 및 디버깅 도구
iOS, watchOS, tvOS 및 macOS 앱의 성능을 분석, 최적화하는데에 도움을 줌
Xcode Instruments 실행
첫번째 방법
[Xcode > Open Developer Tool > Instruments]
Instruments를 직접 실행하기 위해서 사용되는 방법
이미 빌드되어 있는 앱을 선택하여 디버깅 가능

두번째 방법
[Prudoct > Build For > Profiling]
앱의 빌드와 함께 Instruments를 실행하기 위해서 사용되는 방법
새로 빌드된 앱을 바로 디버깅 가능

Profiling Templates 둘러보기
실행시 아래와 같은 창이 표시됨
각 분석 영역에 따라 일반적으로 필요한 데이터를 볼 수 있게 구성되어 있는 "Profiling Template"
Profiling Template을 통해 디버깅 가능 → 상황에 따라 고유한 템플릿을 만들어서 사용가능

“Leaks”을 사용해서 메모리 누수를 찾는 방법
수집 화면 구성 알아보기
Template을 선택 → 수집을 시작 후 보여지는 수집 화면의 구성
Trace Document

Toolbar
데이터 수집을 시작/중지
↓
기기추가 및 수집 타깃 선택 등의 작업을 수행가능
Timeline Pane
각 항목별 기록된 데이터의 요약을 시각적으로 표시
Detail Pane
수집한 데이터에 대한 자세한 정보를 표시
Inspector Pane
실행정보 및 stack trace가 표시
Toolbar
데이터 수집을 시작/중지
↓
기기추가 및 수집 타깃 선택 등의 작업을 수행가능

Profiling control
데이터 수집을 시작/중지/일시중지 가능
Target device list
데이터를 수집할 장치를 선택 가능
Target process list
데이터를 수집할 타겟(앱)을 선택 가능
Activity viewer
데이터 추적 횟수와, 현재 추적의 경과 시간을 표시
Add Instrument button
사용가능한 Instruments 팔레트를 표시
이곳에서 추적 항목을 추가 가능
View Buttons
Detail 영역과 inspector 영역을 표시하거나 숨깁니다.
메모리 누수 확인하기
STEP 1.
Circular References(순환참조)의 예시를 활용
↓
버튼이 클릭되었을 때 순환참조가 발생하도록 코드를 작성

import UIKit
class Person {
var name: String
var pet: Pet? // Person이 소유하는 Pet
init(name: String) {
self.name = name
}
}
class Pet {
var species: String
var owner: Person? // Pet을 소유하는 Person
init(species: String) {
self.species = species
}
}
class ViewController: UIViewController {
@IBAction func tappedButton(_ sender: Any) {
let person: Person? = Person(name: "Alice") // Person 클래스의 인스턴스를 생성
let pet: Pet? = Pet(species: "Dog") // Pet 클래스의 인스턴스를 생성
person?.pet = pet // Person 클래스의 pet에 Pet 인스턴스를 할당
pet?.owner = person // Pet 클래스의 owner에 Person 인스턴스를 할당
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
STEP 2.
그리고, Leaks을 선택한 다음,
Profiling control의 빨간색 버튼을 눌러 데이터 수집을 시작

STEP 3.
메모리 누수가 발생하지 않는 상황에서
데이터의 수집이 어떻게 이루어지는지 관찰

STEP 4.
버튼을 눌러 메모리 누수를 발생시키고,
데이터의 수집이 어떻게 이루어지는지 관찰

STEP 5.
어디에서 메모리 누수가 발생했는지 확인
누수된 지점의 빨간색 ❌ 아이콘을 클릭,

Detail Pan 상단의 네비게이션 바의
Leaks을 클릭해 Call Tree를 선택


하단의 CallTree를 클릭해서 invert Call Tree (트리 반전),
Hide System Libraries (시스템 라이브러리 숨기기)를 체크

그러면, 아래와 같이 가장 최근의 메서드 호출이 먼저 표시되고,
앱에서 호출한 Call Tree만 표시되는데요.
이곳에서 Call Tree에서 오른쪽을 클릭해서
Reveal in Xcode를 눌러 누수가 발생한 파일을 Xcode에서 확인 가능


추가로, 오른쪽의 Stack Trace에서 가장 상단에 노출된(가장 최근에 호출된 Trace)를 오른쪽 클릭
↓
Open in Source Viewer를 클릭 시 보다 상세한 위치를 파악하는데에 도움되는 정보를 확인가능



'IOS > Swift-Study' 카테고리의 다른 글
| [Swift-Study] iOS 앱 개발 심화 1주차 - 배포하기 (0) | 2024.05.01 |
|---|---|
| [Swift-Study] iOS 앱 개발 심화 1주차 - 동영상 재생하기 (0) | 2024.05.01 |
| [Swift-Study] iOS 앱 개발 심화 1주차 - 비동기 프로그래밍 (0) | 2024.05.01 |
| [Swift-Study] iOS 앱 개발 심화 1주차 - 디자인 패턴 (0) | 2024.05.01 |
| [Swift-Study] iOS 앱 개발 심화 1주차 - 아키텍처 (0) | 2024.05.01 |