From aba0c4e6f6d26e3363cab778b66875023e15619f Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Fri, 17 Jun 2022 18:52:07 -0700 Subject: [PATCH] Do not show diagnostic warning for disconnected iOS devices (#105971) --- .../flutter_tools/lib/src/macos/xcdevice.dart | 13 +++++++- .../test/general.shard/macos/xcode_test.dart | 31 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/macos/xcdevice.dart b/packages/flutter_tools/lib/src/macos/xcdevice.dart index 62c09af6a42d..c6bde74e5376 100644 --- a/packages/flutter_tools/lib/src/macos/xcdevice.dart +++ b/packages/flutter_tools/lib/src/macos/xcdevice.dart @@ -354,7 +354,10 @@ class XCDevice { return error is Map ? error : null; } - static int? _errorCode(Map errorProperties) { + static int? _errorCode(Map? errorProperties) { + if (errorProperties == null) { + return null; + } final Object? code = errorProperties['code']; return code is int ? code : null; } @@ -521,6 +524,14 @@ class XCDevice { final Map? errorProperties = _errorProperties(deviceProperties); final String? errorMessage = _parseErrorMessage(errorProperties); if (errorMessage != null) { + final int? code = _errorCode(errorProperties); + // Error -13: iPhone is not connected. Xcode will continue when iPhone is connected. + // This error is confusing since the device is not connected and maybe has not been connected + // for a long time. Avoid showing it. + if (code == -13 && errorMessage.contains('not connected')) { + continue; + } + diagnostics.add(errorMessage); } } diff --git a/packages/flutter_tools/test/general.shard/macos/xcode_test.dart b/packages/flutter_tools/test/general.shard/macos/xcode_test.dart index 1b0b03e06ad1..ed7a5d7ae2c5 100644 --- a/packages/flutter_tools/test/general.shard/macos/xcode_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/xcode_test.dart @@ -788,6 +788,35 @@ void main() { "recoverySuggestion" : "Xcode will continue when iPhone is finished.", "domain" : "com.apple.platform.iphoneos" } + }, + { + "modelCode" : "iPad8,5", + "simulator" : false, + "modelName" : "iPad Pro (12.9-inch) (3rd generation)", + "error" : { + "code" : -13, + "failureReason" : "", + "underlyingErrors" : [ + { + "code" : 4, + "failureReason" : "", + "description" : "iPad is locked.", + "recoverySuggestion" : "To use iPad with Xcode, unlock it.", + "domain" : "DVTDeviceIneligibilityErrorDomain" + } + ], + "description" : "iPad is not connected", + "recoverySuggestion" : "Xcode will continue when iPad is connected.", + "domain" : "com.apple.platform.iphoneos" + }, + "operatingSystemVersion" : "15.6 (19G5027e)", + "identifier" : "00008027-0019253601068123", + "platform" : "com.apple.platform.iphoneos", + "architecture" : "arm64e", + "interface" : "usb", + "available" : false, + "name" : "iPad", + "modelUTI" : "com.apple.ipad-pro-12point9-1" } ] '''; @@ -799,10 +828,12 @@ void main() { final List errors = await xcdevice.getDiagnostics(); expect(errors, hasLength(4)); + expect(errors[0], 'Error: iPhone is not paired with your computer. To use iPhone with Xcode, unlock it and choose to trust this computer when prompted. (code -9)'); expect(errors[1], 'Error: iPhone is not paired with your computer.'); expect(errors[2], 'Error: Xcode pairing error. (code -13)'); expect(errors[3], 'Error: iPhone is busy: Preparing debugger support for iPhone. Xcode will continue when iPhone is finished. (code -10)'); + expect(errors, isNot(contains('Xcode will continue'))); expect(fakeProcessManager.hasRemainingExpectations, isFalse); }, overrides: { Platform: () => macPlatform,