• Device Condition
    • 실제 환경에서 앱이 기대대로 동작하지 않을 때 유저로부터 리포트를 받을 것이다.
    • 이러한 환경 조건은 개발 환경에서 재현하기 어려운 것들이 있다.
      • ex. 네트워크 상태, 온도
    • Xcode 11부터 새로 추가된 온도 상태를 이용해서 디바이스의 온도 조건에 따른 앱 동작을 테스트 해볼 수 있다.
      • 3단계
        • fair
        • serious
        • critical
    • 네트워크 상태도 시뮬레이션 할 수 있다.
      • 다양한 네트워크 프로필
        • High Latency
        • Low bandwidth
        • High Packet loss
        • Slow DNS Response
      • iOS 개발자 세팅에 있는 Network link conditioner와 유사하지만, 더 넓은 범위의 모던 네트워크 프로필을 지원하고, Xcode에서 컨트롤이 가능하다.
  • Environment Overrides
    • 앱을 사용하는 환경은 정말 다양하다.
      • Light /. Dark Mode
      • Dynamic Type
      • Accessibility 기능들
    • 이 모든 조합을 직접 설정 바꿔가면서 하기는 번거롭다.
      • 설정 어디서 하는지 알아내고 계속 기억하고 있어야 되면 귀찮다.
    • 그래서 Xcode에서 직접 설정을 오버라이드할 수 있도록 만들었다.
  • 데모
    • 온도 상태에 따라서 SCNView의 성능을 조절하기

      private func configureSceneFeatures() {
      	var antialiasingMode: SCNAntialiasingMode
      	var requestedFPS: Int
      
      	let state = ProcessInfo().thermalState
      	switch state {
      		case .critical:
      			antialiasingMode = .none
      			requestedFPS = 30
      		case .serious:
      			antialiasingMode = .none
      			requestedFPS = 60
      		default:
      			antialiasingMode = .multisampling2X
      			requstedFPS = 60
      	}
      
      	DispatchQueue.main.async {
      		if let sceneView = self.sceneView {
      			sceneView.antialiasingMode = antialiasingMode
      			sceneView.preferredFramePerSecond = requestedFPS
      		}
      	}
      }
      
    • Energy Impact쪽에서 온도 상태 변화를 확인할 수 있다.

    • 연결된 기기의 조건을 조정하려면, Windows - devices and simulators에서 원하는 기기를 선택해서 조건을 설정 가능

      • override 전체를 한번에 초기화하는 버튼도 지원
      • ios의 status bar를 클릭해서도 이를 확인하고 초기화할 수 있다.
    • live preview에서도 debug bar를 통해서 override를 할 수 있다.

      • Preview도 똑같이 디버거가 붙는다.
      • Xcode 11부터 SwiftUI에서 발생하는 런타임 이슈들도 잡아준다.
        • 심각하지 않은 경우는 프리뷰 실행에 이슈가 없다.