diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 36367c74fb1..6cbc6f1e0db 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -96fe3b3df509d451116124f0abbd288e36a03805 +c9608e28d01a81bfbb86aec4bca4a149bf581467 diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/Stubs.m b/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/Stubs.m index 52381732748..51a31d9fc28 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/Stubs.m +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/Stubs.m @@ -607,6 +607,11 @@ - (void)registerViewFactory:(nonnull NSObject *)fact } } +// TODO(stuartmorgan): Make this NSObject once +// FlutterSceneLifeCycleDelegate has reached stable. +- (void)addSceneDelegate:(nonnull NSObject *)delegate { +} + @end // This FlutterBinaryMessenger is a protocol, so to make a stub it has to be implemented. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.swift index 3665d22a353..0ce4dc0c8c2 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.swift @@ -27,7 +27,7 @@ class FWFWebViewFlutterWKWebViewExternalAPITests: XCTestCase { WebViewFlutterPlugin.register(with: registrar) - let plugin = registry.registrar.plugin + let plugin = registry.registrar.plugin as! WebViewFlutterPlugin? let webView = WKWebView(frame: .zero) let webViewIdentifier = 0 @@ -79,62 +79,71 @@ class TestFlutterTextureRegistry: NSObject, FlutterTextureRegistry { } } -class TestFlutterPluginRegistrar: NSObject, FlutterPluginRegistrar { - var plugin: WebViewFlutterPlugin? = nil +// TODO(stuartmorgan): This is temporarily disabled on iOS in favor of Stubs.h/m, +// because FlutterSceneLifeCycleDelegate isn't available on stable, and Swift doesn't +// allow using looser types (like Any) for protocol conformance. Once that +// protocol reaches stable, this #if should be removed, as should Stubs.*. +#if os(macOS) + class TestFlutterPluginRegistrar: NSObject, FlutterPluginRegistrar { + var plugin: WebViewFlutterPlugin? = nil - #if os(iOS) - var viewController: UIViewController? + #if os(iOS) + var viewController: UIViewController? - func messenger() -> FlutterBinaryMessenger { - return TestBinaryMessenger() - } + func messenger() -> FlutterBinaryMessenger { + return TestBinaryMessenger() + } - func textures() -> FlutterTextureRegistry { - return TestFlutterTextureRegistry() - } + func textures() -> FlutterTextureRegistry { + return TestFlutterTextureRegistry() + } - func addApplicationDelegate(_ delegate: FlutterPlugin) { + func addApplicationDelegate(_ delegate: FlutterPlugin) { - } + } - func register( - _ factory: FlutterPlatformViewFactory, withId factoryId: String, - gestureRecognizersBlockingPolicy: FlutterPlatformViewGestureRecognizersBlockingPolicy - ) { - } - #elseif os(macOS) - var view: NSView? - var viewController: NSViewController? + func register( + _ factory: FlutterPlatformViewFactory, withId factoryId: String, + gestureRecognizersBlockingPolicy: FlutterPlatformViewGestureRecognizersBlockingPolicy + ) { + } - var messenger: FlutterBinaryMessenger { - return TestBinaryMessenger() - } + func addSceneDelegate(_ delegate: any FlutterSceneLifeCycleDelegate) { + } + #elseif os(macOS) + var view: NSView? + var viewController: NSViewController? - var textures: FlutterTextureRegistry { - return TestFlutterTextureRegistry() - } + var messenger: FlutterBinaryMessenger { + return TestBinaryMessenger() + } - func addApplicationDelegate(_ delegate: FlutterAppLifecycleDelegate) { + var textures: FlutterTextureRegistry { + return TestFlutterTextureRegistry() + } - } - #endif + func addApplicationDelegate(_ delegate: FlutterAppLifecycleDelegate) { - func register(_ factory: FlutterPlatformViewFactory, withId factoryId: String) { - } + } + #endif - func publish(_ value: NSObject) { - plugin = (value as! WebViewFlutterPlugin) - } + func register(_ factory: FlutterPlatformViewFactory, withId factoryId: String) { + } - func addMethodCallDelegate(_ delegate: FlutterPlugin, channel: FlutterMethodChannel) { + func publish(_ value: NSObject) { + plugin = (value as! WebViewFlutterPlugin) + } - } + func addMethodCallDelegate(_ delegate: FlutterPlugin, channel: FlutterMethodChannel) { - func lookupKey(forAsset asset: String) -> String { - return "" - } + } + + func lookupKey(forAsset asset: String) -> String { + return "" + } - func lookupKey(forAsset asset: String, fromPackage package: String) -> String { - return "" + func lookupKey(forAsset asset: String, fromPackage package: String) -> String { + return "" + } } -} +#endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj index 4274f491599..4755950f7c8 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 33C8DADB2E8D711500A9B7CA /* TemporaryObjCStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C8DADA2E8D711500A9B7CA /* TemporaryObjCStub.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 8F0EDFD32E1F4967001938E6 /* ProxyAPIRegistrarTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F0EDFD22E1F4967001938E6 /* ProxyAPIRegistrarTests.swift */; }; @@ -90,6 +91,8 @@ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 14B8C759112CB6E8AA62F003 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 185E08CFEB8AE9D939566DE6 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33C8DAD92E8D711500A9B7CA /* TemporaryObjCStub.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TemporaryObjCStub.h; sourceTree = ""; }; + 33C8DADA2E8D711500A9B7CA /* TemporaryObjCStub.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TemporaryObjCStub.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 4AA20286555659E34ACB3BE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 56443D345A163E3A65320207 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; @@ -180,6 +183,8 @@ 68BDCAEA23C3F7CB00D9C032 /* RunnerTests */ = { isa = PBXGroup; children = ( + 33C8DAD92E8D711500A9B7CA /* TemporaryObjCStub.h */, + 33C8DADA2E8D711500A9B7CA /* TemporaryObjCStub.m */, 8F0EDFD22E1F4967001938E6 /* ProxyAPIRegistrarTests.swift */, 8FEC64812DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift */, 8FEC64822DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift */, @@ -569,6 +574,7 @@ 8F1488EC2D2DE27000191744 /* FrameInfoProxyAPITests.swift in Sources */, 8F1488ED2D2DE27000191744 /* ErrorProxyAPITests.swift in Sources */, 8F1488EE2D2DE27000191744 /* NSObjectProxyAPITests.swift in Sources */, + 33C8DADB2E8D711500A9B7CA /* TemporaryObjCStub.m in Sources */, 8F1488EF2D2DE27000191744 /* NavigationResponseProxyAPITests.swift in Sources */, 8FEC64852DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */, 8FEC64862DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift in Sources */, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/RunnerTests-Bridging-Header.h b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/RunnerTests-Bridging-Header.h index b8fa2a34b67..c14bff0c31d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/RunnerTests-Bridging-Header.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/RunnerTests-Bridging-Header.h @@ -1,3 +1,5 @@ // Copyright 2013 The Flutter Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + +#import "TemporaryObjCStub.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.h b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.h new file mode 100644 index 00000000000..bc3e59494bf --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.h @@ -0,0 +1,24 @@ +// Copyright 2013 The Flutter Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import Foundation; + +// TODO(stuartmorgan): This file is temporarily iOS workaround for changes in +// FlutterPluginRegistrar. See the TestFlutterPluginRegistrar TODO in +// FWFWebViewFlutterWKWebViewExternalAPITests.swift. +#if TARGET_OS_IOS +@import Flutter; + +NS_ASSUME_NONNULL_BEGIN + +@interface TestFlutterPluginRegistrar : NSObject + +@property(nonatomic, nullable) NSObject *plugin; +@property(nonatomic, weak, nullable) UIViewController *viewController; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.m b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.m new file mode 100644 index 00000000000..2e8704e46ae --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.m @@ -0,0 +1,65 @@ +// Copyright 2013 The Flutter Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import Foundation; + +// TODO(stuartmorgan): This file is temporarily iOS workaround for changes in +// FlutterPluginRegistrar. See the TestFlutterPluginRegistrar TODO in +// FWFWebViewFlutterWKWebViewExternalAPITests.swift. +#if TARGET_OS_IOS + +#import "TemporaryObjCStub.h" +@import Flutter; + +#import "RunnerTests-Swift.h" + +// This FlutterPluginRegistrar is a protocol, so to make a stub it has to be implemented. +@implementation TestFlutterPluginRegistrar + +- (void)addApplicationDelegate:(nonnull NSObject *)delegate { +} + +- (void)addMethodCallDelegate:(nonnull NSObject *)delegate + channel:(nonnull FlutterMethodChannel *)channel { +} + +- (nonnull NSString *)lookupKeyForAsset:(nonnull NSString *)asset { + return @""; +} + +- (nonnull NSString *)lookupKeyForAsset:(nonnull NSString *)asset + fromPackage:(nonnull NSString *)package { + return @""; +} + +- (nonnull NSObject *)messenger { + return [[TestBinaryMessenger alloc] init]; +} + +- (void)publish:(nonnull NSObject *)value { + self.plugin = value; +} + +- (void)registerViewFactory:(nonnull NSObject *)factory + withId:(nonnull NSString *)factoryId { +} + +- (void)registerViewFactory:(nonnull NSObject *)factory + withId:(nonnull NSString *)factoryId + gestureRecognizersBlockingPolicy: + (FlutterPlatformViewGestureRecognizersBlockingPolicy)gestureRecognizersBlockingPolicy { +} + +- (nonnull NSObject *)textures { + return [[TestFlutterTextureRegistry alloc] init]; +} + +// This would be NSObject, but +// FlutterSceneLifeCycleDelegate is not available on stable. +- (void)addSceneDelegate:(nonnull NSObject *)delegate { +} + +@end + +#endif