| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- UICollectionView
- 클린 코드
- Xcode
- HIG
- Refactoring
- 리펙토링
- Clean Code
- MVVM
- rxswift
- ribs
- scrollview
- Observable
- swiftUI
- clean architecture
- collectionview
- ios
- uitableview
- 애니메이션
- Human interface guide
- UITextView
- swift documentation
- SWIFT
- 스위프트
- Protocol
- map
- uiscrollview
- RxCocoa
- 리팩토링
- tableView
- combine
- Today
- Total
목록분류 전체보기 (1687)
김종권의 iOS 앱 개발 알아가기
행이란?사용자가 앱을 쓸 때 지연된다고 느껴지는 것예) 사용자가 버튼을 누른 경우, 조금 있다가 반응한다는 느낌을 주는 것애플에서 제공하는 가이드)의미Instant즉각적인반응이 바로 느껴질 정도로 빠름 (~100ms 이내)Circumstantial상황에 따라 달라지는, 약간 느리지만 용인됨약간의 지연(~250ms)은 사용자가 느끼지만 불편하지 않음Microhang미세한 멈춤눈에 띄는 짧은 멈춤 (~500ms 미만)Hang완전한 멈춤(먹통)반응이 끊기거나 멈춘 듯한 상태 (~500ms 이상)즉, 즉각적이려면 100ms 이내로 동작하게끔해야함또 행의 기준은 500ms 이상 걸리는 동작을 의미함행 파악하는 방법위에서 알아본대로 500ms 이상 걸리는 작업을 행이라고 정의이 행은 Instruments의 Time..
Time Profiler Xcode > Cmd + I로 Instrument 실행 > Time Profiler 선택창이 뜨면 Record 버튼을 눌러서 앱을 실행중지 버튼을 눌러서 분석 중지그래프를 보면 삐쭉 튀어나와있는 부분에 커서를 대면 시간이 얼마나 걸렸는지 알 수 있음그 부분을 왼쪽마우스로 클릭하고 아래 로그를 보면 어떤 부분에서 시간이 걸렸는지 확인이 가능더 구체적으로 확인 방법위에 까지 알아본 방법은 대충 어떤 함수가 많이 걸리는지 알려주는데 더욱 구체적인 back trace를 보고싶은 경우는 아래처럼 처리가 필요Samples를 클릭Profile 클릭하단 로그를 보면 아래처럼 누적값으로 Weight가 표시되는데 가장 큰 weight가 증가한 start부분을 펼치기option + 왼쪽마우스 클릭하..
frame(maxWidth: .infinity)의 의미"부모가 줄 수 있는 만큼 가로폭을 가득 채워라" 란 의미frame(maxWidth: .infinity)는 최대 크기를 제한 한다는 느낌을 주는데 이 의미가 아님다른 예제)아래처럼 텍스트가 좌우 24 패딩을 갖는 뷰 구현?여기도 frame(maxWidth: .infinity)를 추가하여 구현struct Example1: View { var body: some View { VStack { Text("Hello") .frame(maxWidth: .infinity) // Rounded 처리 방법보통 외부 마진을 주고 버튼이 수평으로 쫙 펼친 아래와 같은 것을 요건이 있는 경우?구현하다보면 아..
인터페이스 제공 방법만약 링크 터치 이벤트를 처리하는 LinkDetectionText를 만들고 싶은 경우, LinkDetectionText 내부에서 해당 프로퍼티를 사용\.openURL의 정체: SwiftUI가 미리 정의한 EnvironmentKey@Environment(\.openURL) private var openURL아래처럼 openURL 프로퍼티를 선언한 후 이 프로퍼티를 마치 클로저처럼 실행시키면, 외부에서 사용이 가능struct LinkDetectingText: View { @Environment(\.openURL) private var openURL // AttributedString { ... }}외부에서는 openURL 키를 가지고 envionment 함수의 클..
View 업데이트 빈도수 파악하기View의 body부분에서 업데이트가 너무 많게되면 아래 사진처럼 데드라인을 넘게되는 경우가 존재-> hitch가 발생업데이트 수 프로파일링 방법View Body Updates 하위 트랙 선택빨간선 or 주황선 부분을 드래그하여 영역 선택 LandmarkListItemView에 Update Count가 30으로 찍혀있음View코드를 작성할 때 이 부분을 확인해보면 내가 의도된 업데이트 카운트로 구현했는지 알 수 있음만약, List와 Row가 있는 뷰를 구현할 때 Row에 state하나만 바꿨을때, List전체가 업데이트 되었는지 파악하는 용도로도 사용이 가능* 참고- https://developer.apple.com/videos/play/wwdc2025/306/
프레임 드랍(Hitch)이 일어나는 과정 (Render Loop)앱은 특정 싸이클마다 깨어나면서 이벤트를 처리아래처럼 싸이클마다 클릭 이벤트를 인식하고 UI를 업데이트이때 변경된 SwiftUI View의 body 프로퍼티를 실행함이 UI를 업데이트 하는 과정들은 각 주기 프레임 데드라인전에 완료되어야함즉 데드라인 전에 UI가 업데이트 되는 것렌더링 된 출력은 해당 데드라인 직후에 화면에 표출됨 (주의: 첫번째 프레임에서 내부적인 UI 관련 업데이트를 하고 화면에 보이는 것은 다음 프레임에서 수행)아래와 같은 프레임 드랍 케이스의 Render Loop는?UI 업데이트 부분이 프레임 데드라인 후에 실행되었음이미 두 번째 프레임에서는 첫번째 UI 업데이트를 썼으므로 다음 업데이트는 3번째 프레임에서 시작해야함..
SwiftUI 프로파일링Instrument > SwiftUI 선택하고 프로파일 수행먼저 SwiftUI 로 되어있는 꺽쇠를 클릭 > View Body Updates > 영역을 드래그하여 지정한 후 해당 영역 set Inspection Range And Zooms 클릭 > Time Profiler 클릭 이전 포스팅 글 참고: https://ios-development.tistory.com/1812Time Profiler는 정기적으로 샘플을 추출하여 현재 실행중인 함수에 대한 분석을 시도뒤에서 나올 예제는 body가 실행되는 동안 프로파일링WWDC 영상처럼 호출 스택이 여러가지가 표출됨이 중에서 살펴볼 것은 LandmarkListItemView이므로 command + F를 하여 검색왼쪽을 보면 각 call s..
SwiftUI 최적화 방향SwiftUI 코드가 병목 현상인 시점을 식별 할 수 있는 방법을 중점으로 두고 SwiftUI가 효율적으로 작동하는 방법을 알아보는 것이 목적병목 현상) 애니메이션이 일시 중지되거나, 점프되거나 스크롤이 지연되는 경우성능 문제를 식별하는 가장 좋은 방법은 Xcode Instrument를 사용하여 앱을 프로파일링하는 것XCode 26부터 SwiftUI 프로파일링 할 수 있는 방법이 등장Instrument > SwiftUI 메뉴 프로파일링에서 볼 수 있는 것Long View Body Updates: body 프로퍼티를 실행하는데 너무 오래 걸릴때 표시가 됨Long Representable Updates: View와 ViewController가 너무 오래 걸릴때 표시가 됨Other L..
