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'),
+ );
+ });
+ });
+}