From 62d6d1dd41ac9220310d90517bb0c37d40007bf9 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Tue, 13 Jan 2026 23:47:32 -0800 Subject: [PATCH 1/5] [ci] Enforce Swift strict concurrency during testing --- script/tool/lib/src/native_test_command.dart | 4 +++- script/tool/test/native_test_command_test.dart | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/script/tool/lib/src/native_test_command.dart b/script/tool/lib/src/native_test_command.dart index a944b95b87bc..06c07366f6b9 100644 --- a/script/tool/lib/src/native_test_command.dart +++ b/script/tool/lib/src/native_test_command.dart @@ -564,8 +564,10 @@ this command. extraFlags: [ if (testTarget != null) '-only-testing:$testTarget', ...extraFlags, - if (!_xcodeWarningsExceptions.contains(plugin.directory.basename)) + if (!_xcodeWarningsExceptions.contains(plugin.directory.basename)) ...[ 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', + r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + ], ], ); diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index 6c51ed7f2fd1..810f18891581 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -177,7 +177,10 @@ void main() { 'Debug', if (destination != null) ...['-destination', destination], ...extraFlags, - if (treatWarningsAsErrors) 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', + if (treatWarningsAsErrors) ...[ + 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', + r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + ], ], package.path); } From 508cca7c42e585a644f7efb2ac59b638ad28d1f8 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Tue, 13 Jan 2026 23:55:42 -0800 Subject: [PATCH 2/5] try to make it error --- .../example/ios/RunnerTests/AdProxyAPITests.swift | 6 +++--- .../darwin/Tests/ScrollViewProxyAPITests.swift | 14 +++++--------- .../darwin/Tests/UIViewProxyAPITests.swift | 4 ++-- script/tool/lib/src/native_test_command.dart | 2 +- script/tool/test/native_test_command_test.dart | 2 +- 5 files changed, 12 insertions(+), 16 deletions(-) diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift index 35b0e10c4a21..83b2fc9a2e4c 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift @@ -49,7 +49,7 @@ class AdProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.adSystem) } - @MainActor func testCompanionAds() { + func testCompanionAds() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAd(registrar) @@ -185,7 +185,7 @@ class AdProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.skipTimeOffset) } - @MainActor func testAdPodInfo() { + func testAdPodInfo() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAd(registrar) @@ -226,7 +226,7 @@ class AdProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.creativeAdID) } - @MainActor func testUniversalAdIDs() { + func testUniversalAdIDs() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAd(registrar) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift index 91e6c1bffd5f..fcf0d4b9c2b4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift @@ -12,7 +12,7 @@ import XCTest class ScrollViewProxyAPITests: XCTestCase { #if os(iOS) - @MainActor func testGetContentOffset() { + func testGetContentOffset() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -22,7 +22,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(value, [instance.contentOffset.x, instance.contentOffset.y]) } - @MainActor func testScrollBy() { + func testScrollBy() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -33,7 +33,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.setContentOffsetArgs as? [Double], [2.0, 2.0]) } - @MainActor func testSetContentOffset() { + func testSetContentOffset() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -45,7 +45,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.setContentOffsetArgs as? [Double], [x, y]) } - @MainActor func testSetDelegate() { + func testSetDelegate() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -58,7 +58,6 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.setDelegateArgs, [delegate]) } - @MainActor func testSetBounces() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -72,7 +71,6 @@ class ScrollViewProxyAPITests: XCTestCase { #if compiler(>=6.0) @available(iOS 17.4, *) - @MainActor func testSetBouncesHorizontally() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -86,7 +84,6 @@ class ScrollViewProxyAPITests: XCTestCase { } @available(iOS 17.4, *) - @MainActor func testSetBouncesVertically() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -100,7 +97,6 @@ class ScrollViewProxyAPITests: XCTestCase { } #endif - @MainActor func testSetAlwaysBounceVertical() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -138,7 +134,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.showsVerticalScrollIndicator, value) } - @MainActor func testSetShowsHorizontalScrollIndicator() { + func testSetShowsHorizontalScrollIndicator() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift index cbcbf3e2bd30..45f6e5c3c48a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift @@ -12,7 +12,7 @@ import XCTest class UIViewProxyAPITests: XCTestCase { #if os(iOS) - @MainActor func testSetBackgroundColor() { + func testSetBackgroundColor() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIView(registrar) @@ -30,7 +30,7 @@ class UIViewProxyAPITests: XCTestCase { instance.backgroundColor, UIColor(red: red, green: green, blue: blue, alpha: alpha)) } - @MainActor func testSetOpaque() { + func testSetOpaque() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIView(registrar) diff --git a/script/tool/lib/src/native_test_command.dart b/script/tool/lib/src/native_test_command.dart index 06c07366f6b9..fbb64e54522c 100644 --- a/script/tool/lib/src/native_test_command.dart +++ b/script/tool/lib/src/native_test_command.dart @@ -566,7 +566,7 @@ this command. ...extraFlags, if (!_xcodeWarningsExceptions.contains(plugin.directory.basename)) ...[ 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', - r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + // r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', ], ], ); diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index 810f18891581..ec44ad45f0ca 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -179,7 +179,7 @@ void main() { ...extraFlags, if (treatWarningsAsErrors) ...[ 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', - r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + // r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', ], ], package.path); } From 76040811d0b0c3814a6e7ef9a93d50c6a22cc5b5 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Wed, 14 Jan 2026 16:14:31 -0800 Subject: [PATCH 3/5] try harder --- .../example/ios/RunnerTests/AdProxyAPITests.swift | 6 +++--- .../example/ios/RunnerTests/RunnerTests.swift | 1 - .../darwin/Tests/ScrollViewProxyAPITests.swift | 14 +++++++++----- .../darwin/Tests/UIViewProxyAPITests.swift | 4 ++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift index 83b2fc9a2e4c..35b0e10c4a21 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/AdProxyAPITests.swift @@ -49,7 +49,7 @@ class AdProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.adSystem) } - func testCompanionAds() { + @MainActor func testCompanionAds() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAd(registrar) @@ -185,7 +185,7 @@ class AdProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.skipTimeOffset) } - func testAdPodInfo() { + @MainActor func testAdPodInfo() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAd(registrar) @@ -226,7 +226,7 @@ class AdProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.creativeAdID) } - func testUniversalAdIDs() { + @MainActor func testUniversalAdIDs() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAd(registrar) diff --git a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift index 9b76f99fcbe8..0bfe86816272 100644 --- a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift +++ b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift @@ -7,7 +7,6 @@ import UIKit @testable import pointer_interceptor_ios -@MainActor struct RunnerTests { @Test(arguments: [ (false, UIColor.clear), diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift index fcf0d4b9c2b4..91e6c1bffd5f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/ScrollViewProxyAPITests.swift @@ -12,7 +12,7 @@ import XCTest class ScrollViewProxyAPITests: XCTestCase { #if os(iOS) - func testGetContentOffset() { + @MainActor func testGetContentOffset() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -22,7 +22,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(value, [instance.contentOffset.x, instance.contentOffset.y]) } - func testScrollBy() { + @MainActor func testScrollBy() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -33,7 +33,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.setContentOffsetArgs as? [Double], [2.0, 2.0]) } - func testSetContentOffset() { + @MainActor func testSetContentOffset() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -45,7 +45,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.setContentOffsetArgs as? [Double], [x, y]) } - func testSetDelegate() { + @MainActor func testSetDelegate() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -58,6 +58,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.setDelegateArgs, [delegate]) } + @MainActor func testSetBounces() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -71,6 +72,7 @@ class ScrollViewProxyAPITests: XCTestCase { #if compiler(>=6.0) @available(iOS 17.4, *) + @MainActor func testSetBouncesHorizontally() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -84,6 +86,7 @@ class ScrollViewProxyAPITests: XCTestCase { } @available(iOS 17.4, *) + @MainActor func testSetBouncesVertically() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -97,6 +100,7 @@ class ScrollViewProxyAPITests: XCTestCase { } #endif + @MainActor func testSetAlwaysBounceVertical() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) @@ -134,7 +138,7 @@ class ScrollViewProxyAPITests: XCTestCase { XCTAssertEqual(instance.showsVerticalScrollIndicator, value) } - func testSetShowsHorizontalScrollIndicator() { + @MainActor func testSetShowsHorizontalScrollIndicator() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift index 45f6e5c3c48a..cbcbf3e2bd30 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/UIViewProxyAPITests.swift @@ -12,7 +12,7 @@ import XCTest class UIViewProxyAPITests: XCTestCase { #if os(iOS) - func testSetBackgroundColor() { + @MainActor func testSetBackgroundColor() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIView(registrar) @@ -30,7 +30,7 @@ class UIViewProxyAPITests: XCTestCase { instance.backgroundColor, UIColor(red: red, green: green, blue: blue, alpha: alpha)) } - func testSetOpaque() { + @MainActor func testSetOpaque() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiUIView(registrar) From ffb17d326a0567980499092320edee5538976c07 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Wed, 14 Jan 2026 19:48:15 -0800 Subject: [PATCH 4/5] Fix test, confirm no error --- .../example/ios/RunnerTests/RunnerTests.swift | 1 + script/tool/lib/src/native_test_command.dart | 6 ++++-- script/tool/test/native_test_command_test.dart | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift index 0bfe86816272..9b76f99fcbe8 100644 --- a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift +++ b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/RunnerTests/RunnerTests.swift @@ -7,6 +7,7 @@ import UIKit @testable import pointer_interceptor_ios +@MainActor struct RunnerTests { @Test(arguments: [ (false, UIColor.clear), diff --git a/script/tool/lib/src/native_test_command.dart b/script/tool/lib/src/native_test_command.dart index fbb64e54522c..1736fd5e5f8b 100644 --- a/script/tool/lib/src/native_test_command.dart +++ b/script/tool/lib/src/native_test_command.dart @@ -564,9 +564,11 @@ this command. extraFlags: [ if (testTarget != null) '-only-testing:$testTarget', ...extraFlags, - if (!_xcodeWarningsExceptions.contains(plugin.directory.basename)) ...[ + if (!_xcodeWarningsExceptions.contains( + plugin.directory.basename, + )) ...[ 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', - // r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', ], ], ); diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index ec44ad45f0ca..810f18891581 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -179,7 +179,7 @@ void main() { ...extraFlags, if (treatWarningsAsErrors) ...[ 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', - // r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', ], ], package.path); } From 79b0e02de0d0a3246194a0fb147c8cd2693c937b Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Wed, 28 Jan 2026 21:49:49 -0800 Subject: [PATCH 5/5] targeted --- script/tool/lib/src/native_test_command.dart | 2 +- script/tool/test/native_test_command_test.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/script/tool/lib/src/native_test_command.dart b/script/tool/lib/src/native_test_command.dart index 1736fd5e5f8b..444624c090f4 100644 --- a/script/tool/lib/src/native_test_command.dart +++ b/script/tool/lib/src/native_test_command.dart @@ -568,7 +568,7 @@ this command. plugin.directory.basename, )) ...[ 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', - r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=targeted', ], ], ); diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index 810f18891581..2bfff05c4b0a 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -179,7 +179,7 @@ void main() { ...extraFlags, if (treatWarningsAsErrors) ...[ 'GCC_TREAT_WARNINGS_AS_ERRORS=YES', - r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=complete', + r'OTHER_SWIFT_FLAGS=$(inherited) -strict-concurrency=targeted', ], ], package.path); }