diff --git a/packages/shorebird_cli/bin/shorebird.dart b/packages/shorebird_cli/bin/shorebird.dart index 9fb82457..4bddcd6f 100644 --- a/packages/shorebird_cli/bin/shorebird.dart +++ b/packages/shorebird_cli/bin/shorebird.dart @@ -10,6 +10,7 @@ import 'package:shorebird_cli/src/cache.dart'; import 'package:shorebird_cli/src/code_push_client_wrapper.dart'; import 'package:shorebird_cli/src/command_runner.dart'; import 'package:shorebird_cli/src/doctor.dart'; +import 'package:shorebird_cli/src/ios_deploy.dart'; import 'package:shorebird_cli/src/java.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/platform.dart'; @@ -30,6 +31,7 @@ Future main(List args) async { codePushClientWrapperRef, doctorRef, engineConfigRef, + iosDeployRef, javaRef, loggerRef, platformRef, diff --git a/packages/shorebird_cli/lib/src/commands/preview_command.dart b/packages/shorebird_cli/lib/src/commands/preview_command.dart index 48cc399c..7a7ef692 100644 --- a/packages/shorebird_cli/lib/src/commands/preview_command.dart +++ b/packages/shorebird_cli/lib/src/commands/preview_command.dart @@ -1,6 +1,8 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:isolate'; +import 'package:archive/archive_io.dart'; import 'package:collection/collection.dart'; import 'package:mason_logger/mason_logger.dart'; import 'package:path/path.dart' as p; @@ -9,6 +11,7 @@ import 'package:shorebird_cli/src/bundletool.dart'; import 'package:shorebird_cli/src/cache.dart'; import 'package:shorebird_cli/src/code_push_client_wrapper.dart'; import 'package:shorebird_cli/src/command.dart'; +import 'package:shorebird_cli/src/ios_deploy.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/shorebird_config_mixin.dart'; import 'package:shorebird_cli/src/shorebird_validation_mixin.dart'; @@ -125,10 +128,11 @@ class PreviewCommand extends ShorebirdCommand Future installAndLaunchAndroid(String appId, Release release) async { const platform = ReleasePlatform.android; - final previewDirectory = cache.getPreviewDirectory(appId); - final aabPath = p.join( - previewDirectory.path, - '${platform}_${release.version}.aab', + final aabPath = getArtifactPath( + appId: appId, + release: release, + platform: platform, + extension: 'aab', ); if (!File(aabPath).existsSync()) { @@ -142,7 +146,7 @@ class PreviewCommand extends ShorebirdCommand platform: platform, ); - await releaseAabArtifact.url.download(aabPath); + await releaseAabArtifact.url.download(outputPath: aabPath); downloadArtifactProgress.complete(); } catch (error) { downloadArtifactProgress.fail('$error'); @@ -160,9 +164,11 @@ class PreviewCommand extends ShorebirdCommand return ExitCode.software.code; } - final apksPath = p.join( - previewDirectory.path, - '${platform}_${release.version}.apks', + final apksPath = getArtifactPath( + appId: appId, + release: release, + platform: platform, + extension: 'apks', ); if (!File(apksPath).existsSync()) { @@ -206,12 +212,63 @@ class PreviewCommand extends ShorebirdCommand } Future installAndLaunchIos(String appId, Release release) async { - return ExitCode.unavailable.code; + const platform = ReleasePlatform.ios; + final runnerPath = getArtifactPath( + appId: appId, + release: release, + platform: platform, + extension: 'app', + ); + + if (!Directory(runnerPath).existsSync()) { + final downloadArtifactProgress = logger.progress('Downloading release'); + try { + final releaseRunnerArtifact = + await codePushClientWrapper.getReleaseArtifact( + appId: appId, + releaseId: release.id, + arch: 'runner', + platform: platform, + ); + + await releaseRunnerArtifact.url.downloadAndExtract( + outputPath: runnerPath, + ); + downloadArtifactProgress.complete(); + } catch (error) { + downloadArtifactProgress.fail('$error'); + return ExitCode.software.code; + } + } + + try { + final deviceId = results['device-id'] as String?; + final exitCode = await iosDeploy.installAndLaunchApp( + bundlePath: runnerPath, + deviceId: deviceId, + ); + return exitCode; + } catch (error) { + return ExitCode.software.code; + } + } + + String getArtifactPath({ + required String appId, + required Release release, + required ReleasePlatform platform, + required String extension, + }) { + final previewDirectory = cache.getPreviewDirectory(appId); + return p.join( + previewDirectory.path, + '${platform.name}_${release.version}.$extension', + ); } } extension on String { - Future download(String path) async { + Future download({required String outputPath}) async { final uri = Uri.parse(this); final client = HttpClient(); final request = await client.getUrl(uri); @@ -219,7 +276,27 @@ extension on String { if (response.statusCode != 200) { throw Exception('Failed to download artifact at $this'); } - final file = File(path)..createSync(recursive: true); + final file = File(outputPath)..createSync(recursive: true); await response.pipe(file.openWrite()); } + + Future downloadAndExtract({required String outputPath}) async { + final uri = Uri.parse(this); + final client = HttpClient(); + final request = await client.getUrl(uri); + final response = await request.close(); + if (response.statusCode != 200) { + throw Exception('Failed to download artifact at $this'); + } + final tempDir = Directory.systemTemp.createTempSync(); + final file = File(p.join(tempDir.path, p.basename(outputPath))) + ..createSync(recursive: true); + await response.pipe(file.openWrite()); + logger.detail('Extracting ${file.path} to $outputPath'); + await Isolate.run(() async { + final inputStream = InputFileStream(file.path); + final archive = ZipDecoder().decodeBuffer(inputStream); + extractArchiveToDisk(archive, outputPath); + }); + } } diff --git a/packages/shorebird_cli/lib/src/ios_deploy.dart b/packages/shorebird_cli/lib/src/ios_deploy.dart index 0908a410..7c60d7af 100644 --- a/packages/shorebird_cli/lib/src/ios_deploy.dart +++ b/packages/shorebird_cli/lib/src/ios_deploy.dart @@ -1,15 +1,35 @@ +import 'dart:async'; +import 'dart:convert'; import 'dart:io'; import 'package:mason_logger/mason_logger.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as p; +import 'package:scoped/scoped.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/process.dart'; import 'package:shorebird_cli/src/shorebird_environment.dart'; +/// A reference to a [IOSDeploy] instance. +final iosDeployRef = create(IOSDeploy.new); + +/// The [IOSDeploy] instance available in the current zone. +IOSDeploy get iosDeploy => read(iosDeployRef); + +/// lldb debugger state. +enum _DebuggerState { + detached, + launching, + attached, +} + /// Wrapper around the `ios-deploy` command cached by the Flutter tool. /// https://github.com/ios-control/ios-deploy class IOSDeploy { + IOSDeploy({ProcessSignal? sigint}) : _sigint = sigint ?? ProcessSignal.sigint; + + final ProcessSignal _sigint; + @visibleForTesting static File get iosDeployExecutable => File( p.join( @@ -24,8 +44,91 @@ class IOSDeploy { static bool get _isInstalled => iosDeployExecutable.existsSync(); - /// Installs the .app file at [bundlePath] to the device identified by - /// [deviceId] and attaches the debugger. + // (lldb) platform select remote-'ios' --sysroot + // This regex is to get the configurable lldb prompt. + // By default this prompt will be "lldb". + static final _lldbPlatformSelect = + RegExp(r"\s*platform select remote-'ios' --sysroot"); + + // (lldb) run + static final _lldbProcessExit = RegExp(r'Process \d* exited with status ='); + + // (lldb) Process 1234 stopped + static final _lldbProcessStopped = RegExp(r'Process \d* stopped'); + + // (lldb) Process 1234 detached + static final _lldbProcessDetached = RegExp(r'Process \d* detached'); + + // (lldb) Process 1234 resuming + static final _lldbProcessResuming = RegExp(r'Process \d+ resuming'); + + // Send signal to stop (pause) the app. Used before a backtrace dump. + static const String _signalStop = 'process signal SIGSTOP'; + + // Print backtrace for all threads while app is stopped. + static const String _backTraceAll = 'thread backtrace all'; + + // No provision profile errors. + static const noProvisioningProfileErrorOne = 'Error 0xe8008015'; + static const noProvisioningProfileErrorTwo = 'Error 0xe8000067'; + + // Device locked errors. + static const deviceLockedError = 'e80000e2'; + static const deviceLockedErrorMessage = + 'the device was not, or could not be, unlocked'; + + // Unknown launch error. + static const unknownAppLaunchError = 'Error 0xe8000022'; + + // Message when there is an unknown error. + static const unknownErrorFixInstructions = ''' +═══════════════════════════════════════════════════════════════════════════════════ +Error launching app. Try launching from within Xcode via: + open ios/Runner.xcworkspace + +Your Xcode version may be too old for your iOS version. +═══════════════════════════════════════════════════════════════════════════════════'''; + + // Message when the device is locked. + static const deviceLockedFixInstructions = ''' +═══════════════════════════════════════════════════════════════════════════════════ +Your device is locked. Unlock your device first before running. +═══════════════════════════════════════════════════════════════════════════════════'''; + + // Message when there is no development team selected. + static const developmentTeamFixInstructions = ''' + 1- Open the Flutter project's Xcode target with + open ios/Runner.xcworkspace + 2- Select the 'Runner' project in the navigator then the 'Runner' target + in the project settings + 3- Make sure a 'Development Team' is selected under Signing & Capabilities > Team.\u0020 + You may need to: + - Log in with your Apple ID in Xcode first + - Ensure you have a valid unique Bundle ID + - Register your device with your Apple Developer Account + - Let Xcode automatically provision a profile for your app + 4- Build or run your project again'''; + + /// Message when there is no provisioning profile. + static const noProvisioningProfileInstructions = ''' +════════════════════════════════════════════════════════════════════════════════ +No Provisioning Profile was found for your project's Bundle Identifier or your\u0020 +device. You can create a new Provisioning Profile for your project in Xcode for\u0020 +your team by: +$developmentTeamFixInstructions + +It's also possible that a previously installed app with the same Bundle\u0020 +Identifier was signed with a different certificate. + +For more information, please visit: + https://flutter.dev/docs/get-started/install/macos#deploy-to-ios-devices + +Or run on an iOS simulator without code signing +════════════════════════════════════════════════════════════════════════════════'''; + + /// Installs the .app file at [bundlePath] + /// to the device identified by [deviceId] and attaches the debugger. + /// Returns the process exit code. /// /// Uses ios-deploy and returns the exit code. /// `ios-deploy --id [deviceId] --debug --bundle [bundlePath]` @@ -33,16 +136,161 @@ class IOSDeploy { required String bundlePath, String? deviceId, }) async { - final result = await process.run( - iosDeployExecutable.path, - [ - '--debug', - if (deviceId != null) ...['--id', deviceId], - '--bundle', - bundlePath, - ], - ); - return result.exitCode; + // Ensure ios-deploy executable is installed. + await installIfNeeded(); + + var debuggerState = _DebuggerState.detached; + + // (lldb) run + var lldbRun = RegExp(r'\(lldb\)\s*run'); + + final launchProgress = logger.progress('Starting app'); + late final Process launchProcess; + + // If the user presses Ctrl-C, kill the ios-deploy process. + _sigint.watch().listen((signal) { + // If the debugger is attached, send the signal to the app process. + if (debuggerState.isAttached) launchProcess.stdin.writeln(_signalStop); + launchProcess.kill(); + }); + + try { + launchProcess = await process.start( + iosDeployExecutable.path, + [ + '--debug', + if (deviceId != null) ...['--id', deviceId], + '--bundle', + bundlePath, + ], + ); + + void detach() { + if (debuggerState.isNotAttached) return; + launchProcess.stdin.writeln('process detach'); + } + + bool kill() => launchProcess.kill(); + + String? previousLine; + + void onStdout(String line) { + detectFailures(line, logger); + + // Detect the lldb prompt since it can be configured by the end user. + if (_lldbPlatformSelect.hasMatch(line)) { + final platformSelect = _lldbPlatformSelect.stringMatch(line) ?? ''; + if (platformSelect.isEmpty) { + return; + } + final promptEndIndex = line.indexOf(platformSelect); + if (promptEndIndex == -1) { + return; + } + final prompt = line.substring(0, promptEndIndex); + lldbRun = RegExp(RegExp.escape(prompt) + r'\s*run'); + logger.detail(line); + return; + } + + // lldb is launching the debugger. + // Example: (lldb) run + if (lldbRun.hasMatch(line)) { + logger.detail(line); + debuggerState = _DebuggerState.launching; + return; + } + + // The next line after "run" must either be "success" + // or attaching the debugger was unsuccessful. + if (debuggerState == _DebuggerState.launching) { + logger.detail(line); + final attachSuccess = line == 'success'; + debuggerState = + attachSuccess ? _DebuggerState.attached : _DebuggerState.detached; + launchProgress.complete( + attachSuccess ? 'Started app' : 'Failed to start app', + ); + return; + } + + // The app has been stopped. + if (line.contains('PROCESS_STOPPED') || + _lldbProcessStopped.hasMatch(line)) { + logger.detail(line); + launchProcess.stdin.writeln(_backTraceAll); + detach(); + return; + } + + // The app exited/crashed. + if (line.contains('PROCESS_EXITED') || + _lldbProcessExit.hasMatch(line)) { + logger.detail(line); + kill(); + return; + } + + // The debugger has detached from the app. + if (_lldbProcessDetached.hasMatch(line)) { + kill(); + return; + } + + // The debugger is resuming. + if (_lldbProcessResuming.hasMatch(line)) { + logger.detail(line); + debuggerState = _DebuggerState.attached; + return; + } + + // Format progress logs for the user while the debugger is attaching. + if (debuggerState != _DebuggerState.attached) { + if (line.contains('Copying') && line.endsWith('to device')) { + final abbreviatedLine = line.replaceFirst('$bundlePath/', ''); + launchProgress.update(abbreviatedLine); + } else if (line.startsWith(RegExp(r'\[\s+\d+\%\]'))) { + launchProgress.update(line); + } else { + logger.detail(line); + } + return; + } + + // Avoid logging empty lines. + if ((previousLine?.isNotEmpty ?? false) && line.isEmpty) return; + + // Output logs after the debugger has attached. + if (debuggerState == _DebuggerState.attached) { + logger.info(line); + } + + previousLine = line; + } + + void onStderr(String line) { + detectFailures(line, logger); + logger.detail(line); + } + + final stdoutSubscription = + launchProcess.stdout.asLines().listen(onStdout); + + final stderrSubscription = + launchProcess.stderr.asLines().listen(onStderr); + + final status = await launchProcess.exitCode; + logger.detail('[ios-deploy] exited with code: $exitCode'); + debuggerState = _DebuggerState.detached; + unawaited(stdoutSubscription.cancel()); + unawaited(stderrSubscription.cancel()); + return status; + } catch (exception, stackTrace) { + logger.detail('[ios-deploy] failed: $exception\n$stackTrace'); + debuggerState = _DebuggerState.detached; + logger.err('[ios-deplay] failed: $exception'); + return ExitCode.software.code; + } } /// Installs ios-deploy if it is not already installed. @@ -67,3 +315,49 @@ class IOSDeploy { progress.complete(); } } + +// Handles interpretting stdout line and logs errors accordingly. +// Always returns the original line. +@visibleForTesting +String detectFailures(String line, Logger logger) { + final isMissingProvisioningProfile = + line.contains(IOSDeploy.noProvisioningProfileErrorOne) || + line.contains(IOSDeploy.noProvisioningProfileErrorTwo); + + // No provisioning profile. + if (isMissingProvisioningProfile) { + logger.err(IOSDeploy.noProvisioningProfileInstructions); + return line; + } + + final isDeviceLocked = line.contains(IOSDeploy.deviceLockedError) || + line.contains(IOSDeploy.deviceLockedErrorMessage); + + if (isDeviceLocked) { + logger.err(IOSDeploy.deviceLockedFixInstructions); + return line; + } + + final isUnknownAppLaunchError = line.contains( + IOSDeploy.unknownAppLaunchError, + ); + + if (isUnknownAppLaunchError) { + logger.err(IOSDeploy.unknownErrorFixInstructions); + return line; + } + + return line; +} + +extension on _DebuggerState { + bool get isAttached => this == _DebuggerState.attached; + bool get isNotAttached => this != _DebuggerState.attached; +} + +extension on Stream> { + Stream asLines() { + return transform(utf8.decoder) + .transform(const LineSplitter()); + } +} diff --git a/packages/shorebird_cli/test/fixtures/ios-deploy/process_detached.txt b/packages/shorebird_cli/test/fixtures/ios-deploy/process_detached.txt new file mode 100644 index 00000000..ca0c016b --- /dev/null +++ b/packages/shorebird_cli/test/fixtures/ios-deploy/process_detached.txt @@ -0,0 +1,168 @@ +[....] Waiting for iOS device to be connected +[....] Using 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone'. +------ Install phase ------ +[ 0%] Found 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB, beginning install +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/com.apple.ZipMetadata.plist to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon60x60@2x.png to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Runner to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/ to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/Info.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Assets.car to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppFrameworkInfo.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/ to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreImage.dylib to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 12%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 13%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 14%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 15%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 16%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 17%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftUIKit.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftMetal.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreFoundation.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/ to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/CodeResources to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/icudtl.dat to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 23%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 24%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 25%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 26%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 27%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 28%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 29%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 30%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 31%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/ to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngine.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterChannels.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterAppDelegate.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterTexture.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlatformViews.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterHeadlessDartRunner.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCodecs.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterViewController.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterMacros.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterBinaryMessenger.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCallbackCache.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/module.modulemap to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Info.plist to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/CodeResources to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/NOTICES.Z to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shorebird.yaml to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/FontManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.bin to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/ to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/MaterialIcons-Regular.otf to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/palettes.json to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/Info.plist to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftQuartzCore.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 46%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 47%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/embedded.mobileprovision to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Info.plist to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/PkgInfo to device +[ 52%] CreatingStagingDirectory +[ 57%] ExtractingPackage +[ 60%] InspectingPackage +[ 65%] PreflightingApplication +[ 70%] VerifyingApplication +[ 75%] CreatingContainer +[ 80%] InstallingApplication +[ 85%] PostflightingApplication +[ 90%] SandboxingApplication +[ 95%] GeneratingApplicationMap +[100%] InstallComplete +[100%] Installed package /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app +------ Debug phase ------ +Starting debug of 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB... +[ 0%] Looking up developer disk image +[ 95%] Developer disk image mounted successfully +Symbol Path: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols +[100%] Connecting to remote debug server +------------------------- +(lldb) command source -s 0 '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25' +Executing commands in '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25'. +(lldb) platform select remote-'ios' --sysroot '/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols' + Platform: remote-ios + Connected: no + Sysroot: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols + SDK Path: "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols" +(lldb) target create "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app" +Current executable set to '/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app' (arm64). +(lldb) script fruitstrap_device_app="/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app" +(lldb) script fruitstrap_connect_url="connect://127.0.0.1:62320" +(lldb) script fruitstrap_output_path="" +(lldb) script fruitstrap_error_path="" +(lldb) target modules search-paths add /usr "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/usr" /System "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/System" "/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" "/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" /Developer "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/Developer" +(lldb) command script import "/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.py" +(lldb) command script add -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.connect_command connect +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.run_command run +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.autoexit_command autoexit +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.safequit_command safequit +(lldb) connect +(lldb) run +success +Process 4298231 detached \ No newline at end of file diff --git a/packages/shorebird_cli/test/fixtures/ios-deploy/process_exited.txt b/packages/shorebird_cli/test/fixtures/ios-deploy/process_exited.txt new file mode 100644 index 00000000..afde1e37 --- /dev/null +++ b/packages/shorebird_cli/test/fixtures/ios-deploy/process_exited.txt @@ -0,0 +1,168 @@ +[....] Waiting for iOS device to be connected +[....] Using 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone'. +------ Install phase ------ +[ 0%] Found 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB, beginning install +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/com.apple.ZipMetadata.plist to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon60x60@2x.png to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Runner to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/ to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/Info.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Assets.car to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppFrameworkInfo.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/ to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreImage.dylib to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 12%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 13%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 14%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 15%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 16%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 17%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftUIKit.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftMetal.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreFoundation.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/ to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/CodeResources to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/icudtl.dat to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 23%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 24%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 25%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 26%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 27%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 28%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 29%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 30%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 31%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/ to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngine.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterChannels.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterAppDelegate.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterTexture.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlatformViews.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterHeadlessDartRunner.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCodecs.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterViewController.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterMacros.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterBinaryMessenger.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCallbackCache.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/module.modulemap to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Info.plist to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/CodeResources to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/NOTICES.Z to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shorebird.yaml to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/FontManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.bin to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/ to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/MaterialIcons-Regular.otf to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/palettes.json to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/Info.plist to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftQuartzCore.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 46%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 47%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/embedded.mobileprovision to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Info.plist to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/PkgInfo to device +[ 52%] CreatingStagingDirectory +[ 57%] ExtractingPackage +[ 60%] InspectingPackage +[ 65%] PreflightingApplication +[ 70%] VerifyingApplication +[ 75%] CreatingContainer +[ 80%] InstallingApplication +[ 85%] PostflightingApplication +[ 90%] SandboxingApplication +[ 95%] GeneratingApplicationMap +[100%] InstallComplete +[100%] Installed package /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app +------ Debug phase ------ +Starting debug of 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB... +[ 0%] Looking up developer disk image +[ 95%] Developer disk image mounted successfully +Symbol Path: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols +[100%] Connecting to remote debug server +------------------------- +(lldb) command source -s 0 '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25' +Executing commands in '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25'. +(lldb) platform select remote-'ios' --sysroot '/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols' + Platform: remote-ios + Connected: no + Sysroot: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols + SDK Path: "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols" +(lldb) target create "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app" +Current executable set to '/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app' (arm64). +(lldb) script fruitstrap_device_app="/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app" +(lldb) script fruitstrap_connect_url="connect://127.0.0.1:62320" +(lldb) script fruitstrap_output_path="" +(lldb) script fruitstrap_error_path="" +(lldb) target modules search-paths add /usr "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/usr" /System "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/System" "/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" "/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" /Developer "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/Developer" +(lldb) command script import "/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.py" +(lldb) command script add -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.connect_command connect +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.run_command run +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.autoexit_command autoexit +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.safequit_command safequit +(lldb) connect +(lldb) run +success +PROCESS_EXITED \ No newline at end of file diff --git a/packages/shorebird_cli/test/fixtures/ios-deploy/process_resuming.txt b/packages/shorebird_cli/test/fixtures/ios-deploy/process_resuming.txt new file mode 100644 index 00000000..ecb4117f --- /dev/null +++ b/packages/shorebird_cli/test/fixtures/ios-deploy/process_resuming.txt @@ -0,0 +1,168 @@ +[....] Waiting for iOS device to be connected +[....] Using 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone'. +------ Install phase ------ +[ 0%] Found 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB, beginning install +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/com.apple.ZipMetadata.plist to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon60x60@2x.png to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Runner to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/ to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/Info.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Assets.car to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppFrameworkInfo.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/ to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreImage.dylib to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 12%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 13%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 14%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 15%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 16%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 17%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftUIKit.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftMetal.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreFoundation.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/ to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/CodeResources to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/icudtl.dat to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 23%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 24%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 25%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 26%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 27%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 28%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 29%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 30%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 31%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/ to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngine.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterChannels.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterAppDelegate.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterTexture.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlatformViews.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterHeadlessDartRunner.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCodecs.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterViewController.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterMacros.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterBinaryMessenger.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCallbackCache.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/module.modulemap to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Info.plist to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/CodeResources to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/NOTICES.Z to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shorebird.yaml to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/FontManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.bin to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/ to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/MaterialIcons-Regular.otf to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/palettes.json to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/Info.plist to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftQuartzCore.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 46%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 47%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/embedded.mobileprovision to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Info.plist to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/PkgInfo to device +[ 52%] CreatingStagingDirectory +[ 57%] ExtractingPackage +[ 60%] InspectingPackage +[ 65%] PreflightingApplication +[ 70%] VerifyingApplication +[ 75%] CreatingContainer +[ 80%] InstallingApplication +[ 85%] PostflightingApplication +[ 90%] SandboxingApplication +[ 95%] GeneratingApplicationMap +[100%] InstallComplete +[100%] Installed package /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app +------ Debug phase ------ +Starting debug of 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB... +[ 0%] Looking up developer disk image +[ 95%] Developer disk image mounted successfully +Symbol Path: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols +[100%] Connecting to remote debug server +------------------------- +(lldb) command source -s 0 '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25' +Executing commands in '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25'. +(lldb) platform select remote-'ios' --sysroot '/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols' + Platform: remote-ios + Connected: no + Sysroot: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols + SDK Path: "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols" +(lldb) target create "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app" +Current executable set to '/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app' (arm64). +(lldb) script fruitstrap_device_app="/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app" +(lldb) script fruitstrap_connect_url="connect://127.0.0.1:62320" +(lldb) script fruitstrap_output_path="" +(lldb) script fruitstrap_error_path="" +(lldb) target modules search-paths add /usr "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/usr" /System "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/System" "/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" "/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" /Developer "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/Developer" +(lldb) command script import "/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.py" +(lldb) command script add -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.connect_command connect +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.run_command run +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.autoexit_command autoexit +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.safequit_command safequit +Process 42 resuming +(lldb) connect +(lldb) run +success \ No newline at end of file diff --git a/packages/shorebird_cli/test/fixtures/ios-deploy/process_stopped.txt b/packages/shorebird_cli/test/fixtures/ios-deploy/process_stopped.txt new file mode 100644 index 00000000..c3c8f0b2 --- /dev/null +++ b/packages/shorebird_cli/test/fixtures/ios-deploy/process_stopped.txt @@ -0,0 +1,168 @@ +[....] Waiting for iOS device to be connected +[....] Using 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone'. +------ Install phase ------ +[ 0%] Found 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB, beginning install +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/com.apple.ZipMetadata.plist to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon60x60@2x.png to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Runner to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/ to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/Info.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Assets.car to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppFrameworkInfo.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/ to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreImage.dylib to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 12%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 13%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 14%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 15%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 16%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 17%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftUIKit.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftMetal.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreFoundation.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/ to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/CodeResources to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/icudtl.dat to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 23%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 24%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 25%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 26%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 27%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 28%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 29%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 30%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 31%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/ to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngine.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterChannels.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterAppDelegate.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterTexture.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlatformViews.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterHeadlessDartRunner.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCodecs.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterViewController.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterMacros.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterBinaryMessenger.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCallbackCache.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/module.modulemap to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Info.plist to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/CodeResources to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/NOTICES.Z to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shorebird.yaml to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/FontManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.bin to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/ to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/MaterialIcons-Regular.otf to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/palettes.json to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/Info.plist to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftQuartzCore.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 46%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 47%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/embedded.mobileprovision to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Info.plist to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/PkgInfo to device +[ 52%] CreatingStagingDirectory +[ 57%] ExtractingPackage +[ 60%] InspectingPackage +[ 65%] PreflightingApplication +[ 70%] VerifyingApplication +[ 75%] CreatingContainer +[ 80%] InstallingApplication +[ 85%] PostflightingApplication +[ 90%] SandboxingApplication +[ 95%] GeneratingApplicationMap +[100%] InstallComplete +[100%] Installed package /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app +------ Debug phase ------ +Starting debug of 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB... +[ 0%] Looking up developer disk image +[ 95%] Developer disk image mounted successfully +Symbol Path: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols +[100%] Connecting to remote debug server +------------------------- +(lldb) command source -s 0 '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25' +Executing commands in '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25'. +(lldb) platform select remote-'ios' --sysroot '/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols' + Platform: remote-ios + Connected: no + Sysroot: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols + SDK Path: "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols" +(lldb) target create "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app" +Current executable set to '/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app' (arm64). +(lldb) script fruitstrap_device_app="/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app" +(lldb) script fruitstrap_connect_url="connect://127.0.0.1:62320" +(lldb) script fruitstrap_output_path="" +(lldb) script fruitstrap_error_path="" +(lldb) target modules search-paths add /usr "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/usr" /System "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/System" "/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" "/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" /Developer "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/Developer" +(lldb) command script import "/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.py" +(lldb) command script add -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.connect_command connect +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.run_command run +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.autoexit_command autoexit +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.safequit_command safequit +(lldb) connect +(lldb) run +success +PROCESS_STOPPED \ No newline at end of file diff --git a/packages/shorebird_cli/test/fixtures/ios-deploy/success.txt b/packages/shorebird_cli/test/fixtures/ios-deploy/success.txt new file mode 100644 index 00000000..6416c142 --- /dev/null +++ b/packages/shorebird_cli/test/fixtures/ios-deploy/success.txt @@ -0,0 +1,183 @@ +[....] Waiting for iOS device to be connected +[....] Using 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone'. +------ Install phase ------ +[ 0%] Found 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB, beginning install +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/META-INF/com.apple.ZipMetadata.plist to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/ to device +[ 5%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/_CodeSignature/CodeResources to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon60x60@2x.png to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Runner to device +[ 6%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/ to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib to device +[ 7%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/Main.storyboardc/Info.plist to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/ to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib to device +[ 8%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Base.lproj/LaunchScreen.storyboardc/Info.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Assets.car to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppFrameworkInfo.plist to device +[ 9%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/AppIcon76x76@2x~ipad.png to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/ to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreImage.dylib to device +[ 10%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftObjectiveC.dylib to device +[ 11%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 12%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 13%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 14%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 15%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 16%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 17%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCore.dylib to device +[ 18%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreGraphics.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftUIKit.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftMetal.dylib to device +[ 19%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDispatch.dylib to device +[ 20%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftos.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreFoundation.dylib to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/ to device +[ 21%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/ to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/_CodeSignature/CodeResources to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/icudtl.dat to device +[ 22%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 23%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 24%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 25%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 26%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 27%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 28%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 29%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 30%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 31%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Flutter to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/ to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngine.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterChannels.h to device +[ 32%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlugin.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterAppDelegate.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterTexture.h to device +[ 33%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterEngineGroup.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPlatformViews.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterHeadlessDartRunner.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCodecs.h to device +[ 34%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/Flutter.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterViewController.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterMacros.h to device +[ 35%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterDartProject.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterBinaryMessenger.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Headers/FlutterCallbackCache.h to device +[ 36%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/ to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Modules/module.modulemap to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/Flutter.framework/Info.plist to device +[ 37%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/ to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/_CodeSignature/CodeResources to device +[ 38%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/App to device +[ 39%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/ to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/NOTICES.Z to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shorebird.yaml to device +[ 40%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/FontManifest.json to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ to device +[ 41%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/shaders/ink_sparkle.frag to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/AssetManifest.bin to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/ to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/fonts/MaterialIcons-Regular.otf to device +[ 42%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/ to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets/assets/palettes.json to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/App.framework/Info.plist to device +[ 43%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftDarwin.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftQuartzCore.dylib to device +[ 44%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreAudio.dylib to device +[ 45%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 46%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 47%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftFoundation.dylib to device +[ 48%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Frameworks/libswiftCoreMedia.dylib to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/embedded.mobileprovision to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/Info.plist to device +[ 49%] Copying /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app/PkgInfo to device +[ 52%] CreatingStagingDirectory +[ 57%] ExtractingPackage +[ 60%] InspectingPackage +[ 65%] PreflightingApplication +[ 70%] VerifyingApplication +[ 75%] CreatingContainer +[ 80%] InstallingApplication +[ 85%] PostflightingApplication +[ 90%] SandboxingApplication +[ 95%] GeneratingApplicationMap +[100%] InstallComplete +[100%] Installed package /Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app +------ Debug phase ------ +Starting debug of 82b15a4a69ad47c74fe3e71b62a6a6e2842efe25 (D22AP, iPhone X, iphoneos, arm64, 16.3.1, 20D67) a.k.a. 'Felix’s iPhone' connected through USB... +[ 0%] Looking up developer disk image +[ 95%] Developer disk image mounted successfully +Symbol Path: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols +[100%] Connecting to remote debug server +------------------------- +(lldb) command source -s 0 '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25' +Executing commands in '/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap-lldb-prep-cmds-82b15a4a69ad47c74fe3e71b62a6a6e2842efe25'. +(lldb) platform select remote-'ios' --sysroot '/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols' + Platform: remote-ios + Connected: no + Sysroot: /Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols + SDK Path: "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols" +(lldb) target create "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app" +Current executable set to '/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e/ios_1.0.4+7.app' (arm64). +(lldb) script fruitstrap_device_app="/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app" +(lldb) script fruitstrap_connect_url="connect://127.0.0.1:62320" +(lldb) script fruitstrap_output_path="" +(lldb) script fruitstrap_error_path="" +(lldb) target modules search-paths add /usr "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/usr" /System "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/System" "/private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" "/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC" "/Users/felix/Development/github.com/shorebirdtech/_shorebird/shorebird/bin/cache/previews/b3be02c7-97a8-4135-be71-814cc43d096e" /Developer "/Users/felix/Library/Developer/Xcode/iOS DeviceSupport/16.3.1 (20D67)/Symbols/Developer" +(lldb) command script import "/tmp/6A794CCC-74AD-4307-B01C-BC045C28FEB0/fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.py" +(lldb) command script add -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.connect_command connect +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.run_command run +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.autoexit_command autoexit +(lldb) command script add -s asynchronous -f fruitstrap_82b15a4a69ad47c74fe3e71b62a6a6e2842efe25.safequit_command safequit +(lldb) connect +(lldb) run +success +2023-07-26 10:59:09.856463-0500 Runner[980:32510] [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)") + contained no UIScene configuration dictionary (looking for configuration named "(no name)") +2023-07-26 10:59:09.870538-0500 Runner[980:32510] SANITY CHECK: Running precompiled code. +2023-07-26 10:59:09.870893-0500 Runner[980:32510] Using App.framework from /private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app/Frameworks/App.framework +2023-07-26 10:59:09.871314-0500 Runner[980:32510] ASSET PATH /private/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app/Frameworks/App.framework/flutter_assets +[00:00:00.001] (21378f6c0) INFO libapp_path: "/var/containers/Bundle/Application/AA5DF160-3F66-4239-9F6A-88D9D10F18DC/ios_1.0.4+7.app/Frameworks/App.framework/App" +[00:00:00.002] (21378f6c0) INFO Updater configured with: None +No such file or directory (os error 2) +2023-07-26 10:59:09.877841-0500 Runner[980:32510] [VERBOSE0:shorebird.cc(96)] Shorebird updater: no active patch. +2023-07-26 10:59:09.877863-0500 Runner[980:32510] [VERBOSE0:shorebird.cc(99)] Starting Shorebird update +[00:00:00.003] (16dc3f000) INFO 2023-07-26 10:59:09.878262-0500 Runner[980:32510] [VERBOSE0:FlutterViewController.mm(231)] CPU::Id(): simarm64 + No cached state, making empty: No such file or directory (os error 2) +ng patch check request: PatchCheckRequest { app_id: "b3be02c7-97a8-4135-be71-814cc43d096e", channel: "stable", release_version: "1.0.4+7", patch_number: None, platform: "ios", arch: "aarch64" } +2023-07-26 10:59:09.999573-0500 Runner[980:32510] [VERBOSE-2:FlutterDarwinContextMetalImpeller.mm(35)] Using the Impeller rendering backend. +[00:00:00.611] (16dc3f000) INFO Patch check response: PatchCheckResponse { patch_available: false, patch: None } +[00:00:00.611] (16dc3f000) INFO Update thread finished with status: No update \ No newline at end of file diff --git a/packages/shorebird_cli/test/src/commands/preview_command_test.dart b/packages/shorebird_cli/test/src/commands/preview_command_test.dart index 30bb7429..e30ee7b3 100644 --- a/packages/shorebird_cli/test/src/commands/preview_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/preview_command_test.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; +import 'package:archive/archive.dart'; import 'package:args/args.dart'; import 'package:mason_logger/mason_logger.dart'; import 'package:mocktail/mocktail.dart'; @@ -13,6 +14,7 @@ import 'package:shorebird_cli/src/bundletool.dart'; import 'package:shorebird_cli/src/cache.dart'; import 'package:shorebird_cli/src/code_push_client_wrapper.dart'; import 'package:shorebird_cli/src/commands/commands.dart'; +import 'package:shorebird_cli/src/ios_deploy.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; import 'package:test/test.dart'; @@ -48,21 +50,18 @@ class _MockRelease extends Mock implements Release {} class _MockReleaseArtifact extends Mock implements ReleaseArtifact {} +class _MockIOSDeploy extends Mock implements IOSDeploy {} + void main() { group(PreviewCommand, () { const appId = 'test-app-id'; const appDisplayName = 'Test App'; - const platform = ReleasePlatform.android; const releaseVersion = '1.2.3'; const releaseId = 42; - const releaseArtifactUrl = 'https://example.com/release.aab'; - const packageName = 'com.example.app'; - late Adb adb; late AppMetadata app; late ArgResults argResults; late Auth auth; - late Bundletool bundletool; late Cache cache; late CodePushClientWrapper codePushClientWrapper; late HttpClient httpClient; @@ -70,7 +69,6 @@ void main() { late HttpClientResponse httpClientResponse; late Logger logger; late Directory previewDirectory; - late Process process; late Progress progress; late Release release; late ReleaseArtifact releaseArtifact; @@ -81,9 +79,7 @@ void main() { () => runScoped( body, values: { - adbRef.overrideWith(() => adb), authRef.overrideWith(() => auth), - bundletoolRef.overrideWith(() => bundletool), cacheRef.overrideWith(() => cache), codePushClientWrapperRef.overrideWith(() => codePushClientWrapper), loggerRef.overrideWith(() => logger), @@ -93,16 +89,6 @@ void main() { ); } - String aabPath() => p.join( - previewDirectory.path, - '${platform}_$releaseVersion.aab', - ); - - String apksPath() => p.join( - previewDirectory.path, - '${platform}_$releaseVersion.apks', - ); - setUpAll(() { registerFallbackValue(ReleasePlatform.android); registerFallbackValue(StreamController>()); @@ -110,11 +96,9 @@ void main() { }); setUp(() { - adb = _MockAdb(); app = _MockAppMetadata(); argResults = _MockArgResults(); auth = _MockAuth(); - bundletool = _MockBundletool(); cache = _MockCache(); codePushClientWrapper = _MockCodePushClientWrapper(); httpClient = _MockHttpClient(); @@ -122,7 +106,6 @@ void main() { httpClientResponse = _MockHttpClientResponse(); logger = _MockLogger(); previewDirectory = Directory.systemTemp.createTempSync(); - process = _MockProcess(); progress = _MockProgress(); release = _MockRelease(); releaseArtifact = _MockReleaseArtifact(); @@ -130,7 +113,6 @@ void main() { when(() => argResults['app-id']).thenReturn(appId); when(() => argResults['release-version']).thenReturn(releaseVersion); - when(() => argResults['platform']).thenReturn(platform.name); when(() => auth.isAuthenticated).thenReturn(true); when(() => cache.getPreviewDirectory(any())).thenReturn(previewDirectory); when( @@ -155,37 +137,7 @@ void main() { ReleasePlatform.android: ReleaseStatus.active, ReleasePlatform.ios: ReleaseStatus.active, }); - when(() => releaseArtifact.url).thenReturn(releaseArtifactUrl); when(() => logger.progress(any())).thenReturn(progress); - when( - () => httpClient.getUrl(any()), - ).thenAnswer((_) async => httpClientRequest); - when( - () => httpClientRequest.close(), - ).thenAnswer((_) async => httpClientResponse); - when(() => httpClientResponse.statusCode).thenReturn(HttpStatus.ok); - when(() => httpClientResponse.pipe(any())).thenAnswer((_) async {}); - when( - () => bundletool.getPackageName(any()), - ).thenAnswer((_) async => packageName); - when( - () => bundletool.buildApks( - bundle: any(named: 'bundle'), - output: any(named: 'output'), - ), - ).thenAnswer((_) async {}); - when( - () => bundletool.installApks(apks: any(named: 'apks')), - ).thenAnswer((_) async {}); - when(() => adb.startApp(any())).thenAnswer((_) async {}); - when( - () => adb.logcat(filter: any(named: 'filter')), - ).thenAnswer((_) async => process); - when( - () => process.exitCode, - ).thenAnswer((_) async => ExitCode.success.code); - when(() => process.stdout).thenAnswer((_) => const Stream.empty()); - when(() => process.stderr).thenAnswer((_) => const Stream.empty()); }); test('returns no user error when not logged in', () async { @@ -208,235 +160,450 @@ void main() { ).called(1); }); - test('exits with code 70 when querying for release artifact fails', - () async { - final exception = Exception('oops'); - when( - () => codePushClientWrapper.getReleaseArtifact( - appId: any(named: 'appId'), - releaseId: any(named: 'releaseId'), - arch: any(named: 'arch'), - platform: any(named: 'platform'), - ), - ).thenThrow(exception); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.software.code)); - verify( - () => codePushClientWrapper.getReleaseArtifact( - appId: appId, - releaseId: releaseId, - arch: 'aab', - platform: platform, - ), - ).called(1); + group('android', () { + const platform = ReleasePlatform.android; + const releaseArtifactUrl = 'https://example.com/release.aab'; + const packageName = 'com.example.app'; + + late Adb adb; + late Bundletool bundletool; + late Process process; + + String aabPath() => p.join( + previewDirectory.path, + '${platform.name}_$releaseVersion.aab', + ); + + String apksPath() => p.join( + previewDirectory.path, + '${platform.name}_$releaseVersion.apks', + ); + + R runWithOverrides(R Function() body) { + return HttpOverrides.runZoned( + () => runScoped( + body, + values: { + adbRef.overrideWith(() => adb), + authRef.overrideWith(() => auth), + bundletoolRef.overrideWith(() => bundletool), + cacheRef.overrideWith(() => cache), + codePushClientWrapperRef + .overrideWith(() => codePushClientWrapper), + loggerRef.overrideWith(() => logger), + }, + ), + createHttpClient: (_) => httpClient, + ); + } + + setUp(() { + adb = _MockAdb(); + bundletool = _MockBundletool(); + process = _MockProcess(); + + when(() => argResults['platform']).thenReturn(platform.name); + when( + () => httpClient.getUrl(any()), + ).thenAnswer((_) async => httpClientRequest); + when( + () => httpClientRequest.close(), + ).thenAnswer((_) async => httpClientResponse); + when(() => httpClientResponse.statusCode).thenReturn(HttpStatus.ok); + when(() => httpClientResponse.pipe(any())).thenAnswer((_) async {}); + when( + () => bundletool.getPackageName(any()), + ).thenAnswer((_) async => packageName); + when( + () => bundletool.buildApks( + bundle: any(named: 'bundle'), + output: any(named: 'output'), + ), + ).thenAnswer((_) async {}); + when( + () => bundletool.installApks(apks: any(named: 'apks')), + ).thenAnswer((_) async {}); + when(() => adb.startApp(any())).thenAnswer((_) async {}); + when( + () => adb.logcat(filter: any(named: 'filter')), + ).thenAnswer((_) async => process); + when( + () => process.exitCode, + ).thenAnswer((_) async => ExitCode.success.code); + when(() => process.stdout).thenAnswer((_) => const Stream.empty()); + when(() => process.stderr).thenAnswer((_) => const Stream.empty()); + when(() => releaseArtifact.url).thenReturn(releaseArtifactUrl); + }); + + test('exits with code 70 when querying for release artifact fails', + () async { + final exception = Exception('oops'); + when( + () => codePushClientWrapper.getReleaseArtifact( + appId: any(named: 'appId'), + releaseId: any(named: 'releaseId'), + arch: any(named: 'arch'), + platform: any(named: 'platform'), + ), + ).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify( + () => codePushClientWrapper.getReleaseArtifact( + appId: appId, + releaseId: releaseId, + arch: 'aab', + platform: platform, + ), + ).called(1); + }); + + test('exits with code 70 when downloading release artifact fails', + () async { + final exception = Exception('oops'); + when(() => httpClient.getUrl(any())).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify(() => httpClient.getUrl(Uri.parse(releaseArtifactUrl))) + .called(1); + }); + + test( + 'exits with code 70 when downloading release artifact ' + 'returns non-200 response', () async { + when( + () => httpClientResponse.statusCode, + ).thenReturn(HttpStatus.badRequest); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify(() => httpClientRequest.close()).called(1); + verify(() => httpClientResponse.statusCode).called(1); + }); + + test('exits with code 70 when extracting metadata fails', () async { + final exception = Exception('oops'); + when(() => bundletool.getPackageName(any())).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify(() => bundletool.getPackageName(aabPath())).called(1); + }); + + test('exits with code 70 when building apks fails', () async { + final exception = Exception('oops'); + when( + () => bundletool.buildApks( + bundle: any(named: 'bundle'), + output: any(named: 'output'), + ), + ).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify( + () => bundletool.buildApks(bundle: aabPath(), output: apksPath()), + ).called(1); + }); + + test('exits with code 70 when installing apks fails', () async { + final exception = Exception('oops'); + when( + () => bundletool.installApks(apks: any(named: 'apks')), + ).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify(() => bundletool.installApks(apks: apksPath())).called(1); + }); + + test('exits with code 70 when starting app fails', () async { + final exception = Exception('oops'); + when(() => adb.startApp(any())).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify(() => adb.startApp(packageName)).called(1); + }); + + test('exits with non-zero exit code when logcat process fails', () async { + when(() => process.exitCode).thenAnswer((_) async => 1); + final result = await runWithOverrides(command.run); + expect(result, equals(1)); + verify(() => adb.logcat(filter: 'flutter')).called(1); + }); + + test('pipes stdout output to logger', () async { + final completer = Completer(); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const output = 'hello world'; + when( + () => process.stdout, + ).thenAnswer((_) => Stream.value(utf8.encode(output))); + final result = runWithOverrides(command.run); + completer.complete(0); + await expectLater(await result, equals(ExitCode.success.code)); + verify(() => logger.info(output)).called(1); + }); + + test('pipes stderr output to logger', () async { + final completer = Completer(); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const output = 'hello world'; + when( + () => process.stderr, + ).thenAnswer((_) => Stream.value(utf8.encode(output))); + final result = runWithOverrides(command.run); + completer.complete(0); + await expectLater(await result, equals(ExitCode.success.code)); + verify(() => logger.err(output)).called(1); + }); + + test('queries for apps when app-id is not specified', () async { + when(() => argResults['app-id']).thenReturn(null); + when( + () => logger.chooseOne( + any(), + choices: any(named: 'choices'), + display: any(named: 'display'), + ), + ).thenReturn(app); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.success.code)); + final captured = verify( + () => logger.chooseOne( + any(), + choices: any(named: 'choices'), + display: captureAny(named: 'display'), + ), + ).captured.single as String Function(AppMetadata); + expect(captured(app), equals(app.displayName)); + verify(() => codePushClientWrapper.getApps()).called(1); + }); + + test('prompts for platforms when platform is not specified', () async { + when(() => argResults['platform']).thenReturn(null); + when( + () => logger.chooseOne( + any(), + choices: any(named: 'choices'), + display: any(named: 'display'), + ), + ).thenReturn(platform.name); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.success.code)); + final platforms = verify( + () => logger.chooseOne( + any(), + choices: captureAny(named: 'choices'), + display: any(named: 'display'), + ), + ).captured.single as List; + expect( + platforms, + equals([ + ReleasePlatform.android.name, + ReleasePlatform.ios.name, + ]), + ); + }); + + test('exits early when no apps are found', () async { + when(() => argResults['app-id']).thenReturn(null); + when(() => codePushClientWrapper.getApps()).thenAnswer((_) async => []); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.success.code)); + verifyNever( + () => logger.chooseOne( + any(), + choices: any(named: 'choices'), + display: captureAny(named: 'display'), + ), + ); + verify(() => codePushClientWrapper.getApps()).called(1); + verify(() => logger.info('No apps found')).called(1); + }); + + test('exits early when no releases are found', () async { + when(() => argResults['release-version']).thenReturn(null); + when( + () => codePushClientWrapper.getReleases(appId: any(named: 'appId')), + ).thenAnswer((_) async => []); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.success.code)); + verifyNever( + () => logger.chooseOne( + any(), + choices: any(named: 'choices'), + display: captureAny(named: 'display'), + ), + ); + verify(() => codePushClientWrapper.getReleases(appId: appId)).called(1); + verify(() => logger.info('No releases found')).called(1); + }); + + test( + 'queries for releases when ' + 'release-version is not specified', () async { + when(() => argResults['release-version']).thenReturn(null); + when( + () => logger.chooseOne( + any(), + choices: any(named: 'choices'), + display: any(named: 'display'), + ), + ).thenReturn(release); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.success.code)); + final captured = verify( + () => logger.chooseOne( + any(), + choices: any(named: 'choices'), + display: captureAny(named: 'display'), + ), + ).captured.single as String Function(Release); + expect(captured(release), equals(releaseVersion)); + verify(() => codePushClientWrapper.getReleases(appId: appId)).called(1); + }); }); - test('exits with code 70 when downloading release artifact fails', - () async { - final exception = Exception('oops'); - when(() => httpClient.getUrl(any())).thenThrow(exception); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.software.code)); - verify(() => httpClient.getUrl(Uri.parse(releaseArtifactUrl))).called(1); - }); + group('ios', () { + const releaseArtifactUrl = 'https://example.com/runner.app'; + const platform = ReleasePlatform.ios; + late IOSDeploy iosDeploy; - test( - 'exits with code 70 when downloading release artifact ' - 'returns non-200 response', () async { - when( - () => httpClientResponse.statusCode, - ).thenReturn(HttpStatus.badRequest); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.software.code)); - verify(() => httpClientRequest.close()).called(1); - verify(() => httpClientResponse.statusCode).called(1); - }); + String runnerPath() => p.join( + previewDirectory.path, + '${platform.name}_$releaseVersion.app', + ); - test('exits with code 70 when extracting metadata fails', () async { - final exception = Exception('oops'); - when(() => bundletool.getPackageName(any())).thenThrow(exception); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.software.code)); - verify(() => bundletool.getPackageName(aabPath())).called(1); - }); + R runWithOverrides(R Function() body) { + return HttpOverrides.runZoned( + () => runScoped( + body, + values: { + adbRef.overrideWith(() => adb), + authRef.overrideWith(() => auth), + bundletoolRef.overrideWith(() => bundletool), + cacheRef.overrideWith(() => cache), + codePushClientWrapperRef + .overrideWith(() => codePushClientWrapper), + iosDeployRef.overrideWith(() => iosDeploy), + loggerRef.overrideWith(() => logger), + }, + ), + createHttpClient: (_) => httpClient, + ); + } - test('exits with code 70 when building apks fails', () async { - final exception = Exception('oops'); - when( - () => bundletool.buildApks( - bundle: any(named: 'bundle'), - output: any(named: 'output'), - ), - ).thenThrow(exception); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.software.code)); - verify( - () => bundletool.buildApks(bundle: aabPath(), output: apksPath()), - ).called(1); - }); + setUp(() { + iosDeploy = _MockIOSDeploy(); + when(() => argResults['platform']).thenReturn(platform.name); + when( + () => httpClient.getUrl(any()), + ).thenAnswer((_) async => httpClientRequest); + when( + () => httpClientRequest.close(), + ).thenAnswer((_) async => httpClientResponse); + when(() => httpClientResponse.statusCode).thenReturn(HttpStatus.ok); + when(() => httpClientResponse.pipe(any())) + .thenAnswer((invocation) async { + (invocation.positionalArguments.single as IOSink) + .add(ZipEncoder().encode(Archive())!); + // Wait 1 tick for the content to be written. + await Future.delayed(Duration.zero); + }); + when( + () => iosDeploy.installAndLaunchApp( + bundlePath: any(named: 'bundlePath'), + deviceId: any(named: 'deviceId'), + ), + ).thenAnswer((_) async => ExitCode.success.code); + when(() => releaseArtifact.url).thenReturn(releaseArtifactUrl); + }); - test('exits with code 70 when installing apks fails', () async { - final exception = Exception('oops'); - when( - () => bundletool.installApks(apks: any(named: 'apks')), - ).thenThrow(exception); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.software.code)); - verify(() => bundletool.installApks(apks: apksPath())).called(1); - }); + test('exits with code 70 when querying for release artifact fails', + () async { + final exception = Exception('oops'); + when( + () => codePushClientWrapper.getReleaseArtifact( + appId: any(named: 'appId'), + releaseId: any(named: 'releaseId'), + arch: any(named: 'arch'), + platform: any(named: 'platform'), + ), + ).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify( + () => codePushClientWrapper.getReleaseArtifact( + appId: appId, + releaseId: releaseId, + arch: 'runner', + platform: platform, + ), + ).called(1); + }); - test('exits with code 70 when starting app fails', () async { - final exception = Exception('oops'); - when(() => adb.startApp(any())).thenThrow(exception); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.software.code)); - verify(() => adb.startApp(packageName)).called(1); - }); + test('exits with code 70 when downloading release artifact fails', + () async { + final exception = Exception('oops'); + when(() => httpClient.getUrl(any())).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify( + () => httpClient.getUrl(Uri.parse(releaseArtifactUrl)), + ).called(1); + }); - test('exits with non-zero exit code when logcat process fails', () async { - when(() => process.exitCode).thenAnswer((_) async => 1); - final result = await runWithOverrides(command.run); - expect(result, equals(1)); - verify(() => adb.logcat(filter: 'flutter')).called(1); - }); + test( + 'exits with code 70 when downloading release artifact ' + 'returns non-200 response', () async { + when( + () => httpClientResponse.statusCode, + ).thenReturn(HttpStatus.badRequest); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify(() => httpClientRequest.close()).called(1); + verify(() => httpClientResponse.statusCode).called(1); + }); - test('pipes stdout output to logger', () async { - final completer = Completer(); - when(() => process.exitCode).thenAnswer((_) => completer.future); - const output = 'hello world'; - when( - () => process.stdout, - ).thenAnswer((_) => Stream.value(utf8.encode(output))); - final result = runWithOverrides(command.run); - completer.complete(0); - await expectLater(await result, equals(ExitCode.success.code)); - verify(() => logger.info(output)).called(1); - }); + test( + 'exits with code 70 when extracting ' + 'release artifact fails', () async { + when( + () => httpClientResponse.pipe(any()), + ).thenThrow(Exception()); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify(() => httpClientRequest.close()).called(1); + verify(() => httpClientResponse.statusCode).called(1); + verify(() => httpClientResponse.pipe(any())).called(1); + }); - test('pipes stderr output to logger', () async { - final completer = Completer(); - when(() => process.exitCode).thenAnswer((_) => completer.future); - const output = 'hello world'; - when( - () => process.stderr, - ).thenAnswer((_) => Stream.value(utf8.encode(output))); - final result = runWithOverrides(command.run); - completer.complete(0); - await expectLater(await result, equals(ExitCode.success.code)); - verify(() => logger.err(output)).called(1); - }); + test('exits with code 70 when install/launch throws', () async { + final exception = Exception('oops'); + when( + () => iosDeploy.installAndLaunchApp( + bundlePath: any(named: 'bundlePath'), + deviceId: any(named: 'deviceId'), + ), + ).thenThrow(exception); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.software.code)); + verify( + () => iosDeploy.installAndLaunchApp(bundlePath: runnerPath()), + ).called(1); + }); - test('queries for apps when app-id is not specified', () async { - when(() => argResults['app-id']).thenReturn(null); - when( - () => logger.chooseOne( - any(), - choices: any(named: 'choices'), - display: any(named: 'display'), - ), - ).thenReturn(app); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.success.code)); - final captured = verify( - () => logger.chooseOne( - any(), - choices: any(named: 'choices'), - display: captureAny(named: 'display'), - ), - ).captured.single as String Function(AppMetadata); - expect(captured(app), equals(app.displayName)); - verify(() => codePushClientWrapper.getApps()).called(1); - }); - - test('prompts for platforms when platform is not specified', () async { - when(() => argResults['platform']).thenReturn(null); - when( - () => logger.chooseOne( - any(), - choices: any(named: 'choices'), - display: any(named: 'display'), - ), - ).thenReturn(platform.name); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.success.code)); - final platforms = verify( - () => logger.chooseOne( - any(), - choices: captureAny(named: 'choices'), - display: any(named: 'display'), - ), - ).captured.single as List; - expect( - platforms, - equals([ - ReleasePlatform.android.name, - ReleasePlatform.ios.name, - ]), - ); - }); - - test('exits with unavailable when platform is ios', () async { - when(() => argResults['platform']).thenReturn(ReleasePlatform.ios.name); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.unavailable.code)); - }); - - test('exits early when no apps are found', () async { - when(() => argResults['app-id']).thenReturn(null); - when(() => codePushClientWrapper.getApps()).thenAnswer((_) async => []); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.success.code)); - verifyNever( - () => logger.chooseOne( - any(), - choices: any(named: 'choices'), - display: captureAny(named: 'display'), - ), - ); - verify(() => codePushClientWrapper.getApps()).called(1); - verify(() => logger.info('No apps found')).called(1); - }); - - test('exits early when no releases are found', () async { - when(() => argResults['release-version']).thenReturn(null); - when( - () => codePushClientWrapper.getReleases(appId: any(named: 'appId')), - ).thenAnswer((_) async => []); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.success.code)); - verifyNever( - () => logger.chooseOne( - any(), - choices: any(named: 'choices'), - display: captureAny(named: 'display'), - ), - ); - verify(() => codePushClientWrapper.getReleases(appId: appId)).called(1); - verify(() => logger.info('No releases found')).called(1); - }); - - test( - 'queries for releases when ' - 'release-version is not specified', () async { - when(() => argResults['release-version']).thenReturn(null); - when( - () => logger.chooseOne( - any(), - choices: any(named: 'choices'), - display: any(named: 'display'), - ), - ).thenReturn(release); - final result = await runWithOverrides(command.run); - expect(result, equals(ExitCode.success.code)); - final captured = verify( - () => logger.chooseOne( - any(), - choices: any(named: 'choices'), - display: captureAny(named: 'display'), - ), - ).captured.single as String Function(Release); - expect(captured(release), equals(releaseVersion)); - verify(() => codePushClientWrapper.getReleases(appId: appId)).called(1); + test('exits with code 0 when install/launch succeeds', () async { + when( + () => iosDeploy.installAndLaunchApp( + bundlePath: any(named: 'bundlePath'), + deviceId: any(named: 'deviceId'), + ), + ).thenAnswer((_) async => ExitCode.success.code); + final result = await runWithOverrides(command.run); + expect(result, equals(ExitCode.success.code)); + verify( + () => iosDeploy.installAndLaunchApp(bundlePath: runnerPath()), + ).called(1); + }); }); }); } diff --git a/packages/shorebird_cli/test/src/ios_deploy_test.dart b/packages/shorebird_cli/test/src/ios_deploy_test.dart index 559742de..aee941b4 100644 --- a/packages/shorebird_cli/test/src/ios_deploy_test.dart +++ b/packages/shorebird_cli/test/src/ios_deploy_test.dart @@ -1,3 +1,5 @@ +import 'dart:async'; +import 'dart:convert'; import 'dart:io' hide Platform; import 'package:mason_logger/mason_logger.dart'; @@ -19,12 +21,20 @@ class _MockProgress extends Mock implements Progress {} class _MockShorebirdProcess extends Mock implements ShorebirdProcess {} +class _MockProcess extends Mock implements Process {} + +class _MockIOSink extends Mock implements IOSink {} + +class _MockProcessSignal extends Mock implements ProcessSignal {} + void main() { group(IOSDeploy, () { late Logger logger; late Platform platform; late Progress progress; - late ShorebirdProcess process; + late ShorebirdProcess shorebirdProcess; + late Process process; + late IOSink ioSink; late IOSDeploy iosDeploy; R runWithOverrides(R Function() body) { @@ -33,7 +43,7 @@ void main() { values: { loggerRef.overrideWith(() => logger), platformRef.overrideWith(() => platform), - processRef.overrideWith(() => process), + processRef.overrideWith(() => shorebirdProcess), }, ); } @@ -41,8 +51,10 @@ void main() { setUp(() { logger = _MockLogger(); platform = _MockPlatform(); - process = _MockShorebirdProcess(); + shorebirdProcess = _MockShorebirdProcess(); + process = _MockProcess(); progress = _MockProgress(); + ioSink = _MockIOSink(); iosDeploy = IOSDeploy(); final tempDir = Directory.systemTemp.createTempSync(); @@ -51,31 +63,41 @@ void main() { p.join(tempDir.path, 'bin', 'cache', 'shorebird.snapshot'), )..create(recursive: true); when(() => platform.script).thenReturn(shorebirdScriptFile.uri); - when(() => logger.progress(any())).thenReturn(progress); + when( + () => shorebirdProcess.start(any(), any()), + ).thenAnswer((_) async => process); + when(() => process.stdout).thenAnswer((_) => const Stream.empty()); + when(() => process.stderr).thenAnswer((_) => const Stream.empty()); + when(() => process.stdin).thenReturn(ioSink); + when( + () => process.exitCode, + ).thenAnswer((_) async => ExitCode.success.code); + when(() => process.kill()).thenReturn(true); }); group('installAndLaunchApp', () { - test('executes correct command when deviceId is provided', () async { - const processResult = ShorebirdProcessResult( - exitCode: 0, - stdout: '', - stderr: '', + setUp(() { + runWithOverrides( + () => IOSDeploy.iosDeployExecutable.createSync(recursive: true), ); + }); + + test('executes correct command when deviceId is provided', () async { + when(() => process.stdout).thenAnswer((_) => const Stream.empty()); when( - () => process.run(any(), any()), - ).thenAnswer((_) async => processResult); - const deviceId = 'test-device-id'; + () => shorebirdProcess.start(any(), any()), + ).thenAnswer((_) async => process); const bundlePath = 'test-bundle-path'; - final result = await runWithOverrides( + const deviceId = 'test-device-id'; + await runWithOverrides( () => iosDeploy.installAndLaunchApp( - deviceId: deviceId, bundlePath: bundlePath, + deviceId: deviceId, ), ); - expect(result, equals(processResult.exitCode)); verify( - () => process.run(any(that: endsWith('ios-deploy')), [ + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ '--debug', '--id', deviceId, @@ -86,29 +108,292 @@ void main() { }); test('executes correct command when deviceId is not provided', () async { - const processResult = ShorebirdProcessResult( - exitCode: 0, - stdout: '', - stderr: '', - ); + when(() => process.stdout).thenAnswer((_) => const Stream.empty()); when( - () => process.run(any(), any()), - ).thenAnswer((_) async => processResult); + () => shorebirdProcess.start(any(), any()), + ).thenAnswer((_) async => process); const bundlePath = 'test-bundle-path'; - final result = await runWithOverrides( + await runWithOverrides( () => iosDeploy.installAndLaunchApp( bundlePath: bundlePath, ), ); - expect(result, equals(processResult.exitCode)); verify( - () => process.run(any(that: endsWith('ios-deploy')), [ + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ '--debug', '--bundle', bundlePath, ]), ).called(1); }); + + test('exits with code 70 on process exception', () async { + final exception = Exception('oops'); + when(() => shorebirdProcess.start(any(), any())).thenThrow(exception); + const bundlePath = 'test-bundle-path'; + final exitCode = await runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + expect(exitCode, equals(ExitCode.software.code)); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + verify(() => logger.err('[ios-deplay] failed: $exception')).called(1); + }); + + test('dumps backtrace on process stopped', () async { + final completer = Completer(); + when(() => process.stdout).thenAnswer( + (_) => Stream.value(utf8.encode('PROCESS_STOPPED')), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => ioSink.writeln('thread backtrace all')); + completer.complete(ExitCode.software.code); + await expectLater(exitCode, completion(equals(ExitCode.software.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + + test('detaches on process stopped', () async { + final completer = Completer(); + when(() => process.stdout).thenAnswer( + (_) => + File('test/fixtures/ios-deploy/process_stopped.txt').openRead(), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => ioSink.writeln('thread backtrace all')); + await untilCalled(() => ioSink.writeln('process detach')); + completer.complete(ExitCode.software.code); + await expectLater(exitCode, completion(equals(ExitCode.software.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + + test('kills process on process exited', () async { + final completer = Completer(); + when(() => process.stdout).thenAnswer( + (_) => File('test/fixtures/ios-deploy/process_exited.txt').openRead(), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => process.kill()); + completer.complete(ExitCode.software.code); + await expectLater(exitCode, completion(equals(ExitCode.software.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + + test('kills process on process detached', () async { + final completer = Completer(); + when(() => process.stdout).thenAnswer( + (_) => + File('test/fixtures/ios-deploy/process_detached.txt').openRead(), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => process.kill()); + completer.complete(ExitCode.software.code); + await expectLater(exitCode, completion(equals(ExitCode.software.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + + test('handles process resuming', () async { + final completer = Completer(); + when(() => process.stdout).thenAnswer( + (_) => + File('test/fixtures/ios-deploy/process_resuming.txt').openRead(), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => progress.complete('Started app')); + completer.complete(ExitCode.success.code); + await expectLater(exitCode, completion(equals(ExitCode.success.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + + test('kills process on sigint', () async { + final signal = _MockProcessSignal(); + final controller = StreamController(); + iosDeploy = IOSDeploy(sigint: signal); + when(signal.watch).thenAnswer((_) => controller.stream); + final completer = Completer(); + when(() => process.stdout).thenAnswer( + (_) => File('test/fixtures/ios-deploy/success.txt').openRead(), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => progress.complete('Started app')); + controller.add(ProcessSignal.sigint); + await untilCalled(() => process.kill()); + completer.complete(ExitCode.success.code); + await expectLater(exitCode, completion(equals(ExitCode.success.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + + test('handles process stderr', () async { + const message = 'test-stderr'; + final completer = Completer(); + when(() => process.stderr).thenAnswer( + (_) => Stream.value(utf8.encode(message)), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => logger.detail(message)); + completer.complete(ExitCode.software.code); + await expectLater(exitCode, completion(equals(ExitCode.software.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + + test('exits with code 0 on success', () async { + final completer = Completer(); + when(() => process.stdout).thenAnswer( + (_) => File('test/fixtures/ios-deploy/success.txt').openRead(), + ); + when(() => process.exitCode).thenAnswer((_) => completer.future); + const bundlePath = 'test-bundle-path'; + final exitCode = runWithOverrides( + () => iosDeploy.installAndLaunchApp( + bundlePath: bundlePath, + ), + ); + await untilCalled(() => progress.complete('Started app')); + completer.complete(ExitCode.success.code); + await expectLater(exitCode, completion(equals(ExitCode.success.code))); + verify( + () => shorebirdProcess.start(any(that: endsWith('ios-deploy')), [ + '--debug', + '--bundle', + bundlePath, + ]), + ).called(1); + }); + }); + + group('detectFailures', () { + test('handles no provisioning profile error (1)', () { + const line = IOSDeploy.noProvisioningProfileErrorOne; + final result = detectFailures(line, logger); + expect(result, equals(line)); + verify( + () => logger.err(IOSDeploy.noProvisioningProfileInstructions), + ).called(1); + }); + + test('handles no provisioning profile error (2)', () { + const line = IOSDeploy.noProvisioningProfileErrorTwo; + final result = detectFailures(line, logger); + expect(result, equals(line)); + verify( + () => logger.err(IOSDeploy.noProvisioningProfileInstructions), + ).called(1); + }); + + test('handles device locked', () { + const line = IOSDeploy.deviceLockedError; + final result = detectFailures(line, logger); + expect(result, equals(line)); + verify( + () => logger.err(IOSDeploy.deviceLockedFixInstructions), + ).called(1); + }); + + test('handles unknown error', () { + const line = IOSDeploy.unknownAppLaunchError; + final result = detectFailures(line, logger); + expect(result, equals(line)); + verify( + () => logger.err(IOSDeploy.unknownErrorFixInstructions), + ).called(1); + }); + + test('always returns original line', () { + const line = 'test-line'; + final result = detectFailures(line, logger); + expect(result, equals(line)); + verifyNever(() => logger.err(any())); + }); }); group('installIfNeeded', () { @@ -121,11 +406,11 @@ void main() { completes, ); - verifyNever(() => process.run(any(), any())); + verifyNever(() => shorebirdProcess.run(any(), any())); }); test('throws ProcessException if flutter precache fails', () async { - when(() => process.run(any(), any())).thenAnswer( + when(() => shorebirdProcess.run(any(), any())).thenAnswer( (_) async => ShorebirdProcessResult( exitCode: ExitCode.software.code, stdout: null, @@ -144,7 +429,7 @@ void main() { test( '''throws Exception if ios-deploy is not installed after running flutter precache''', () async { - when(() => process.run(any(), any())).thenAnswer( + when(() => shorebirdProcess.run(any(), any())).thenAnswer( (_) async => ShorebirdProcessResult( exitCode: ExitCode.success.code, stdout: null, @@ -163,7 +448,7 @@ void main() { test( '''completes successfully if ios-deploy is installed after running flutter precache''', () async { - when(() => process.run(any(), any())).thenAnswer( + when(() => shorebirdProcess.run(any(), any())).thenAnswer( (_) async { runWithOverrides( () => IOSDeploy.iosDeployExecutable.createSync(recursive: true), @@ -180,7 +465,9 @@ void main() { completes, ); - verify(() => process.run('flutter', ['precache', '--ios'])).called(1); + verify( + () => shorebirdProcess.run('flutter', ['precache', '--ios']), + ).called(1); verify(progress.complete).called(1); }); });