 
							- 
							
							究極のAppパフォーマンスサバイバルガイドパフォーマンスの最適化は、追跡が必要な指標や使用するツールが多く、困難なタスクのように思われます。しかし、心配はいりません。このAppパフォーマンスに関するサバイバルガイドは、開発プロセスを円滑にし、Appを使用する人々の素晴らしい体験に貢献するツール、メトリクス、パラダイムを理解するのに役立てることができます。 リソース- Analyzing the performance of your shipping app
- App Store Connect API
- Improving app responsiveness
- MetricKit
- XCTest
 関連ビデオWWDC23WWDC21WWDC20- MetricKitの新機能
- Power and Performance APIでトレンドを特定する
- Xcode Organizerでパフォーマンス問題を診断する
- XCTestを使ってアニメーションヒッチを除去する
 Tech TalksWWDC19
- 
							このビデオを検索
- 
							- 
										
										5:46 - Using MetricKit class AppMetrics: MXMetricManagerSubscriber { init() { let shared = MXMetricManager.shared shared.add(self) } deinit { let shared = MXMetricManager.shared shared.remove(self) } // Receive daily metrics func didReceive(_ payloads: [MXMetricPayload]) { // Process metrics } // Receive diagnostics func didReceive(_ payloads: [MXDiagnosticPayload]) { // Process metrics } }
- 
										
										10:29 - Testing Scroll performance func testScrollingAnimationPerformance() throws { app.launch() app.staticTexts["Meal Planner"].tap() let foodCollection = app.collectionViews.firstMatch let measureOptions = XCTMeasureOptions() measureOptions.invocationOptions = [.manuallyStop] measure(metrics: [XCTOSSignpostMetric.scrollDecelerationMetric], options: measureOptions) { foodCollection.swipeUp(velocity: .fast) stopMeasuring() foodCollection.swipeDown(velocity: .fast) } }
- 
										
										11:53 - Using mxSignpostAnimationIntervalBegin func startAnimating() { // Mark the beginning of animations mxSignpostAnimationIntervalBegin( log: MXMetricManager.makeLogHandle(category: "animation_telemetry"), name: "custom_animation”) } func animationDidComplete() { // Mark the end of the animation to receive the collected hitch rate telemetry mxSignpost(OSSignpostType.end, log: MXMetricManager.makeLogHandle(category: "animation_telemetry"), name: "custom_animation") }
- 
										
										13:51 - Using XCTest to Measure Disk Usage // Example performance XCTest func testSaveMeal() { let app = XCUIApplication() let options = XCTMeasureOptions() options.invocationOptions = [.manuallyStart] measure(metrics: [XCTStorageMetric(application: app)], options: options) { app.launch() startMeasuring() let firstCell = app.cells.firstMatch firstCell.buttons["Save meal"].firstMatch.tap() let savedButton = firstCell.buttons["Saved"].firstMatch XCTAssertTrue(savedButton.waitForExistence(timeout: 2)) } }
- 
										
										21:19 - Collect memory telemetry // Collect memory telemetry func saveAppAssets() { mxSignpost(OSSignpostType.begin, log: MXMetricManager.makeLogHandle(category: "memory_telemetry"), name: "custom_memory") // save app metadata mxSignpost(OSSignpostType.end, log: MXMetricManager.makeLogHandle(category: "memory_telemetry"), name: "custom_memory") }
 
-