[camera] Update minimum Flutter version to 3.3 and iOS 11 (#3296)

[camera] Update minimum Flutter version to 3.3 and iOS 11
diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md
index fd592e1..2ca8f00 100644
--- a/packages/camera/camera/CHANGELOG.md
+++ b/packages/camera/camera/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.10.3+2
+
+* Updates iOS minimum version in README.
+
 ## 0.10.3+1
 
 * Updates links for the merge of flutter/plugins into flutter/packages.
diff --git a/packages/camera/camera/README.md b/packages/camera/camera/README.md
index bfad30f..87a25ea 100644
--- a/packages/camera/camera/README.md
+++ b/packages/camera/camera/README.md
@@ -6,9 +6,9 @@
 
 A Flutter plugin for iOS, Android and Web allowing access to the device cameras.
 
-|                | Android | iOS      | Web                    |
-|----------------|---------|----------|------------------------|
-| **Support**    | SDK 21+ | iOS 10+* | [See `camera_web `][1] |
+|                | Android | iOS       | Web                    |
+|----------------|---------|-----------|------------------------|
+| **Support**    | SDK 21+ | iOS 11.0+ | [See `camera_web `][1] |
 
 ## Features
 
@@ -23,11 +23,6 @@
 
 ### iOS
 
-\* The camera plugin compiles for any version of iOS, but its functionality
-requires iOS 10 or higher. If compiling for iOS 9, make sure to programmatically
-check the version of iOS running on the device before using any camera plugin features.
-The [device_info_plus](https://pub.dev/packages/device_info_plus) plugin, for example, can be used to check the iOS version.
-
 Add two rows to the `ios/Runner/Info.plist`:
 
 * one with the key `Privacy - Camera Usage Description` and a usage description.
diff --git a/packages/camera/camera/example/ios/Flutter/AppFrameworkInfo.plist b/packages/camera/camera/example/ios/Flutter/AppFrameworkInfo.plist
index 3a9c234..9b41e7d 100644
--- a/packages/camera/camera/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/packages/camera/camera/example/ios/Flutter/AppFrameworkInfo.plist
@@ -25,6 +25,6 @@
     <string>arm64</string>
   </array>
   <key>MinimumOSVersion</key>
-  <string>9.0</string>
+  <string>11.0</string>
 </dict>
 </plist>
diff --git a/packages/camera/camera/example/ios/Podfile b/packages/camera/camera/example/ios/Podfile
index f7d6a5e..d207307 100644
--- a/packages/camera/camera/example/ios/Podfile
+++ b/packages/camera/camera/example/ios/Podfile
@@ -1,5 +1,5 @@
 # Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
+# platform :ios, '11.0'
 
 # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj
index 99433b0..59fa907 100644
--- a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 46;
+	objectVersion = 54;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -212,10 +212,12 @@
 /* Begin PBXShellScriptBuildPhase section */
 		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			inputPaths = (
+				"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
 			);
 			name = "Thin Binary";
 			outputPaths = (
@@ -226,6 +228,7 @@
 		};
 		9740EEB61CF901F6004384FC /* Run Script */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
@@ -343,7 +346,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
@@ -393,7 +396,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
diff --git a/packages/camera/camera/example/ios/Runner/Info.plist b/packages/camera/camera/example/ios/Runner/Info.plist
index ff2e341..bacd9e5 100644
--- a/packages/camera/camera/example/ios/Runner/Info.plist
+++ b/packages/camera/camera/example/ios/Runner/Info.plist
@@ -52,5 +52,9 @@
 	</array>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
+	<key>CADisableMinimumFrameDurationOnPhone</key>
+	<true/>
+	<key>UIApplicationSupportsIndirectInputEvents</key>
+	<true/>
 </dict>
 </plist>
diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml
index 775187b..74ef53c 100644
--- a/packages/camera/camera/pubspec.yaml
+++ b/packages/camera/camera/pubspec.yaml
@@ -4,7 +4,7 @@
   Dart.
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.10.3+1
+version: 0.10.3+2
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md
index f0fc9e8..b230343 100644
--- a/packages/camera/camera_avfoundation/CHANGELOG.md
+++ b/packages/camera/camera_avfoundation/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.9.12
+
+* Updates minimum Flutter version to 3.3 and iOS 11.
+
 ## 0.9.11+1
 
 * Updates links for the merge of flutter/plugins into flutter/packages.
diff --git a/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist b/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist
index 3a9c234..9b41e7d 100644
--- a/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist
@@ -25,6 +25,6 @@
     <string>arm64</string>
   </array>
   <key>MinimumOSVersion</key>
-  <string>9.0</string>
+  <string>11.0</string>
 </dict>
 </plist>
diff --git a/packages/camera/camera_avfoundation/example/ios/Podfile b/packages/camera/camera_avfoundation/example/ios/Podfile
index 5bc7b7e..8af57a7 100644
--- a/packages/camera/camera_avfoundation/example/ios/Podfile
+++ b/packages/camera/camera_avfoundation/example/ios/Podfile
@@ -1,5 +1,5 @@
 # Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
+# platform :ios, '11.0'
 
 # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -31,7 +31,6 @@
   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
 
   target 'RunnerTests' do
-    platform :ios, '9.0'
     inherit! :search_paths
     # Pods for testing
     pod 'OCMock', '~> 3.8.1'
diff --git a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj
index 03c80d7..d70d27f 100644
--- a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 46;
+	objectVersion = 54;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -336,10 +336,12 @@
 /* Begin PBXShellScriptBuildPhase section */
 		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			inputPaths = (
+				"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
 			);
 			name = "Thin Binary";
 			outputPaths = (
@@ -372,6 +374,7 @@
 		};
 		9740EEB61CF901F6004384FC /* Run Script */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
@@ -574,7 +577,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
@@ -624,7 +627,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Info.plist b/packages/camera/camera_avfoundation/example/ios/Runner/Info.plist
index ff2e341..bacd9e5 100644
--- a/packages/camera/camera_avfoundation/example/ios/Runner/Info.plist
+++ b/packages/camera/camera_avfoundation/example/ios/Runner/Info.plist
@@ -52,5 +52,9 @@
 	</array>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<false/>
+	<key>CADisableMinimumFrameDurationOnPhone</key>
+	<true/>
+	<key>UIApplicationSupportsIndirectInputEvents</key>
+	<true/>
 </dict>
 </plist>
diff --git a/packages/camera/camera_avfoundation/ios/Classes/CameraPlugin.m b/packages/camera/camera_avfoundation/ios/Classes/CameraPlugin.m
index b85f68d..5358876 100644
--- a/packages/camera/camera_avfoundation/ios/Classes/CameraPlugin.m
+++ b/packages/camera/camera_avfoundation/ios/Classes/CameraPlugin.m
@@ -104,43 +104,39 @@
 - (void)handleMethodCallAsync:(FlutterMethodCall *)call
                        result:(FLTThreadSafeFlutterResult *)result {
   if ([@"availableCameras" isEqualToString:call.method]) {
-    if (@available(iOS 10.0, *)) {
-      NSMutableArray *discoveryDevices =
-          [@[ AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInTelephotoCamera ]
-              mutableCopy];
-      if (@available(iOS 13.0, *)) {
-        [discoveryDevices addObject:AVCaptureDeviceTypeBuiltInUltraWideCamera];
-      }
-      AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession
-          discoverySessionWithDeviceTypes:discoveryDevices
-                                mediaType:AVMediaTypeVideo
-                                 position:AVCaptureDevicePositionUnspecified];
-      NSArray<AVCaptureDevice *> *devices = discoverySession.devices;
-      NSMutableArray<NSDictionary<NSString *, NSObject *> *> *reply =
-          [[NSMutableArray alloc] initWithCapacity:devices.count];
-      for (AVCaptureDevice *device in devices) {
-        NSString *lensFacing;
-        switch ([device position]) {
-          case AVCaptureDevicePositionBack:
-            lensFacing = @"back";
-            break;
-          case AVCaptureDevicePositionFront:
-            lensFacing = @"front";
-            break;
-          case AVCaptureDevicePositionUnspecified:
-            lensFacing = @"external";
-            break;
-        }
-        [reply addObject:@{
-          @"name" : [device uniqueID],
-          @"lensFacing" : lensFacing,
-          @"sensorOrientation" : @90,
-        }];
-      }
-      [result sendSuccessWithData:reply];
-    } else {
-      [result sendNotImplemented];
+    NSMutableArray *discoveryDevices =
+        [@[ AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInTelephotoCamera ]
+            mutableCopy];
+    if (@available(iOS 13.0, *)) {
+      [discoveryDevices addObject:AVCaptureDeviceTypeBuiltInUltraWideCamera];
     }
+    AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession
+        discoverySessionWithDeviceTypes:discoveryDevices
+                              mediaType:AVMediaTypeVideo
+                               position:AVCaptureDevicePositionUnspecified];
+    NSArray<AVCaptureDevice *> *devices = discoverySession.devices;
+    NSMutableArray<NSDictionary<NSString *, NSObject *> *> *reply =
+        [[NSMutableArray alloc] initWithCapacity:devices.count];
+    for (AVCaptureDevice *device in devices) {
+      NSString *lensFacing;
+      switch ([device position]) {
+        case AVCaptureDevicePositionBack:
+          lensFacing = @"back";
+          break;
+        case AVCaptureDevicePositionFront:
+          lensFacing = @"front";
+          break;
+        case AVCaptureDevicePositionUnspecified:
+          lensFacing = @"external";
+          break;
+      }
+      [reply addObject:@{
+        @"name" : [device uniqueID],
+        @"lensFacing" : lensFacing,
+        @"sensorOrientation" : @90,
+      }];
+    }
+    [result sendSuccessWithData:reply];
   } else if ([@"create" isEqualToString:call.method]) {
     [self handleCreateMethodCall:call result:result];
   } else if ([@"startImageStream" isEqualToString:call.method]) {
@@ -188,11 +184,7 @@
       [_camera start];
       [result sendSuccess];
     } else if ([@"takePicture" isEqualToString:call.method]) {
-      if (@available(iOS 10.0, *)) {
-        [_camera captureToFile:result];
-      } else {
-        [result sendNotImplemented];
-      }
+      [_camera captureToFile:result];
     } else if ([@"dispose" isEqualToString:call.method]) {
       [_registry unregisterTexture:cameraId];
       [_camera close];
diff --git a/packages/camera/camera_avfoundation/ios/Classes/FLTCam.h b/packages/camera/camera_avfoundation/ios/Classes/FLTCam.h
index 85b8e2a..50a0354 100644
--- a/packages/camera/camera_avfoundation/ios/Classes/FLTCam.h
+++ b/packages/camera/camera_avfoundation/ios/Classes/FLTCam.h
@@ -47,7 +47,7 @@
 - (void)start;
 - (void)stop;
 - (void)setDeviceOrientation:(UIDeviceOrientation)orientation;
-- (void)captureToFile:(FLTThreadSafeFlutterResult *)result API_AVAILABLE(ios(10));
+- (void)captureToFile:(FLTThreadSafeFlutterResult *)result;
 - (void)close;
 - (void)startVideoRecordingWithResult:(FLTThreadSafeFlutterResult *)result;
 /**
diff --git a/packages/camera/camera_avfoundation/ios/Classes/FLTCam.m b/packages/camera/camera_avfoundation/ios/Classes/FLTCam.m
index a7d6cd2..2bfa3e5 100644
--- a/packages/camera/camera_avfoundation/ios/Classes/FLTCam.m
+++ b/packages/camera/camera_avfoundation/ios/Classes/FLTCam.m
@@ -167,11 +167,10 @@
   [_captureSession addOutputWithNoConnections:_captureVideoOutput];
   [_captureSession addConnection:connection];
 
-  if (@available(iOS 10.0, *)) {
-    _capturePhotoOutput = [AVCapturePhotoOutput new];
-    [_capturePhotoOutput setHighResolutionCaptureEnabled:YES];
-    [_captureSession addOutput:_capturePhotoOutput];
-  }
+  _capturePhotoOutput = [AVCapturePhotoOutput new];
+  [_capturePhotoOutput setHighResolutionCaptureEnabled:YES];
+  [_captureSession addOutput:_capturePhotoOutput];
+
   _motionManager = [[CMMotionManager alloc] init];
   [_motionManager startAccelerometerUpdates];
 
@@ -229,7 +228,7 @@
   }
 }
 
-- (void)captureToFile:(FLTThreadSafeFlutterResult *)result API_AVAILABLE(ios(10)) {
+- (void)captureToFile:(FLTThreadSafeFlutterResult *)result {
   AVCapturePhotoSettings *settings = [AVCapturePhotoSettings photoSettings];
   if (_resolutionPreset == FLTResolutionPresetMax) {
     [settings setHighResolutionPhotoEnabled:YES];
@@ -1002,19 +1001,11 @@
 }
 
 - (CGFloat)getMinAvailableZoomFactor {
-  if (@available(iOS 11.0, *)) {
-    return _captureDevice.minAvailableVideoZoomFactor;
-  } else {
-    return 1.0;
-  }
+  return _captureDevice.minAvailableVideoZoomFactor;
 }
 
 - (CGFloat)getMaxAvailableZoomFactor {
-  if (@available(iOS 11.0, *)) {
-    return _captureDevice.maxAvailableVideoZoomFactor;
-  } else {
-    return _captureDevice.activeFormat.videoMaxZoomFactor;
-  }
+  return _captureDevice.maxAvailableVideoZoomFactor;
 }
 
 - (BOOL)setupWriterForPath:(NSString *)path {
diff --git a/packages/camera/camera_avfoundation/ios/Classes/FLTCam_Test.h b/packages/camera/camera_avfoundation/ios/Classes/FLTCam_Test.h
index 19e2842..49a2752 100644
--- a/packages/camera/camera_avfoundation/ios/Classes/FLTCam_Test.h
+++ b/packages/camera/camera_avfoundation/ios/Classes/FLTCam_Test.h
@@ -25,7 +25,7 @@
 @property(readonly, nonatomic) AVCaptureVideoDataOutput *captureVideoOutput;
 
 /// The output for photo capturing. Exposed setter for unit tests.
-@property(strong, nonatomic) AVCapturePhotoOutput *capturePhotoOutput API_AVAILABLE(ios(10));
+@property(strong, nonatomic) AVCapturePhotoOutput *capturePhotoOutput;
 
 /// True when images from the camera are being streamed.
 @property(assign, nonatomic) BOOL isStreamingImages;
diff --git a/packages/camera/camera_avfoundation/ios/Classes/FLTSavePhotoDelegate.m b/packages/camera/camera_avfoundation/ios/Classes/FLTSavePhotoDelegate.m
index 617890c..310ffdb 100644
--- a/packages/camera/camera_avfoundation/ios/Classes/FLTSavePhotoDelegate.m
+++ b/packages/camera/camera_avfoundation/ios/Classes/FLTSavePhotoDelegate.m
@@ -46,28 +46,9 @@
   });
 }
 
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#pragma clang diagnostic ignored "-Wdeprecated-implementations"
-- (void)captureOutput:(AVCapturePhotoOutput *)output
-    didFinishProcessingPhotoSampleBuffer:(CMSampleBufferRef)photoSampleBuffer
-                previewPhotoSampleBuffer:(CMSampleBufferRef)previewPhotoSampleBuffer
-                        resolvedSettings:(AVCaptureResolvedPhotoSettings *)resolvedSettings
-                         bracketSettings:(AVCaptureBracketedStillImageSettings *)bracketSettings
-                                   error:(NSError *)error API_AVAILABLE(ios(10)) {
-  [self handlePhotoCaptureResultWithError:error
-                        photoDataProvider:^NSData * {
-                          return [AVCapturePhotoOutput
-                              JPEGPhotoDataRepresentationForJPEGSampleBuffer:photoSampleBuffer
-                                                    previewPhotoSampleBuffer:
-                                                        previewPhotoSampleBuffer];
-                        }];
-}
-#pragma clang diagnostic pop
-
 - (void)captureOutput:(AVCapturePhotoOutput *)output
     didFinishProcessingPhoto:(AVCapturePhoto *)photo
-                       error:(NSError *)error API_AVAILABLE(ios(11.0)) {
+                       error:(NSError *)error {
   [self handlePhotoCaptureResultWithError:error
                         photoDataProvider:^NSData * {
                           return [photo fileDataRepresentation];
diff --git a/packages/camera/camera_avfoundation/ios/camera_avfoundation.podspec b/packages/camera/camera_avfoundation/ios/camera_avfoundation.podspec
index 0cbdc9a..3fe435b 100644
--- a/packages/camera/camera_avfoundation/ios/camera_avfoundation.podspec
+++ b/packages/camera/camera_avfoundation/ios/camera_avfoundation.podspec
@@ -18,6 +18,6 @@
   s.module_map = 'Classes/CameraPlugin.modulemap'
   s.dependency 'Flutter'
 
-  s.platform = :ios, '9.0'
+  s.platform = :ios, '11.0'
   s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
 end
diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml
index d320fdc..c7483d9 100644
--- a/packages/camera/camera_avfoundation/pubspec.yaml
+++ b/packages/camera/camera_avfoundation/pubspec.yaml
@@ -2,11 +2,11 @@
 description: iOS implementation of the camera plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_avfoundation
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.9.11+1
+version: 0.9.12
 
 environment:
-  sdk: ">=2.14.0 <3.0.0"
-  flutter: ">=3.0.0"
+  sdk: '>=2.18.0 <3.0.0'
+  flutter: ">=3.3.0"
 
 flutter:
   plugin: