@@ -520,6 +520,81 @@ void main() {
520520 Xcode : () => xcode,
521521 });
522522
523+ group ('with flavor' , () {
524+ setUp (() {
525+ projectInfo = XcodeProjectInfo (
526+ < String > ['Runner' ],
527+ < String > ['Debug' , 'Release' , 'Debug-free' , 'Release-free' ],
528+ < String > ['Runner' , 'free' ],
529+ logger,
530+ );
531+ fakeXcodeProjectInterpreter = FakeXcodeProjectInterpreter (projectInfo: projectInfo);
532+ xcode = Xcode .test (processManager: FakeProcessManager .any (), xcodeProjectInterpreter: fakeXcodeProjectInterpreter);
533+ });
534+
535+ testUsingContext ('succeeds' , () async {
536+ final IOSDevice iosDevice = setUpIOSDevice (
537+ fileSystem: fileSystem,
538+ processManager: FakeProcessManager .any (),
539+ logger: logger,
540+ artifacts: artifacts,
541+ isCoreDevice: true ,
542+ coreDeviceControl: FakeIOSCoreDeviceControl (),
543+ xcodeDebug: FakeXcodeDebug (
544+ expectedProject: XcodeDebugProject (
545+ scheme: 'free' ,
546+ xcodeWorkspace: fileSystem.directory ('/ios/Runner.xcworkspace' ),
547+ xcodeProject: fileSystem.directory ('/ios/Runner.xcodeproj' ),
548+ hostAppProjectName: 'Runner' ,
549+ ),
550+ expectedDeviceId: '123' ,
551+ expectedLaunchArguments: < String > ['--enable-dart-profiling' ],
552+ expectedSchemeFilePath: '/ios/Runner.xcodeproj/xcshareddata/xcschemes/free.xcscheme' ,
553+ ),
554+ );
555+
556+ setUpIOSProject (fileSystem);
557+ final FlutterProject flutterProject = FlutterProject .fromDirectory (fileSystem.currentDirectory);
558+ final BuildableIOSApp buildableIOSApp = BuildableIOSApp (flutterProject.ios, 'flutter' , 'My Super Awesome App.app' );
559+ fileSystem.directory ('build/ios/Release-iphoneos/My Super Awesome App.app' ).createSync (recursive: true );
560+
561+ final FakeDeviceLogReader deviceLogReader = FakeDeviceLogReader ();
562+
563+ iosDevice.portForwarder = const NoOpDevicePortForwarder ();
564+ iosDevice.setLogReader (buildableIOSApp, deviceLogReader);
565+
566+ // Start writing messages to the log reader.
567+ Timer .run (() {
568+ deviceLogReader.addLine ('Foo' );
569+ deviceLogReader.addLine ('The Dart VM service is listening on http://127.0.0.1:456' );
570+ });
571+
572+ final LaunchResult launchResult = await iosDevice.startApp (
573+ buildableIOSApp,
574+ debuggingOptions: DebuggingOptions .enabled (const BuildInfo (
575+ BuildMode .debug,
576+ 'free' ,
577+ buildName: '1.2.3' ,
578+ buildNumber: '4' ,
579+ treeShakeIcons: false ,
580+ )),
581+ platformArgs: < String , Object > {},
582+ );
583+
584+ expect (logger.errorText, isEmpty);
585+ expect (fileSystem.directory ('build/ios/iphoneos' ), exists);
586+ expect (launchResult.started, true );
587+ expect (processManager, hasNoRemainingExpectations);
588+ }, overrides: < Type , Generator > {
589+ ProcessManager : () => FakeProcessManager .any (),
590+ FileSystem : () => fileSystem,
591+ Logger : () => logger,
592+ Platform : () => macPlatform,
593+ XcodeProjectInterpreter : () => fakeXcodeProjectInterpreter,
594+ Xcode : () => xcode,
595+ });
596+ });
597+
523598 testUsingContext ('updates Generated.xcconfig before and after launch' , () async {
524599 final Completer <void > debugStartedCompleter = Completer <void >();
525600 final Completer <void > debugEndedCompleter = Completer <void >();
@@ -829,6 +904,7 @@ class FakeXcodeDebug extends Fake implements XcodeDebug {
829904 this .expectedProject,
830905 this .expectedDeviceId,
831906 this .expectedLaunchArguments,
907+ this .expectedSchemeFilePath = '/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme' ,
832908 this .debugStartedCompleter,
833909 this .debugEndedCompleter,
834910 });
@@ -840,6 +916,7 @@ class FakeXcodeDebug extends Fake implements XcodeDebug {
840916 final List <String >? expectedLaunchArguments;
841917 final Completer <void >? debugStartedCompleter;
842918 final Completer <void >? debugEndedCompleter;
919+ final String expectedSchemeFilePath;
843920
844921 @override
845922 Future <bool > debugApp ({
@@ -863,6 +940,11 @@ class FakeXcodeDebug extends Fake implements XcodeDebug {
863940 await debugEndedCompleter? .future;
864941 return debugSuccess;
865942 }
943+
944+ @override
945+ void ensureXcodeDebuggerLaunchAction (File schemeFile) {
946+ expect (schemeFile.path, expectedSchemeFilePath);
947+ }
866948}
867949
868950class FakeIOSCoreDeviceControl extends Fake implements IOSCoreDeviceControl {
0 commit comments