Add more instructions and handling for first time iOS run (#10521)

* Before tests

* Add the part to trust the cert on the device

* flip the error checks since some are more specific and are more actionable

* add tests

* review
diff --git a/packages/flutter_tools/test/ios/mac_test.dart b/packages/flutter_tools/test/ios/mac_test.dart
new file mode 100644
index 0000000..e267b05
--- /dev/null
+++ b/packages/flutter_tools/test/ios/mac_test.dart
@@ -0,0 +1,176 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter_tools/src/application_package.dart';
+import 'package:flutter_tools/src/ios/mac.dart';
+import 'package:test/test.dart';
+
+import '../src/context.dart';
+
+void main() {
+  group('Diagnose Xcode build failure', () {
+    BuildableIOSApp app;
+
+    setUp(() {
+      app = new BuildableIOSApp(
+        projectBundleId: 'test.app',
+        buildSettings: <String, String>{
+          'For our purposes': 'a non-empty build settings map is valid',
+        },
+      );
+    });
+
+    testUsingContext('No provisioning profile shows message', () async {
+      final XcodeBuildResult buildResult = new XcodeBuildResult(
+        success: false,
+        stdout: '''
+Launching lib/main.dart on iPhone in debug mode...
+Signing iOS app for device deployment using developer identity: "iPhone Developer: test@flutter.io (1122334455)"
+Running Xcode build...                                1.3s
+Failed to build iOS app
+Error output from Xcode build:
+↳
+    ** BUILD FAILED **
+
+
+    The following build commands failed:
+    	Check dependencies
+    (1 failure)
+Xcode's output:
+↳
+    Build settings from command line:
+        ARCHS = arm64
+        BUILD_DIR = /Users/blah/blah
+        DEVELOPMENT_TEAM = AABBCCDDEE
+        ONLY_ACTIVE_ARCH = YES
+        SDKROOT = iphoneos10.3
+
+    === CLEAN TARGET Runner OF PROJECT Runner WITH CONFIGURATION Release ===
+
+    Check dependencies
+    [BCEROR]No profiles for 'com.yourcompany.test' were found:  Xcode couldn't find a provisioning profile matching 'com.yourcompany.test'.
+    [BCEROR]Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    [BCEROR]Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    [BCEROR]Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+
+    Create product structure
+    /bin/mkdir -p /Users/blah/Runner.app
+
+    Clean.Remove clean /Users/blah/Runner.app.dSYM
+        builtin-rm -rf /Users/blah/Runner.app.dSYM
+
+    Clean.Remove clean /Users/blah/Runner.app
+        builtin-rm -rf /Users/blah/Runner.app
+
+    Clean.Remove clean /Users/blah/Runner-dfvicjniknvzghgwsthwtgcjhtsk/Build/Intermediates/Runner.build/Release-iphoneos/Runner.build
+        builtin-rm -rf /Users/blah/Runner-dfvicjniknvzghgwsthwtgcjhtsk/Build/Intermediates/Runner.build/Release-iphoneos/Runner.build
+
+    ** CLEAN SUCCEEDED **
+
+    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Release ===
+
+    Check dependencies
+    No profiles for 'com.yourcompany.test' were found:  Xcode couldn't find a provisioning profile matching 'com.yourcompany.test'.
+    Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+
+Could not build the precompiled application for the device.
+
+Error launching application on iPhone.''',
+        xcodeBuildExecution: new XcodeBuildExecution(
+          <String>['xcrun', 'xcodebuild', 'blah'],
+          '/blah/blah',
+          buildForPhysicalDevice: true
+        ),
+      );
+
+      await diagnoseXcodeBuildFailure(buildResult, app);
+      expect(
+        testLogger.errorText,
+        contains('No Provisioning Profile was found for your project\'s Bundle Identifier or your device.'),
+      );
+    });
+
+    testUsingContext('No development team shows message', () async {
+      final XcodeBuildResult buildResult = new XcodeBuildResult(
+        success: false,
+        stdout: '''
+Running "flutter packages get" in flutter_gallery...  0.6s
+Launching lib/main.dart on x in release mode...
+Running pod install...                                1.2s
+Running Xcode build...                                1.4s
+Failed to build iOS app
+Error output from Xcode build:
+↳
+    ** BUILD FAILED **
+
+
+    The following build commands failed:
+    	Check dependencies
+    (1 failure)
+Xcode's output:
+↳
+    blah
+
+    === CLEAN TARGET url_launcher OF PROJECT Pods WITH CONFIGURATION Release ===
+
+    Check dependencies
+
+    blah
+
+    === CLEAN TARGET Pods-Runner OF PROJECT Pods WITH CONFIGURATION Release ===
+
+    Check dependencies
+
+    blah
+
+    === CLEAN TARGET Runner OF PROJECT Runner WITH CONFIGURATION Release ===
+
+    Check dependencies
+    [BCEROR]Signing for "Runner" requires a development team. Select a development team in the project editor.
+    [BCEROR]Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    [BCEROR]Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    [BCEROR]Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+
+    blah
+
+    ** CLEAN SUCCEEDED **
+
+    === BUILD TARGET url_launcher OF PROJECT Pods WITH CONFIGURATION Release ===
+
+    Check dependencies
+
+    blah
+
+    === BUILD TARGET Pods-Runner OF PROJECT Pods WITH CONFIGURATION Release ===
+
+    Check dependencies
+
+    blah
+
+    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Release ===
+
+    Check dependencies
+    Signing for "Runner" requires a development team. Select a development team in the project editor.
+    Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+    Code signing is required for product type 'Application' in SDK 'iOS 10.3'
+
+Could not build the precompiled application for the device.''',
+        xcodeBuildExecution: new XcodeBuildExecution(
+          <String>['xcrun', 'xcodebuild', 'blah'],
+          '/blah/blah',
+          buildForPhysicalDevice: true
+        ),
+      );
+
+      await diagnoseXcodeBuildFailure(buildResult, app);
+      expect(
+        testLogger.errorText,
+        contains('Building a deployable iOS app requires a selected Development Team with a Provisioning Profile'),
+      );
+    });
+  });
+}