개발/Swift

Xcode Instrument 톺아보기

덤벨로퍼 2024. 4. 11. 23:53

Animation Hitches

스크롤할때 애니매이션이나 트랜지션이 끊기는 현상을 힛치라고함

렌더 루프를 통해 계속해서 Frame이 만들어지는데 렌더루프가 늦어져서 다음 Frame이 늦어지면 힛치가 발생

렌더루프는 이벤트 처리, UI렌더링, 프레임이 노출 되는 과정을 포함함

녹화 후 앱을 실행하고 녹화 종료 하면

Hitch duration 133, Acceptable latency 33 여기서 Expensive commit 이라는게 발생함

commit은 버튼을 탭 > 뷰 UI 내부적으로 계산하여 업데이트 > 업데이트된 layer tree를 GPU에게 제출 하는 것을 말함

Expensive commit 이 앱에서 발생함을 확인

 

아래로 내려 메인스레드 타고 들어가 어디서 발생했는지 볼수 있음

 

Leak

xcode → Profile → Leak 선택 → 녹화 하면 앱이 돌아가면서 체크 가능함

릭이 발생( 실제 발생하면 녹색 V 이 아닌 빨간색 X 표시 됨) 하면 필터 검색 하여 Persistent (메모리에서 갯수)

를 보고 문제 파악 가능함

 

SwiftUI

해당 코드를 예시로 사용

public struct NoticeListView<ViewModel>: View where ViewModel: NoticeListViewModelProtocol {
	@ObservedObject private var viewModel: ViewModel
	@State private var dataSource: [NoticeListRowType] = []
	....
}



View Body - 어떤게 얼마나 얼마나 오래동안 그려졌는지 확인하기 위함

위 List View 의 Duration 체크

 

View Property - view property 가 어떻게 변경되었는지

State 의 Value 를 체크 할수 있음