anchor.diff:  
     @override
     Future<bool> startApp(ApplicationPackage app) async {
  -    if (!isAppInstalled(app)) {
  -      return false;
  -    }
  -    try {
  -      if (id == defaultDeviceID) {
  -        runCheckedSync(
  -            [xcrunPath, 'simctl', 'launch', 'booted', app.id]);
  -      } else {
  -        runCheckedSync([xcrunPath, 'simctl', 'launch', id, app.id]);
  -      }
  -      return true;
  -    } catch (e) {
  -      return false;
  -    }
  +    logging.fine('Building ${app.name} for ${id}');
  +
  +    // Step 1: Build the Xcode project
  +    bool buildResult = await _buildIOSXcodeProject(app, false);
  +    if (!buildResult) {
  +      logging.severe('Could not build the application for the simulator');
  +      return false;
  +    }
  +
  +    // Step 2: Assert that the Xcode project was successfully built
  +    Directory bundle = new Directory(path.join(app.localPath, 'build', 'Release-iphonesimulator', 'Runner.app'));
  +    bool bundleExists = await bundle.exists();
  +    if (!bundleExists) {
  +      logging.severe('Could not find the built application bundle at ${bundle.path}');
  +      return false;
  +    }
  +
  +    // Step 3: Install the updated bundle to the simulator
  +    int installResult = await runCommandAndStreamOutput([
  +      xcrunPath,
  +      'simctl',
  +      'install',
  +      id == defaultDeviceID ? 'booted' : id,
  +      path.absolute(bundle.path)
  +    ]);
  +
  +    if (installResult != 0) {
  +      logging.severe('Could not install the application bundle on the simulator');
  +      return false;
  +    }
  +
  +    // Step 4: Launch the updated application in the simulator
  +    int launchResult = await runCommandAndStreamOutput([
  +      xcrunPath,
  +      'simctl',
  +      'launch',
  +      id == defaultDeviceID ? 'booted' : id,
  +      app.id
  +    ]);
  +
  +    if (launchResult != 0) {
  +      logging.severe('Could not launch the freshly installed application on the simulator');
  +      return false;
  +    }
  +
  +    logging.fine('Successfully started ${app.name} on $id');
  +    return true;
     }
   
     @override
  
positive.code:     return new DeviceStore(android: android, iOS: iOS, iOSSimulator: iOSSimulator);
    }
  }
  
negative.code:           break;
          case TargetPlatform.iOSSimulator:
            assert(iOSSimulator == null);
            iOSSimulator = _deviceForConfig(config, IOSSimulator.getAttachedDevices());
            if (iOSSimulator == null) {
              // Creates a simulator with the default identifier
              iOSSimulator = new IOSSimulator();
            }
            break;
          case TargetPlatform.mac:
          case TargetPlatform.linux:
  