iOS 13에 새롭게 추가된 Metric Kit 대단합니다.

11251 단어 SwiftXcode11iOS13
이 글은 ZOZO 기술 #5 AdventCalendar 2019 의 글입니다.
어제는 @EnKUMA 선생의 "GKE에 gcloud 명령을 위한 Pod을 배치하면 꽉 채워집니다." 보도입니다.
ZOZO 기술 iOS 엔지니어@ahiru입니다.
본고는 iOS13Xcode11에서 새로 추가된 프레임워크 중 하나인 MetricKit에 대한 조사 등을 총결하였다.
WWDC 2019의'Improving Battery Life and Performance'에서 MetricKit의 상세한 상황을 설명했기 때문에 이 세션을 바탕으로 MetricKit가 무엇인지, 무엇을 할 수 있는지 등을 중심으로 작성합니다.

What's MetricKit?


애플 문서 아래와 같다.
Aggregate and analyze per-device reports on power and performance metrics
MetricKit는 장치의 응용 프로그램의 출력과 성능 등을 수신하는 프레임워크입니다.
MetricKit를 사용하면 배터리와 성능에 미치는 영향을 계량화할 수 있습니다.
즉, 응용 프로그램의 성능을 향상시키는 토대에서 어떤 기능이 병목이 되었는지, 어떤 원인이 시작 시간을 느리게 했는지 등 원인의 특정한 원인을 상당히 간단하게 조사할 수 있다.

측정 유형


두 개의 도량이 존재한다. 기본 도량과 성능 도량이다.

Battery Metrics

  • Processing
  • Location
  • Display
  • Networking
  • Accessories(Bluetooth)
  • Multi Media
  • Camera
  • Performance Metrics

  • Hangs
  • Disk
  • Application Launch
  • Memory
  • Custom Intervals
  • 도량을 가져오는 세 가지 도구


    iOS13Xcode11에서 도량을 수집하는 세 가지 기능이 추가되었습니다.
    아래에 소개된 3가지 기능을 잘 활용하여 각 개발 단계(개발·테스트/베타판/발행판)에서 도량을 각각 수집할 수 있다.

    1. XCTest Metrics


    지금까지 XCTest에서 도량을 얻을 수 있었지만 얻을 수 있는 도량이 증가했다.
    사용자 인터페이스 테스트 단원 테스트는 모두 사용할 수 있다.

    measure(metrics: [XCTMetric], block: () -> Void)

  • [iOS13Xcode11 이하]에서 실행 시간만 측정 가능
  • func testPhotoUploadPerformance() {
            let app = XCUIApplication()
            // 実行にかかる時間を測定
            measure() {
                app.buttons["Apply Effect"].tap()
                app.dialogs["alert"].buttons["OK"].tap()
            }
    }
    
  • [iOS13Xcode11 이후]에서 취득하고자 하는 지표를 지정할 수 있습니다(취득할 수 있는 지표는 참조여기
  • func testPhotoUploadPerformance() {
            let app = XCUIApplication()
            // 実行にかかる時間 / メモリ使用量 / CPU使用率 を測定する
            measure(metrics: [XCTClockMetric(),
                              XCTMemoryMetric(application: app),
                              XCTCPUMetric(application: app)]) {
                                app.buttons["Apply Effect"].tap()
                                app.dialogs["alert"].buttons["OK"].tap()
            }
    }
    

    testApplicationLaunchTime


    또한 새로운 UI 테스트의 각 대상에는 애플리케이션 시작 테스트가 자동으로 추가됩니다.
    func testApplicationLaunchTime() {
            measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) {
                XCUIApplication().launch()
            }
    }
    
    이 테스트를 실제로 실행하는 사람은 알 수 있지만 응용 프로그램은 5회 정도 시작됩니다.
    그리고 테스트의 실행 단추 아래에 상세한 단추가 표시되고 누르면 아래의 팝업 단추가 표시됩니다.

    5회 시작의 평균 시간은 평균값으로 표시되며 베이스라인으로 설정할 수 있습니다.즉, 그 프로그램의 시작 시간의 기준값이다.
    자신이 개발 중인 응용 프로그램에 새로운 기능 등을 추가할 때 시작 시간이 기준치보다 늦으면 이 기능의 성능이 적당하다고 말할 수 없다.
    이제 성능 면에서 재광택 테스트를 진행할 수 있다.
    성능 테스트를 위한 참고 사항은 다음과 같습니다.
  • 부하가 커서 디버거를 넣지 않음
  • 모든 진단 옵션 닫기
  • 별도의 시나리오 또는 테스트 계획 기능을 사용하여 진단 옵션을 간단히 종료할 수 있음
  • 2. MetricKit


    도량을 수집하는 장치의 프레임워크입니다.
    그것은 모든 사용자가 응용 프로그램을 사용할 때의 상황을 이해하는 데 도움이 된다.
    주로 베타판 발행판의 상세한 도량을 수집하는 데 쓰인다.

    구현 방법


    설치 방법은 매우 간단하다.
    클래스를 만들고 도량을 받아들일 수 있습니다.그리고 데이터 (도량) 를 수집하기 시작한다.
    class MySubscriber: NSObject, MXMetricManagerSubscriber {
    
        var metricManager: MXMetricManager?
        override init() {
            super.init()
    
            metricManager = MXMetricManager.shared
            // メトリックスの受信を許可する
            metricManager?.add(self)
        }
    
        deinit {
            metricManager?.remove(self)
        }
    
        func didReceive(_ payloads: [MXMetricPayload]) {
            for metricPayload in payloads {
                // 各自、ペイロードをサーバーに送ったり、ファイルに保存したりする
            }
        }
    }
    
    MetricKit를 사용하면 응용 프로그램이 언제 어디서 얼마나 사용되었는지 간단히 알 수 있습니다.

    24시간이 지나면 요약이 작성되고 디바이스로 돌아갑니다.상술한 실시 방식은 매일 자동으로 도량을 수집한다.

    mxSignPost


    응용 프로그램의 기능이나 동작에 대한 메일을 수집할 수 있습니다.
    실현 방법은 매우 간단하다. 대상의 곳을 mxsignPost로 둘러싸기만 하면 된다.
    let photosLogHandle: OSLog = MXMetricManager.makeLogHandle(category: "Photos")
    
    mxSignpost(.begin, log: photosLogHandle, name: "SavePhoto")
    
    // パフォーマンス計測したい処理をここに記述
    
    mxSignpost(.end, log: photosLogHandle, name: "SavePhoto")
    
    위에서 설명한 대로 메트릭키트는 자동으로 메트릭을 수집합니다.

    3. Xcode Metrics Organizer


    코드를 변경하지 않고 Organizer의 집합 데이터를 볼 수 있습니다.
    주로 발행판에 나타난 문제를 수집하는 데 쓰인다.
    창 -> 원래 대소문자 -> 미터법 탭에서 볼 수 있습니다.
    개인이 개발한 응용 프로그램에서 확인한 결과 여기입니다.(업데이트 후 부팅 시간이 단축되어 기쁩니다...!!!)

    너는 시동 시간과 배터리 사용량 등의 데이터를 볼 수 있다.
    버전마다 확인할 수 있기 때문에 테스트 시 성능에 문제가 없지만 발행판의 성능이 나빠지는 등도 간단하게 확인할 수 있다.
    각종 도량이 도표에서 가시화되어 매우 재미있다.
    여러분이 참여한 제품을 꼭 보십시오.

    총결산


    WWDC 2019는 내용이 풍부하기 때문에 Metrics 주위에서 언급된 국내 보도를 거의 보지 못했지만 실제로는 상당한 진화를 이루었다.
    나는 응용 프로그램의 성능 향상은 모든 응용 프로그램 개발자들이 의식할 수 있는 부분이라고 생각한다.
    XCTest에서는 다양한 도량에서 간단하게 성능 측정을 할 수 있고, MetricKit를 사용하면 발행판의 도량을 간단하게 얻을 수 있어 고품질의 응용 프로그램을 만드는 데 큰 은혜를 끼친다.
    메트릭키트로 퀄리티 높은 어플리케이션 만들어보세요!!

    좋은 웹페이지 즐겨찾기