Repository: flutter
Issue: ToolExit for missing CFBundleVersion
Labels: c: crash,platform-ios,tool,P2,team-ios,triaged-ios

From crash logging, from a `flutter run` command:

```
ProcessException: Process exited abnormally:
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=22):
Failed to install the requested application
The application's Info.plist does not contain CFBundleVersion.
Ensure your bundle contains a CFBundleVersion.
  Command: /usr/bin/xcrun simctl install [id] /Users/.../build/ios/iphonesimulator/Runner.app
  | at RunResult.throwException | (process.dart:172 )
  | at _DefaultProcessUtils.run | (process.dart:322 )
  | at <asynchronous gap> | (async )
  | at SimControl.install | (simulators.dart:146 )
  | at IOSSimulator._setupUpdatedApplicationBundle | (simulators.dart:452 )
  | at <asynchronous gap> | (async )
  | at IOSSimulator.startApp | (simulators.dart:352 )
  | at FlutterDevice.runHot | (resident_runner.dart:434 )
  | at _asyncThenWrapperHelper.<anonymous closure> | (async_patch.dart:75 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._completeWithValue | (future_impl.dart:526 )
  | at _AsyncAwaitCompleter.complete | (async_patch.dart:34 )
  | at _completeOnAsyncReturn | (async_patch.dart:293 )
  | at ApplicationPackageFactory.getPackageForPlatform | (application_package.dart )
  | at _asyncThenWrapperHelper.<anonymous closure> | (async_patch.dart:75 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._completeWithValue | (future_impl.dart:526 )
  | at _AsyncAwaitCompleter.complete | (async_patch.dart:34 )
  | at _completeOnAsyncReturn | (async_patch.dart:293 )
  | at BuildableIOSApp.fromProject | (application_package.dart )
  | at _asyncThenWrapperHelper.<anonymous closure> | (async_patch.dart:75 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._completeWithValue | (future_impl.dart:526 )
  | at _AsyncAwaitCompleter.complete | (async_patch.dart:34 )
  | at _completeOnAsyncReturn | (async_patch.dart:293 )
  | at IosProject.productBundleIdentifier | (project.dart )
  | at _asyncThenWrapperHelper.<anonymous closure> | (async_patch.dart:75 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._completeWithValue | (future_impl.dart:526 )
  | at _AsyncAwaitCompleter.complete | (async_patch.dart:34 )
  | at _completeOnAsyncReturn | (async_patch.dart:293 )
  | at IosProject.buildSettings | (project.dart )
  | at _asyncThenWrapperHelper.<anonymous closure> | (async_patch.dart:75 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._completeWithValue | (future_impl.dart:526 )
  | at _AsyncAwaitCompleter.complete | (async_patch.dart:34 )
  | at _completeOnAsyncReturn | (async_patch.dart:293 )
  | at XcodeProjectInterpreter.getBuildSettings | (xcodeproj.dart )
  | at _asyncThenWrapperHelper.<anonymous closure> | (async_patch.dart:75 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._completeWithValue | (future_impl.dart:526 )
  | at _AsyncAwaitCompleter.complete | (async_patch.dart:34 )
  | at _completeOnAsyncReturn | (async_patch.dart:293 )
  | at _DefaultProcessUtils.run | (process.dart )
  | at _asyncThenWrapperHelper.<anonymous closure> | (async_patch.dart:75 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._completeWithValue | (future_impl.dart:526 )
  | at Future.wait.<anonymous closure> | (future.dart:400 )
  | at _rootRunUnary | (zone.dart:1134 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _FutureListener.handleValue | (future_impl.dart:140 )
  | at Future._propagateToListeners.handleValueCallback | (future_impl.dart:682 )
  | at Future._propagateToListeners | (future_impl.dart:711 )
  | at Future._complete | (future_impl.dart:516 )
  | at _BufferingStreamSubscription.asFuture.<anonymous closure> | (stream_impl.dart:207 )
  | at _rootRun | (zone.dart:1122 )
  | at _CustomZone.run | (zone.dart:1023 )
  | at _CustomZone.runGuarded | (zone.dart:925 )
  | at _BufferingStreamSubscription._sendDone.sendDone | (stream_impl.dart:392 )
  | at _BufferingStreamSubscription._sendDone | (stream_impl.dart:402 )
  | at _BufferingStreamSubscription._close | (stream_impl.dart:286 )
  | at _SinkTransformerStreamSubscription._close | (stream_transformers.dart:98 )
  | at _EventSinkWrapper.close | (stream_transformers.dart:25 )
  | at _StringAdapterSink.close | (string_conversion.dart:251 )
  | at _Utf8ConversionSink.close | (string_conversion.dart:302 )
  | at _ConverterStreamEventSink.close | (chunked_conversion.dart:82 )
  | at _SinkTransformerStreamSubscription._handleDone | (stream_transformers.dart:143 )
  | at _rootRun | (zone.dart:1122 )
  | at _CustomZone.run | (zone.dart:1023 )
  | at _CustomZone.runGuarded | (zone.dart:925 )
  | at _BufferingStreamSubscription._sendDone.sendDone | (stream_impl.dart:392 )
  | at _BufferingStreamSubscription._sendDone | (stream_impl.dart:402 )
  | at _BufferingStreamSubscription._close | (stream_impl.dart:286 )
  | at _SyncStreamControllerDispatch._sendDone | (stream_controller.dart:781 )
  | at _StreamController._closeUnchecked | (stream_controller.dart:638 )
  | at _StreamController.close | (stream_controller.dart:631 )
  | at _Socket._onData | (socket_patch.dart:1880 )
  | at _rootRunUnary | (zone.dart:1138 )
  | at _CustomZone.runUnary | (zone.dart:1031 )
  | at _CustomZone.runUnaryGuarded | (zone.dart:933 )
  | at _BufferingStreamSubscription._sendData | (stream_impl.dart:339 )
  | at _BufferingStreamSubscription._add | (stream_impl.dart:266 )
  | at _SyncStreamControllerDispatch._sendData | (stream_controller.dart:773 )
  | at _StreamController._add | (stream_controller.dart:649 )
  | at _StreamController.add | (stream_controller.dart:595 )
  | at new _RawSocket.<anonymous closure> | (socket_patch.dart:1422 )
  | at _NativeSocket.issueReadEvent.issue | (socket_patch.dart:912 )
  | at _microtaskLoop | (schedule_microtask.dart:43 )
  | at _startMicrotaskLoop | (schedule_microtask.dart:52 )
  | at _runPendingImmediateCallback | (isolate_patch.dart:118 )
  | at _RawReceivePortImpl._handleMessage | (isolate_patch.dart:175 )
```

/cc @jmagman