[webview_flutter] Bump minimum Flutter version and iOS deployment target (#4361)

diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md
index 1e1d5aa..99b8a5c 100644
--- a/packages/webview_flutter/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.14
+
+* Update minimum Flutter SDK to 2.5 and iOS deployment target to 9.0.
+
 ## 2.0.13
 
 * Send URL of File to download to the NavigationDelegate on Android just like it is already done on iOS.
diff --git a/packages/webview_flutter/webview_flutter/example/ios/Flutter/AppFrameworkInfo.plist b/packages/webview_flutter/webview_flutter/example/ios/Flutter/AppFrameworkInfo.plist
index 9367d48..8d4492f 100644
--- a/packages/webview_flutter/webview_flutter/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/packages/webview_flutter/webview_flutter/example/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
   <key>CFBundleVersion</key>
   <string>1.0</string>
   <key>MinimumOSVersion</key>
-  <string>8.0</string>
+  <string>9.0</string>
 </dict>
 </plist>
diff --git a/packages/webview_flutter/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj
index f75e71d..62428d0 100644
--- a/packages/webview_flutter/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/webview_flutter/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj
@@ -547,7 +547,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
@@ -597,7 +597,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
diff --git a/packages/webview_flutter/webview_flutter/example/ios/RunnerTests/FLTWKNavigationDelegateTests.m b/packages/webview_flutter/webview_flutter/example/ios/RunnerTests/FLTWKNavigationDelegateTests.m
index 9d3a2ae..08c2e8b 100644
--- a/packages/webview_flutter/webview_flutter/example/ios/RunnerTests/FLTWKNavigationDelegateTests.m
+++ b/packages/webview_flutter/webview_flutter/example/ios/RunnerTests/FLTWKNavigationDelegateTests.m
@@ -25,17 +25,14 @@
 }
 
 - (void)testWebViewWebContentProcessDidTerminateCallsRecourseErrorChannel {
-  if (@available(iOS 9.0, *)) {
-    // `webViewWebContentProcessDidTerminate` is only available on iOS 9.0 and above.
-    WKWebView *webview = OCMClassMock(WKWebView.class);
-    [self.navigationDelegate webViewWebContentProcessDidTerminate:webview];
-    OCMVerify([self.mockMethodChannel
-        invokeMethod:@"onWebResourceError"
-           arguments:[OCMArg checkWithBlock:^BOOL(NSDictionary *args) {
-             XCTAssertEqualObjects(args[@"errorType"], @"webContentProcessTerminated");
-             return true;
-           }]]);
-  }
+  WKWebView *webview = OCMClassMock(WKWebView.class);
+  [self.navigationDelegate webViewWebContentProcessDidTerminate:webview];
+  OCMVerify([self.mockMethodChannel invokeMethod:@"onWebResourceError"
+                                       arguments:[OCMArg checkWithBlock:^BOOL(NSDictionary *args) {
+                                         XCTAssertEqualObjects(args[@"errorType"],
+                                                               @"webContentProcessTerminated");
+                                         return true;
+                                       }]]);
 }
 
 @end
diff --git a/packages/webview_flutter/webview_flutter/example/pubspec.yaml b/packages/webview_flutter/webview_flutter/example/pubspec.yaml
index 2316d79..6b668eb 100644
--- a/packages/webview_flutter/webview_flutter/example/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter/example/pubspec.yaml
@@ -3,7 +3,8 @@
 publish_to: none
 
 environment:
-  sdk: ">=2.12.0 <3.0.0"
+  sdk: ">=2.14.0 <3.0.0"
+  flutter: ">=2.5.0"
 
 dependencies:
   flutter:
diff --git a/packages/webview_flutter/webview_flutter/ios/Classes/FLTCookieManager.m b/packages/webview_flutter/webview_flutter/ios/Classes/FLTCookieManager.m
index f4783ff..eb7c856 100644
--- a/packages/webview_flutter/webview_flutter/ios/Classes/FLTCookieManager.m
+++ b/packages/webview_flutter/webview_flutter/ios/Classes/FLTCookieManager.m
@@ -25,25 +25,20 @@
 }
 
 - (void)clearCookies:(FlutterResult)result {
-  if (@available(iOS 9.0, *)) {
-    NSSet<NSString *> *websiteDataTypes = [NSSet setWithObject:WKWebsiteDataTypeCookies];
-    WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
+  NSSet<NSString *> *websiteDataTypes = [NSSet setWithObject:WKWebsiteDataTypeCookies];
+  WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
 
-    void (^deleteAndNotify)(NSArray<WKWebsiteDataRecord *> *) =
-        ^(NSArray<WKWebsiteDataRecord *> *cookies) {
-          BOOL hasCookies = cookies.count > 0;
-          [dataStore removeDataOfTypes:websiteDataTypes
-                        forDataRecords:cookies
-                     completionHandler:^{
-                       result(@(hasCookies));
-                     }];
-        };
+  void (^deleteAndNotify)(NSArray<WKWebsiteDataRecord *> *) =
+      ^(NSArray<WKWebsiteDataRecord *> *cookies) {
+        BOOL hasCookies = cookies.count > 0;
+        [dataStore removeDataOfTypes:websiteDataTypes
+                      forDataRecords:cookies
+                   completionHandler:^{
+                     result(@(hasCookies));
+                   }];
+      };
 
-    [dataStore fetchDataRecordsOfTypes:websiteDataTypes completionHandler:deleteAndNotify];
-  } else {
-    // support for iOS8 tracked in https://github.com/flutter/flutter/issues/27624.
-    NSLog(@"Clearing cookies is not supported for Flutter WebViews prior to iOS 9.");
-  }
+  [dataStore fetchDataRecordsOfTypes:websiteDataTypes completionHandler:deleteAndNotify];
 }
 
 @end
diff --git a/packages/webview_flutter/webview_flutter/ios/Classes/FlutterWebView.m b/packages/webview_flutter/webview_flutter/ios/Classes/FlutterWebView.m
index c6d926d..1604f27 100644
--- a/packages/webview_flutter/webview_flutter/ios/Classes/FlutterWebView.m
+++ b/packages/webview_flutter/webview_flutter/ios/Classes/FlutterWebView.m
@@ -272,19 +272,14 @@
 }
 
 - (void)clearCache:(FlutterResult)result {
-  if (@available(iOS 9.0, *)) {
-    NSSet* cacheDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
-    WKWebsiteDataStore* dataStore = [WKWebsiteDataStore defaultDataStore];
-    NSDate* dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
-    [dataStore removeDataOfTypes:cacheDataTypes
-                   modifiedSince:dateFrom
-               completionHandler:^{
-                 result(nil);
-               }];
-  } else {
-    // support for iOS8 tracked in https://github.com/flutter/flutter/issues/27624.
-    NSLog(@"Clearing cache is not supported for Flutter WebViews prior to iOS 9.");
-  }
+  NSSet* cacheDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
+  WKWebsiteDataStore* dataStore = [WKWebsiteDataStore defaultDataStore];
+  NSDate* dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
+  [dataStore removeDataOfTypes:cacheDataTypes
+                 modifiedSince:dateFrom
+             completionHandler:^{
+               result(nil);
+             }];
 }
 
 - (void)onGetTitle:(FlutterResult)result {
@@ -391,25 +386,18 @@
     case 0:  // require_user_action_for_all_media_types
       if (@available(iOS 10.0, *)) {
         configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll;
-      } else if (@available(iOS 9.0, *)) {
-        configuration.requiresUserActionForMediaPlayback = true;
       } else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-        configuration.mediaPlaybackRequiresUserAction = true;
-#pragma clang diagnostic pop
+        configuration.requiresUserActionForMediaPlayback = true;
       }
       break;
     case 1:  // always_allow
       if (@available(iOS 10.0, *)) {
-        configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
-      } else if (@available(iOS 9.0, *)) {
-        configuration.requiresUserActionForMediaPlayback = false;
-      } else {
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
-        configuration.mediaPlaybackRequiresUserAction = false;
+        configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
 #pragma clang diagnostic pop
+      } else {
+        configuration.requiresUserActionForMediaPlayback = false;
       }
       break;
     default:
@@ -468,11 +456,7 @@
 }
 
 - (void)updateUserAgent:(NSString*)userAgent {
-  if (@available(iOS 9.0, *)) {
-    [_webView setCustomUserAgent:userAgent];
-  } else {
-    NSLog(@"Updating UserAgent is not supported for Flutter WebViews prior to iOS 9.");
-  }
+  [_webView setCustomUserAgent:userAgent];
 }
 
 #pragma mark WKUIDelegate
diff --git a/packages/webview_flutter/webview_flutter/ios/webview_flutter.podspec b/packages/webview_flutter/webview_flutter/ios/webview_flutter.podspec
index 1602f1c..2e02199 100644
--- a/packages/webview_flutter/webview_flutter/ios/webview_flutter.podspec
+++ b/packages/webview_flutter/webview_flutter/ios/webview_flutter.podspec
@@ -18,6 +18,6 @@
   s.public_header_files = 'Classes/**/*.h'
   s.dependency 'Flutter'
 
-  s.platform = :ios, '8.0'
+  s.platform = :ios, '9.0'
   s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
 end
diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml
index 3976ff7..393a66e 100644
--- a/packages/webview_flutter/webview_flutter/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter/pubspec.yaml
@@ -2,11 +2,11 @@
 description: A Flutter plugin that provides a WebView widget on Android and iOS.
 repository: https://github.com/flutter/plugins/tree/master/packages/webview_flutter/webview_flutter
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 2.0.13
+version: 2.0.14
 
 environment:
-  sdk: ">=2.12.0 <3.0.0"
-  flutter: ">=2.0.0"
+  sdk: ">=2.14.0 <3.0.0"
+  flutter: ">=2.5.0"
 
 flutter:
   plugin: