grep

iOS

디버깅을 위한 Xcode 활용 방법

NHN

2022년 3월 21일

원문에서 보기 ↗

1. 개요

[참고] Xcode 13.2를 기준으로 글을 작성하였습니다.

2. 목차

  1. LLDB 1.1 po 명령어 1.2 변수 생성
  2. breakpoint 2.1 breakpoint 생성 및 제거 2.2 Edit Breakpoint 2.3 Column Breakpoint 2.4 watchpoint
  3. Network 3.1 Network Condition 3.2 Network Instrument
  4. UI 4.1 UIKit에서 프리뷰 사용하기 4.2 Environment Overrides
  5. 기타 5.1 Analyzer

3. 내용

1. LLDB

1.1 po 명령어

1.png

2.png

1.2 변수 생성

3.png

2. breakpoint

2.1 breakpoint 생성 및 제거

4.gif

2.2 Edit Breakpoint

5.png

2.3 Column Breakpoint

8.png 9.png

2.4 watchpoint

3. Network

3.1 Network Condition

13.png

14.png

3.2 Network Instrument

15.png

16.png

4. UI

4.1 UIKit에서 프리뷰 사용하기

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let label = UILabel()
        label.text = "Label"
        label.backgroundColor = .yellow
        label.translatesAutoresizingMaskIntoConstraints = false

        self.view.addSubview(label)

        NSLayoutConstraint.activate([
            label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
            label.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
            label.widthAnchor.constraint(equalToConstant: 100),
            label.heightAnchor.constraint(equalToConstant: 50),
        ])
    }
}
import UIKit
import SwiftUI

class ViewController: UIViewController {
  ...
}

#if DEBUG
struct ViewControllerRepresentation: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> ViewController {
        return ViewController()
    }

    func updateUIViewController(_ uiViewController: ViewController, context: Context) {

    }
}

struct ViewController_Previews: PreviewProvider {
    static var previews: some View {
        ViewControllerRepresentation()
    }
}
#endif

20.png

4.2 Environment Overrides

21.png 22.gif

5. 기타

5.1 Analyzer

23.png

- (nonnull NSString *)returnNonnullString:(CustomEnum)cases {
    NSString *result = nil;
    switch (cases) {
        case Case1:
            result = @"this is case 1";
            break;
        case Case2:
            result = @"this is case 2";
            break;
        default:
            break;
    }
    return [result substringToIndex:5];
}

24.png

매 빌드 때마다 Analyze를 따로 호출할 필요 없이, Build Settings > Analyze During 'Build' = YES로 설정하면 빌드 할 때 알아서 Analyzer가 동작합니다.

4. 결론

dooray-sticker-03.gif

5. 참고