From d809b4f2e1cb8381b0328234204c5423a0580999 Mon Sep 17 00:00:00 2001 From: Puneet kukreja Date: Fri, 13 Mar 2026 22:46:16 +0530 Subject: [PATCH 01/55] [google_sign_in_web]Fix renderButton stuck on "Getting ready" for Web (Future issue) (#11081) This PR addresses a regression introduced after fixing issue #167410. Previously, issue #167410 was resolved where _initCalled was being executed twice on web. However, after that fix, a new issue surfaced where the render button was not getting rendered properly(https://github.com/flutter/flutter/issues/182633). The earlier _initCalled fix PR was reverted. As per discussion, this PR now: 1. Cherry-picks the necessary changes from the reverted commit 2. Incorporates the _initCalled fix 3. Includes the additional fix to ensure the render button is rendered correctly 4. Ensures both issues are resolved together without causing regression This consolidates the required changes in a single PR to maintain correct initialization flow and proper rendering behavior on web. Fixes: https://github.com/flutter/flutter/issues/167410 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../google_sign_in_web/CHANGELOG.md | 5 + .../google_sign_in_web_test.dart | 59 +++++---- .../integration_test/web_only_test.dart | 19 ++- .../lib/google_sign_in_web.dart | 112 ++++++++---------- .../google_sign_in_web/pubspec.yaml | 2 +- 5 files changed, 104 insertions(+), 93 deletions(-) diff --git a/packages/google_sign_in/google_sign_in_web/CHANGELOG.md b/packages/google_sign_in/google_sign_in_web/CHANGELOG.md index fdbfe4ac60ad..d7dc4334d508 100644 --- a/packages/google_sign_in/google_sign_in_web/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_web/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.1.3 + +* Restored previously reverted changes to prevent `_initCalled` from being invoked twice on web. +* Fixed `renderButton` being stuck on "Getting ready" on web by correcting the `FutureBuilder` state check to use `ConnectionState.done`. + ## 1.1.2 * Reverts "Throws a more actionable error when init is called more than once." diff --git a/packages/google_sign_in/google_sign_in_web/example/integration_test/google_sign_in_web_test.dart b/packages/google_sign_in/google_sign_in_web/example/integration_test/google_sign_in_web_test.dart index 874bc8a22324..e102d6521175 100644 --- a/packages/google_sign_in/google_sign_in_web/example/integration_test/google_sign_in_web_test.dart +++ b/packages/google_sign_in/google_sign_in_web/example/integration_test/google_sign_in_web_test.dart @@ -65,8 +65,36 @@ void main() { await plugin.init( const InitParameters(clientId: 'some-non-null-client-id'), ); + }); + + testWidgets('throws if init is called twice', (_) async { + await plugin.init( + const InitParameters(clientId: 'some-non-null-client-id'), + ); + + // Calling init() a second time should throw state error + expect( + () => plugin.init( + const InitParameters(clientId: 'some-non-null-client-id'), + ), + throwsStateError, + ); + }); + + testWidgets('throws if init is called twice synchronously', (_) async { + final Future firstInit = plugin.init( + const InitParameters(clientId: 'some-non-null-client-id'), + ); + + // Calling init() a second time synchronously should throw state error + expect( + () => plugin.init( + const InitParameters(clientId: 'some-non-null-client-id'), + ), + throwsStateError, + ); - expect(plugin.initialized, completes); + await firstInit; }); testWidgets('asserts clientId is not null', (_) async { @@ -85,35 +113,6 @@ void main() { ); }, throwsAssertionError); }); - - testWidgets('must be called for most of the API to work', (_) async { - expect(() async { - await plugin.attemptLightweightAuthentication( - const AttemptLightweightAuthenticationParameters(), - ); - }, throwsStateError); - - expect(() async { - await plugin.clientAuthorizationTokensForScopes( - const ClientAuthorizationTokensForScopesParameters( - request: AuthorizationRequestDetails( - scopes: [], - userId: null, - email: null, - promptIfUnauthorized: false, - ), - ), - ); - }, throwsStateError); - - expect(() async { - await plugin.signOut(const SignOutParams()); - }, throwsStateError); - - expect(() async { - await plugin.disconnect(const DisconnectParams()); - }, throwsStateError); - }); }); group('support queries', () { diff --git a/packages/google_sign_in/google_sign_in_web/example/integration_test/web_only_test.dart b/packages/google_sign_in/google_sign_in_web/example/integration_test/web_only_test.dart index dd86cd8cbe5c..5e0260e23d5e 100644 --- a/packages/google_sign_in/google_sign_in_web/example/integration_test/web_only_test.dart +++ b/packages/google_sign_in/google_sign_in_web/example/integration_test/web_only_test.dart @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:flutter/widgets.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:google_sign_in_platform_interface/google_sign_in_platform_interface.dart'; import 'package:google_sign_in_web/google_sign_in_web.dart' show GoogleSignInPlugin; +import 'package:google_sign_in_web/src/flexible_size_html_element_view.dart'; import 'package:google_sign_in_web/src/gis_client.dart'; import 'package:google_sign_in_web/web_only.dart' as web; import 'package:integration_test/integration_test.dart'; @@ -60,6 +61,22 @@ void main() { expect(button, isNotNull); }); + + testWidgets('renderButton shows loading then renders button', ( + WidgetTester tester, + ) async { + await tester.pumpWidget( + MaterialApp(home: Scaffold(body: web.renderButton())), + ); + + expect(find.text('Getting ready'), findsOneWidget); + + await tester.pumpAndSettle(const Duration(seconds: 3)); + + expect(find.text('Getting ready'), findsNothing); + + expect(find.byType(FlexHtmlElementView), findsOneWidget); + }); }); } diff --git a/packages/google_sign_in/google_sign_in_web/lib/google_sign_in_web.dart b/packages/google_sign_in/google_sign_in_web/lib/google_sign_in_web.dart index ab0b9b5ea5c0..e31c10a8d283 100644 --- a/packages/google_sign_in/google_sign_in_web/lib/google_sign_in_web.dart +++ b/packages/google_sign_in/google_sign_in_web/lib/google_sign_in_web.dart @@ -49,7 +49,7 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { @visibleForTesting GisSdkClient? debugOverrideGisSdkClient, @visibleForTesting StreamController? debugAuthenticationController, - }) : _gisSdkClient = debugOverrideGisSdkClient, + }) : _debugOverrideGisSdkClient = debugOverrideGisSdkClient, _authenticationController = debugAuthenticationController ?? StreamController.broadcast() { @@ -68,51 +68,31 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { // A future that completes when the JS loader is done. late Future _jsSdkLoadedFuture; - // A future that completes when the `init` call is done. - Completer? _initCalled; + + /// A completer used to track whether [init] has finished. + final Completer _initCalled = Completer(); + + /// A boolean flag to track if [init] has been called. + /// + /// This is used to prevent race conditions when [init] is called multiple + /// times without awaiting. + bool _isInitCalled = false; // A StreamController to communicate status changes from the GisSdkClient. final StreamController _authenticationController; // The instance of [GisSdkClient] backing the plugin. - GisSdkClient? _gisSdkClient; + // Using late final ensures it can only be set once and throws if accessed before initialization. + late final GisSdkClient _gisSdkClient; - // A convenience getter to avoid using ! when accessing _gisSdkClient, and - // providing a slightly better error message when it is Null. - GisSdkClient get _gisClient { - assert( - _gisSdkClient != null, - 'GIS Client not initialized. ' - 'GoogleSignInPlugin::init() or GoogleSignInPlugin::initWithParams() ' - 'must be called before any other method in this plugin.', - ); - return _gisSdkClient!; - } - - // This method throws if init or initWithParams hasn't been called at some - // point in the past. It is used by the [initialized] getter to ensure that - // users can't await on a Future that will never resolve. - void _assertIsInitCalled() { - if (_initCalled == null) { - throw StateError( - 'GoogleSignInPlugin::init() or GoogleSignInPlugin::initWithParams() ' - 'must be called before any other method in this plugin.', - ); - } - } + // An optional override for the GisSdkClient, used for testing. + final GisSdkClient? _debugOverrideGisSdkClient; /// A future that resolves when the plugin is fully initialized. /// /// This ensures that the SDK has been loaded, and that the `init` method /// has finished running. - @visibleForTesting - Future get initialized { - _assertIsInitCalled(); - return Future.wait(>[ - _jsSdkLoadedFuture, - _initCalled!.future, - ]); - } + Future get _initialized => _initCalled.future; /// Stores the client ID if it was set in a meta-tag of the page. @visibleForTesting @@ -125,6 +105,14 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { @override Future init(InitParameters params) async { + // Throw if init() is called more than once + if (_isInitCalled) { + throw StateError( + 'init() has already been called. Calling init() more than once results in undefined behavior.', + ); + } + _isInitCalled = true; + final String? appClientId = params.clientId ?? autoDetectedClientId; assert( appClientId != null, @@ -138,27 +126,27 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { 'serverClientId is not supported on Web.', ); - _initCalled = Completer(); - await _jsSdkLoadedFuture; - _gisSdkClient ??= GisSdkClient( - clientId: appClientId!, - nonce: params.nonce, - hostedDomain: params.hostedDomain, - authenticationController: _authenticationController, - loggingEnabled: kDebugMode, - ); - - _initCalled!.complete(); // Signal that `init` is fully done. + _gisSdkClient = + _debugOverrideGisSdkClient ?? + GisSdkClient( + clientId: appClientId!, + nonce: params.nonce, + hostedDomain: params.hostedDomain, + authenticationController: _authenticationController, + loggingEnabled: kDebugMode, + ); + + _initCalled.complete(); } @override Future? attemptLightweightAuthentication( AttemptLightweightAuthenticationParameters params, ) { - initialized.then((void value) { - _gisClient.requestOneTap(); + _initialized.then((void value) { + _gisSdkClient.requestOneTap(); }); // One tap does not necessarily return immediately, and may never return, // so clients should not await it. Return null to signal that. @@ -183,26 +171,26 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { @override Future signOut(SignOutParams params) async { - await initialized; + await _initialized; - await _gisClient.signOut(); + await _gisSdkClient.signOut(); } @override Future disconnect(DisconnectParams params) async { - await initialized; + await _initialized; - await _gisClient.disconnect(); + await _gisSdkClient.disconnect(); } @override Future clientAuthorizationTokensForScopes( ClientAuthorizationTokensForScopesParameters params, ) async { - await initialized; + await _initialized; _validateScopes(params.request.scopes); - final String? token = await _gisClient.requestScopes( + final String? token = await _gisSdkClient.requestScopes( params.request.scopes, promptIfUnauthorized: params.request.promptIfUnauthorized, userHint: params.request.userId, @@ -216,7 +204,7 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { Future serverAuthorizationTokensForScopes( ServerAuthorizationTokensForScopesParameters params, ) async { - await initialized; + await _initialized; _validateScopes(params.request.scopes); // There is no way to know whether the flow will prompt in advance, so @@ -225,7 +213,9 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { return null; } - final String? code = await _gisClient.requestServerAuthCode(params.request); + final String? code = await _gisSdkClient.requestServerAuthCode( + params.request, + ); return code == null ? null : ServerAuthorizationTokenData(serverAuthCode: code); @@ -247,8 +237,8 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { Future clearAuthorizationToken( ClearAuthorizationTokenParams params, ) async { - await initialized; - return _gisClient.clearAuthorizationToken(params.accessToken); + await _initialized; + return _gisSdkClient.clearAuthorizationToken(params.accessToken); } @override @@ -278,13 +268,13 @@ class GoogleSignInPlugin extends GoogleSignInPlatform { configuration ?? GSIButtonConfiguration(); return FutureBuilder( key: Key(config.hashCode.toString()), - future: initialized, + future: _initialized, builder: (BuildContext context, AsyncSnapshot snapshot) { - if (snapshot.hasData) { + if (snapshot.connectionState == ConnectionState.done) { return FlexHtmlElementView( viewType: 'gsi_login_button', onElementCreated: (Object element) { - _gisClient.renderButton(element, config); + _gisSdkClient.renderButton(element, config); }, ); } diff --git a/packages/google_sign_in/google_sign_in_web/pubspec.yaml b/packages/google_sign_in/google_sign_in_web/pubspec.yaml index 30ff5db731af..c824fbdc9fa5 100644 --- a/packages/google_sign_in/google_sign_in_web/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_web/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Google Sign-In, a secure authentication system for signing in with a Google account on Android, iOS and Web. repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22 -version: 1.1.2 +version: 1.1.3 environment: sdk: ^3.9.0 From ea9b53ba608a8aa6d0d243832fdcee37928e1614 Mon Sep 17 00:00:00 2001 From: Christoph Deil Date: Fri, 13 Mar 2026 19:50:14 +0100 Subject: [PATCH 02/55] [camera] Remove outdated TODO in camera_controller.dart (#11239) @stuartmorgan-g - this PR is a small cleanup that resolves an old TODO comment referencing Dart 2. The camera package now requires Dart 3.9 so `unawaited` can be used. ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- packages/camera/camera/lib/src/camera_controller.dart | 10 +++------- .../example/lib/camera_controller.dart | 8 ++------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/camera/camera/lib/src/camera_controller.dart b/packages/camera/camera/lib/src/camera_controller.dart index 5a6e71ae3055..53e029b0faad 100644 --- a/packages/camera/camera/lib/src/camera_controller.dart +++ b/packages/camera/camera/lib/src/camera_controller.dart @@ -28,10 +28,6 @@ Future> availableCameras() async { return CameraPlatform.instance.availableCameras(); } -// TODO(stuartmorgan): Remove this once the package requires 2.10, where the -// dart:async `unawaited` accepts a nullable future. -void _unawaited(Future? future) {} - /// The state of a [CameraController]. class CameraValue { /// Creates a new camera controller state. @@ -353,7 +349,7 @@ class CameraController extends ValueNotifier { mediaSettings, ); - _unawaited( + unawaited( CameraPlatform.instance.onCameraInitialized(_cameraId).first.then(( CameraInitializedEvent event, ) { @@ -361,7 +357,7 @@ class CameraController extends ValueNotifier { }), ); - _unawaited( + unawaited( CameraPlatform.instance.onCameraError(_cameraId).first.then(( CameraErrorEvent event, ) { @@ -1008,7 +1004,7 @@ class CameraController extends ValueNotifier { if (_isDisposed) { return; } - _unawaited(_deviceOrientationSubscription?.cancel()); + unawaited(_deviceOrientationSubscription?.cancel()); _isDisposed = true; super.dispose(); if (_initializeFuture != null) { diff --git a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart index c9f989df5250..ae95d306d52a 100644 --- a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart +++ b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart @@ -28,10 +28,6 @@ Future> availableCameras() async { return CameraPlatform.instance.availableCameras(); } -// TODO(stuartmorgan): Remove this once the package requires 2.10, where the -// dart:async `unawaited` accepts a nullable future. -void _unawaited(Future? future) {} - /// The state of a [CameraController]. class CameraValue { /// Creates a new camera controller state. @@ -304,7 +300,7 @@ class CameraController extends ValueNotifier { mediaSettings ?? const MediaSettings(), ); - _unawaited( + unawaited( CameraPlatform.instance.onCameraInitialized(_cameraId).first.then(( CameraInitializedEvent event, ) { @@ -857,7 +853,7 @@ class CameraController extends ValueNotifier { if (_isDisposed) { return; } - _unawaited(_deviceOrientationSubscription?.cancel()); + unawaited(_deviceOrientationSubscription?.cancel()); _isDisposed = true; super.dispose(); if (_initCalled != null) { From 392d771dac6e7956d30fe93ef2595df787f5a287 Mon Sep 17 00:00:00 2001 From: Valentin Vignal <32538273+ValentinVignal@users.noreply.github.com> Date: Sat, 14 Mar 2026 06:12:01 +0800 Subject: [PATCH 03/55] [go_router] Add `encoder`,`decoder` and `compare` parameters to `TypedQueryParameter` (#11067) Part of - https://github.com/flutter/flutter/issues/112152 - https://github.com/flutter/flutter/issues/110781 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- packages/go_router/lib/src/route_data.dart | 57 ++++++++++++++++++- .../support_custom_types.yaml | 3 + packages/go_router/test/route_data_test.dart | 21 ++++++- 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 packages/go_router/pending_changelogs/support_custom_types.yaml diff --git a/packages/go_router/lib/src/route_data.dart b/packages/go_router/lib/src/route_data.dart index 373efcb1d0cb..1d156afca729 100644 --- a/packages/go_router/lib/src/route_data.dart +++ b/packages/go_router/lib/src/route_data.dart @@ -620,11 +620,42 @@ class NoOpPage extends Page { throw UnsupportedError('Should never be called'); } +/// Signature of custom query parameter encoding. +/// +/// The function takes a parameter value of type `T` and returns a string +/// representation suitable for use in a URI. The returned string is escaped to +/// be URL-safe. +/// +/// For example, a parameter value of `'field with space'` will generate a query +/// parameter value of `'field+with+space'`. +typedef QueryParameterEncoder = String Function(T value); + +/// Signature for custom query parameter decoding functions. +/// +/// Converts an encoded string from the URI into a parameter value of type `T`. +/// +/// The [value] parameter contains the encoded string from the URI. if the +/// parameter is absent from the URI. +typedef QueryParameterDecoder = T Function(String value); + /// Annotation to override the URI name for a route parameter. +@optionalTypeArgs @Target({TargetKind.parameter}) -class TypedQueryParameter { +class TypedQueryParameter { /// Annotation to override the URI name for a route parameter. - const TypedQueryParameter({this.name}); + const TypedQueryParameter({ + this.name, + this.encoder, + this.decoder, + this.compare, + }) : assert( + (encoder == null) == (decoder == null), + 'encoder and decoder must both be provided together', + ), + assert( + compare == null || encoder != null, + 'compare function requires an encoder to be provided', + ); /// The name of the parameter in the URI. /// @@ -647,4 +678,26 @@ class TypedQueryParameter { /// It is escaped to be URL-safe. For example `'field with space'` will /// generate a query parameter named `'field+with+space'`. final String? name; + + /// A function that converts a parameter value to a string for use in the URI. + /// + /// See [QueryParameterEncoder] for details. + final QueryParameterEncoder? encoder; + + /// A function that converts a string from the URI to a parameter value. + /// + /// See [QueryParameterDecoder] for details. + final QueryParameterDecoder? decoder; + + /// A function that determines if two parameter values differ. + /// + /// Returns `true` when the values differ and `false` when they match. + /// + /// Used to decide whether to include a parameter in the URI when a default + /// value exists. If the parameter equals its default value, it is omitted + /// from the URI; otherwise, it is included. + /// + /// This should be provided if the parameter has a default value and is is not + /// a primitive type. + final bool Function(T, T)? compare; } diff --git a/packages/go_router/pending_changelogs/support_custom_types.yaml b/packages/go_router/pending_changelogs/support_custom_types.yaml new file mode 100644 index 000000000000..40240bfcae31 --- /dev/null +++ b/packages/go_router/pending_changelogs/support_custom_types.yaml @@ -0,0 +1,3 @@ +changelog: | + - Adds `encoder`, `decoder` and `compare` parameters to `TypedQueryParameter` annotation for custom encoding, decoding and comparison of query parameters in `TypedGoRoute` constructors. +version: minor diff --git a/packages/go_router/test/route_data_test.dart b/packages/go_router/test/route_data_test.dart index a6a81b385762..9a0089080e0f 100644 --- a/packages/go_router/test/route_data_test.dart +++ b/packages/go_router/test/route_data_test.dart @@ -259,6 +259,10 @@ final List _relativeRoutes = [ ), ]; +String _coder(String? value) => ''; + +bool _compare(String a, String b) => true; + void main() { group('GoRouteData', () { testWidgets('It should build the page from the overridden build method', ( @@ -796,8 +800,23 @@ void main() { }); test('TypedQueryParameter stores the name', () { - const parameter = TypedQueryParameter(name: 'customName'); + const TypedQueryParameter parameter = TypedQueryParameter( + name: 'customName', + ); expect(parameter.name, 'customName'); }); + + test('TypedQueryParameter stores the encoder, decoder and compare', () { + const TypedQueryParameter parameter = TypedQueryParameter( + name: 'customName', + encoder: _coder, + decoder: _coder, + compare: _compare, + ); + + expect(parameter.encoder, _coder); + expect(parameter.decoder, _coder); + expect(parameter.compare, _compare); + }); } From 1ad1a084c057b6c0383f6cf0ba9df70d5d4b0fc6 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 14 Mar 2026 12:14:06 -0400 Subject: [PATCH 04/55] Roll Flutter from 9e36adba5069 to 732e05dd483c (20 revisions) (#11242) https://github.com/flutter/flutter/compare/9e36adba5069...732e05dd483c 2026-03-13 engine-flutter-autoroll@skia.org Roll Dart SDK from 330b797abd09 to d5f6d3c17499 (1 revision) (flutter/flutter#183640) 2026-03-13 engine-flutter-autoroll@skia.org Roll Skia from 9eb5598e1b2c to 029229d8be91 (3 revisions) (flutter/flutter#183638) 2026-03-13 engine-flutter-autoroll@skia.org Roll Skia from 9be8fdf31ff4 to 9eb5598e1b2c (2 revisions) (flutter/flutter#183630) 2026-03-13 victorsanniay@gmail.com Add awaits to flutter/test callsites (flutter/flutter#183487) 2026-03-13 victorsanniay@gmail.com Add await to more flutter/flutter callsites (flutter/flutter#183413) 2026-03-13 engine-flutter-autoroll@skia.org Roll Dart SDK from d1d84ab7ef0d to 330b797abd09 (2 revisions) (flutter/flutter#183624) 2026-03-13 34465683+rkishan516@users.noreply.github.com refactor: remove material import from sliver_resizing_header_test and sliver_prototype_item_extent_test (flutter/flutter#183562) 2026-03-13 36861262+QuncCccccc@users.noreply.github.com Fix reselection issue after the text is cleared (flutter/flutter#183545) 2026-03-13 engine-flutter-autoroll@skia.org Roll Skia from 255bd243276b to 9be8fdf31ff4 (5 revisions) (flutter/flutter#183616) 2026-03-12 git@reb0.org ci: Remove `bringup` from orchestrator for windows_arm_host_engine on Linux (flutter/flutter#183574) 2026-03-12 chingjun@google.com Use operator<=> instead of std::less for UniqueID. (flutter/flutter#183600) 2026-03-12 30870216+gaaclarke@users.noreply.github.com Specified the repo the cp label will be removed from (flutter/flutter#183611) 2026-03-12 1961493+harryterkelsen@users.noreply.github.com [web] Fix Web SDK build on macOS (flutter/flutter#183549) 2026-03-12 engine-flutter-autoroll@skia.org Roll Skia from 38761e1803d0 to 255bd243276b (3 revisions) (flutter/flutter#183603) 2026-03-12 engine-flutter-autoroll@skia.org Roll Dart SDK from 2e1e7a09fce6 to d1d84ab7ef0d (1 revision) (flutter/flutter#183604) 2026-03-12 15619084+vashworth@users.noreply.github.com Fix macOS relative plugin Xcode file path (flutter/flutter#183593) 2026-03-12 30870216+gaaclarke@users.noreply.github.com Made cp labels get rejected on issues. (flutter/flutter#183595) 2026-03-12 engine-flutter-autoroll@skia.org Roll Packages from ecace66e92c2 to 02f231f37676 (4 revisions) (flutter/flutter#183594) 2026-03-12 engine-flutter-autoroll@skia.org Roll Dart SDK from 59be21f25f2d to 2e1e7a09fce6 (1 revision) (flutter/flutter#183577) 2026-03-12 engine-flutter-autoroll@skia.org Roll Skia from 46f41493ebf4 to 38761e1803d0 (6 revisions) (flutter/flutter#183590) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 1865b6bc3cee..745dc15e8f87 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -9e36adba50697eda926846b6f2eb2a64777f8538 +732e05dd483cf7f8ec68955e13fc9a5504d5f26a From 409793bcb784b9464def8698557005fb8851a9e6 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Sat, 14 Mar 2026 12:14:08 -0400 Subject: [PATCH 05/55] [various] Remove CocoaPods from examples (#11237) For almost all projects in the repository, this does the steps recommended by the warning when building with Swift Package Manager enabled (for both ios/ and macos/, wherever they are present): - Runs `pod deintigrate` - Deletes `Podfile` - Removes the CocoaPod xcconfig references in the Flutter Debug and Release xcconfigs. When running without Swift Package Manager enabled, `flutter` will automatically re-add this integration, so this won't break anyone running these examples on `stable`. However, we are no longer expecting this to be a common workflow (CI no longer builds these apps in non-SwiftPM mode, and regular flutter/package contributors are likely to be on `master` where SwiftPM is on by default now), so it's no longer useful to have the integration checked in. The only packages that have not had Pod integration removed are: - `google_maps_flutter_ios` because it doesn't (and can't) support Swift Package Manager. - `google_maps_flutter` because it depends on `google_maps_flutter_ios` as the default implementation. This also removes the precache steps from `ios_build_all_packages` and `macos_build_all_packages`. Because that step runs per package, it was doing a lot of caching of native code that was package-scoped, and thus wouldn't be used by the all-packages app, and in the current configuration isn't even the right kind of dependency (it will fetch SwiftPM deps, but the all-packages app uses CocoaPods still to cover that mode). Follow-up to https://github.com/flutter/flutter/issues/172427 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .ci/targets/ios_build_all_packages.yaml | 4 - .ci/targets/macos_build_all_packages.yaml | 4 - .../camera/example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - packages/camera/camera/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 2 - .../example/ios/Flutter/Release.xcconfig | 2 - .../camera_avfoundation/example/ios/Podfile | 42 -------- .../ios/Runner.xcodeproj/project.pbxproj | 72 ------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 43 +------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../file_selector/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../file_selector/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 50 --------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../file_selector_ios/example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 83 +------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../file_selector_macos/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 45 +------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - packages/go_router/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - packages/go_router/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - packages/google_fonts/example/ios/Podfile | 41 ------- .../ios/Runner.xcodeproj/project.pbxproj | 50 --------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - packages/google_fonts/example/macos/Podfile | 40 ------- .../macos/Runner.xcodeproj/project.pbxproj | 50 --------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 45 -------- .../ios/Runner.xcodeproj/project.pbxproj | 99 +---------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 45 -------- .../ios/Runner.xcodeproj/project.pbxproj | 99 +---------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../google_sign_in/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 43 +------- .../xcshareddata/swiftpm/Package.resolved | 69 ++++++++++++ .../xcshareddata/swiftpm/Package.resolved | 68 ++++++++++++ .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../google_sign_in/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 49 --------- .../xcshareddata/swiftpm/Package.resolved | 68 ++++++++++++ .../xcshareddata/swiftpm/Package.resolved | 68 ++++++++++++ .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../google_sign_in_ios/example/ios/Podfile | 44 -------- .../ios/Runner.xcodeproj/project.pbxproj | 80 +------------- .../xcshareddata/swiftpm/Package.resolved | 69 ++++++++++++ .../xcshareddata/swiftpm/Package.resolved | 69 ++++++++++++ .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../google_sign_in_ios/example/macos/Podfile | 42 -------- .../macos/Runner.xcodeproj/project.pbxproj | 83 +------------- .../xcshareddata/swiftpm/Package.resolved | 68 ++++++++++++ .../xcshareddata/swiftpm/Package.resolved | 69 ++++++++++++ .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../image_picker/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../image_picker/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../image_picker_ios/example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 82 +------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../image_picker_macos/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../in_app_purchase/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 46 +------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../in_app_purchase/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 41 ------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 64 ----------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../example/macos/Podfile | 43 -------- .../macos/Runner.xcodeproj/project.pbxproj | 73 +------------ .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../interactive_media_ads/example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 77 ------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../local_auth/local_auth/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 43 +------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../local_auth/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 51 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../local_auth_darwin/example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 77 ------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../local_auth_darwin/example/macos/Podfile | 42 -------- .../macos/Runner.xcodeproj/project.pbxproj | 81 +------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../path_provider/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../path_provider/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 44 -------- .../ios/Runner.xcodeproj/project.pbxproj | 77 ------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../example/macos/Podfile | 43 -------- .../macos/Runner.xcodeproj/project.pbxproj | 77 ------------- .../example/app/ios/Flutter/Debug.xcconfig | 1 - .../example/app/ios/Flutter/Release.xcconfig | 1 - packages/pigeon/example/app/ios/Podfile | 40 ------- .../app/ios/Runner.xcodeproj/project.pbxproj | 47 +------- .../app/macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - packages/pigeon/example/app/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 50 --------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 46 -------- .../ios/Runner.xcodeproj/project.pbxproj | 101 +++--------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../example/macos/Podfile | 42 -------- .../macos/Runner.xcodeproj/project.pbxproj | 81 +------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../test_plugin/example/ios/Podfile | 48 --------- .../ios/Runner.xcodeproj/project.pbxproj | 83 +------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../test_plugin/example/macos/Podfile | 47 -------- .../macos/Runner.xcodeproj/project.pbxproj | 81 +------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../pointer_interceptor/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 43 +------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 83 +------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../quick_actions/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 43 +------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../quick_actions_ios/example/ios/Podfile | 41 ------- .../ios/Runner.xcodeproj/project.pbxproj | 86 --------------- .../example/remote/ios/Flutter/Debug.xcconfig | 1 - .../remote/ios/Flutter/Release.xcconfig | 1 - packages/rfw/example/remote/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - packages/rfw/example/remote/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../shared_preferences/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../shared_preferences/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 92 +--------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../example/macos/Podfile | 43 -------- .../macos/Runner.xcodeproj/project.pbxproj | 89 ++------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../url_launcher/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 52 +-------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../url_launcher/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 52 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../url_launcher_ios/example/ios/Podfile | 43 -------- .../ios/Runner.xcodeproj/project.pbxproj | 77 ------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../url_launcher_macos/example/macos/Podfile | 43 -------- .../macos/Runner.xcodeproj/project.pbxproj | 81 +------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../video_player/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 41 ------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../video_player/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 49 --------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 41 ------- .../ios/Runner.xcodeproj/project.pbxproj | 76 ------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../example/macos/Podfile | 42 -------- .../macos/Runner.xcodeproj/project.pbxproj | 81 +------------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../webview_flutter/example/ios/Podfile | 40 ------- .../ios/Runner.xcodeproj/project.pbxproj | 43 +------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../webview_flutter/example/macos/Podfile | 39 ------- .../macos/Runner.xcodeproj/project.pbxproj | 51 +-------- .../example/ios/Flutter/Debug.xcconfig | 1 - .../example/ios/Flutter/Release.xcconfig | 1 - .../example/ios/Podfile | 42 -------- .../ios/Runner.xcodeproj/project.pbxproj | 72 ------------- .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../example/macos/Podfile | 42 -------- .../macos/Runner.xcodeproj/project.pbxproj | 81 +------------- 258 files changed, 634 insertions(+), 6551 deletions(-) delete mode 100644 packages/camera/camera/example/ios/Podfile delete mode 100644 packages/camera/camera_avfoundation/example/ios/Podfile delete mode 100644 packages/extension_google_sign_in_as_googleapis_auth/example/ios/Podfile delete mode 100644 packages/file_selector/file_selector/example/ios/Podfile delete mode 100644 packages/file_selector/file_selector/example/macos/Podfile delete mode 100644 packages/file_selector/file_selector_ios/example/ios/Podfile delete mode 100644 packages/file_selector/file_selector_macos/example/macos/Podfile delete mode 100644 packages/go_router/example/ios/Podfile delete mode 100644 packages/go_router/example/macos/Podfile delete mode 100644 packages/google_fonts/example/ios/Podfile delete mode 100644 packages/google_fonts/example/macos/Podfile delete mode 100644 packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Podfile delete mode 100644 packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Podfile delete mode 100644 packages/google_sign_in/google_sign_in/example/ios/Podfile create mode 100644 packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 packages/google_sign_in/google_sign_in/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 packages/google_sign_in/google_sign_in/example/macos/Podfile create mode 100644 packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 packages/google_sign_in/google_sign_in/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 packages/google_sign_in/google_sign_in_ios/example/ios/Podfile create mode 100644 packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 packages/google_sign_in/google_sign_in_ios/example/macos/Podfile create mode 100644 packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 packages/image_picker/image_picker/example/ios/Podfile delete mode 100644 packages/image_picker/image_picker/example/macos/Podfile delete mode 100644 packages/image_picker/image_picker_ios/example/ios/Podfile delete mode 100644 packages/image_picker/image_picker_macos/example/macos/Podfile delete mode 100644 packages/in_app_purchase/in_app_purchase/example/ios/Podfile delete mode 100644 packages/in_app_purchase/in_app_purchase/example/macos/Podfile delete mode 100644 packages/in_app_purchase/in_app_purchase_storekit/example/ios/Podfile delete mode 100644 packages/in_app_purchase/in_app_purchase_storekit/example/macos/Podfile delete mode 100644 packages/interactive_media_ads/example/ios/Podfile delete mode 100644 packages/local_auth/local_auth/example/ios/Podfile delete mode 100644 packages/local_auth/local_auth/example/macos/Podfile delete mode 100644 packages/local_auth/local_auth_darwin/example/ios/Podfile delete mode 100644 packages/local_auth/local_auth_darwin/example/macos/Podfile delete mode 100644 packages/path_provider/path_provider/example/ios/Podfile delete mode 100644 packages/path_provider/path_provider/example/macos/Podfile delete mode 100644 packages/path_provider/path_provider_foundation/example/ios/Podfile delete mode 100644 packages/path_provider/path_provider_foundation/example/macos/Podfile delete mode 100644 packages/pigeon/example/app/ios/Podfile delete mode 100644 packages/pigeon/example/app/macos/Podfile delete mode 100644 packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Podfile delete mode 100644 packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Podfile delete mode 100644 packages/pigeon/platform_tests/test_plugin/example/ios/Podfile delete mode 100644 packages/pigeon/platform_tests/test_plugin/example/macos/Podfile delete mode 100644 packages/pointer_interceptor/pointer_interceptor/example/ios/Podfile delete mode 100644 packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Podfile delete mode 100644 packages/quick_actions/quick_actions/example/ios/Podfile delete mode 100644 packages/quick_actions/quick_actions_ios/example/ios/Podfile delete mode 100644 packages/rfw/example/remote/ios/Podfile delete mode 100644 packages/rfw/example/remote/macos/Podfile delete mode 100644 packages/shared_preferences/shared_preferences/example/ios/Podfile delete mode 100644 packages/shared_preferences/shared_preferences/example/macos/Podfile delete mode 100644 packages/shared_preferences/shared_preferences_foundation/example/ios/Podfile delete mode 100644 packages/shared_preferences/shared_preferences_foundation/example/macos/Podfile delete mode 100644 packages/url_launcher/url_launcher/example/ios/Podfile delete mode 100644 packages/url_launcher/url_launcher/example/macos/Podfile delete mode 100644 packages/url_launcher/url_launcher_ios/example/ios/Podfile delete mode 100644 packages/url_launcher/url_launcher_macos/example/macos/Podfile delete mode 100644 packages/video_player/video_player/example/ios/Podfile delete mode 100644 packages/video_player/video_player/example/macos/Podfile delete mode 100644 packages/video_player/video_player_avfoundation/example/ios/Podfile delete mode 100644 packages/video_player/video_player_avfoundation/example/macos/Podfile delete mode 100644 packages/webview_flutter/webview_flutter/example/ios/Podfile delete mode 100644 packages/webview_flutter/webview_flutter/example/macos/Podfile delete mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/Podfile delete mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/macos/Podfile diff --git a/.ci/targets/ios_build_all_packages.yaml b/.ci/targets/ios_build_all_packages.yaml index ae2bca687588..3085f2bada5d 100644 --- a/.ci/targets/ios_build_all_packages.yaml +++ b/.ci/targets/ios_build_all_packages.yaml @@ -2,10 +2,6 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh infra_step: true # Note infra steps failing prevents "always" from running. - - name: download Dart and iOS deps - script: .ci/scripts/tool_runner.sh - args: ["fetch-deps", "--ios", "--supporting-target-platforms-only"] - infra_step: true - name: create all_packages app script: .ci/scripts/create_all_packages_app.sh # build-examples builds with Swift Package Manager, so run build-all without diff --git a/.ci/targets/macos_build_all_packages.yaml b/.ci/targets/macos_build_all_packages.yaml index dacc8d639188..115d4a2c6a28 100644 --- a/.ci/targets/macos_build_all_packages.yaml +++ b/.ci/targets/macos_build_all_packages.yaml @@ -2,10 +2,6 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh infra_step: true # Note infra steps failing prevents "always" from running. - - name: download Dart and macOS deps - script: .ci/scripts/tool_runner.sh - args: ["fetch-deps", "--macos", "--supporting-target-platforms-only"] - infra_step: true - name: create all_packages app script: .ci/scripts/create_all_packages_app.sh # build-examples builds with Swift Package Manager, so run build-all without diff --git a/packages/camera/camera/example/ios/Flutter/Debug.xcconfig b/packages/camera/camera/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/camera/camera/example/ios/Flutter/Debug.xcconfig +++ b/packages/camera/camera/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/camera/camera/example/ios/Flutter/Release.xcconfig b/packages/camera/camera/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/camera/camera/example/ios/Flutter/Release.xcconfig +++ b/packages/camera/camera/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/camera/camera/example/ios/Podfile b/packages/camera/camera/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/camera/camera/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj index c87ac41c4030..ee233668159d 100644 --- a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB6758FFC1A59E7774509E39 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CA17D06B2B6044C6A951FD9 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -31,15 +30,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0010728987EF6ACD54767767 /* 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 = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 18740A70956D02B893DD99B5 /* 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 = ""; }; - 1B2BDE3874E413D6318A95CE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6CA17D06B2B6044C6A951FD9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -48,7 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - EB6758FFC1A59E7774509E39 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 329964CB20AC702500CCE47E /* Pods */ = { - isa = PBXGroup; - children = ( - 0010728987EF6ACD54767767 /* Pods-Runner.debug.xcconfig */, - 18740A70956D02B893DD99B5 /* Pods-Runner.release.xcconfig */, - 1B2BDE3874E413D6318A95CE /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 511227E4C822303A7548D1DE /* Frameworks */ = { - isa = PBXGroup; - children = ( - 6CA17D06B2B6044C6A951FD9 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 329964CB20AC702500CCE47E /* Pods */, - 511227E4C822303A7548D1DE /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C277C3093C2BC2BEC825E592 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -239,28 +211,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C277C3093C2BC2BEC825E592 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/camera/camera_avfoundation/example/ios/Flutter/Debug.xcconfig b/packages/camera/camera_avfoundation/example/ios/Flutter/Debug.xcconfig index b2f5fae9c254..592ceee85b89 100644 --- a/packages/camera/camera_avfoundation/example/ios/Flutter/Debug.xcconfig +++ b/packages/camera/camera_avfoundation/example/ios/Flutter/Debug.xcconfig @@ -1,3 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/camera/camera_avfoundation/example/ios/Flutter/Release.xcconfig b/packages/camera/camera_avfoundation/example/ios/Flutter/Release.xcconfig index 88c29144c836..592ceee85b89 100644 --- a/packages/camera/camera_avfoundation/example/ios/Flutter/Release.xcconfig +++ b/packages/camera/camera_avfoundation/example/ios/Flutter/Release.xcconfig @@ -1,3 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/camera/camera_avfoundation/example/ios/Podfile b/packages/camera/camera_avfoundation/example/ios/Podfile deleted file mode 100644 index f64f36010b70..000000000000 --- a/packages/camera/camera_avfoundation/example/ios/Podfile +++ /dev/null @@ -1,42 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end 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 0345270bc947..2776179e27a0 100644 --- a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,10 +7,8 @@ objects = { /* Begin PBXBuildFile section */ - 1000364CB781922C6D6AAA4A /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DDC4CE84A8B378AE4A8CD9C /* libPods-RunnerTests.a */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 54D650172516862D30686934 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ECAF63F924EFA2D68883BA85 /* libPods-Runner.a */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 970ADABE2D6740A900EFDCD9 /* MockWritableData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 970ADABD2D6740A900EFDCD9 /* MockWritableData.swift */; }; 972CA92B2D5A1D8C004B846F /* CameraPropertiesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 972CA92A2D5A1D8C004B846F /* CameraPropertiesTests.swift */; }; @@ -92,7 +90,6 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4A191381C3593DF1AC4E7559 /* 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 = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* camera_avfoundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = camera_avfoundation; path = ../../ios/camera_avfoundation; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; @@ -126,9 +123,6 @@ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 97DB234C2D566D0700CEFE66 /* CameraPreviewPauseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPreviewPauseTests.swift; sourceTree = ""; }; - 9DDC4CE84A8B378AE4A8CD9C /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - A8F314CD1C64E9257EBC811D /* 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 = ""; }; - B61D98BBC8FB276D1C4A7BB2 /* 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 = ""; }; E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureVideoDataOutput.swift; sourceTree = ""; }; E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamExposureTests.swift; sourceTree = ""; }; E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginDelegatingMethodTests.swift; sourceTree = ""; }; @@ -156,8 +150,6 @@ E1FFEAAC2D6C8DD700B14107 /* MockCamera.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCamera.swift; sourceTree = ""; }; E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginCreateCameraTests.swift; sourceTree = ""; }; E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginInitializeCameraTests.swift; sourceTree = ""; }; - E67C6DBF6478BE708993169F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - ECAF63F924EFA2D68883BA85 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -165,7 +157,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1000364CB781922C6D6AAA4A /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -174,7 +165,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 54D650172516862D30686934 /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -216,15 +206,6 @@ path = RunnerTests; sourceTree = ""; }; - 3242FD2B467C15C62200632F /* Frameworks */ = { - isa = PBXGroup; - children = ( - ECAF63F924EFA2D68883BA85 /* libPods-Runner.a */, - 9DDC4CE84A8B378AE4A8CD9C /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; 7F29EB3F2D281C6D00740257 /* Mocks */ = { isa = PBXGroup; children = ( @@ -274,7 +255,6 @@ 03BB76692665316900CE5A93 /* RunnerTests */, 97C146EF1CF9000F007C117D /* Products */, FD386F00E98D73419C929072 /* Pods */, - 3242FD2B467C15C62200632F /* Frameworks */, ); sourceTree = ""; }; @@ -314,10 +294,6 @@ FD386F00E98D73419C929072 /* Pods */ = { isa = PBXGroup; children = ( - A8F314CD1C64E9257EBC811D /* Pods-Runner.debug.xcconfig */, - 4A191381C3593DF1AC4E7559 /* Pods-Runner.release.xcconfig */, - B61D98BBC8FB276D1C4A7BB2 /* Pods-RunnerTests.debug.xcconfig */, - E67C6DBF6478BE708993169F /* Pods-RunnerTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -329,7 +305,6 @@ isa = PBXNativeTarget; buildConfigurationList = 03BB76712665316900CE5A93 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 422786A96136AA9087A2041B /* [CP] Check Pods Manifest.lock */, 03BB76642665316900CE5A93 /* Sources */, 03BB76652665316900CE5A93 /* Frameworks */, 03BB76662665316900CE5A93 /* Resources */, @@ -348,7 +323,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9872F2A25E8A171A111468CD /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -448,28 +422,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 422786A96136AA9087A2041B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -485,28 +437,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9872F2A25E8A171A111468CD /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -603,7 +533,6 @@ /* Begin XCBuildConfiguration section */ 03BB766F2665316900CE5A93 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B61D98BBC8FB276D1C4A7BB2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -636,7 +565,6 @@ }; 03BB76702665316900CE5A93 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E67C6DBF6478BE708993169F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; diff --git a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Debug.xcconfig b/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Debug.xcconfig +++ b/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Release.xcconfig b/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Release.xcconfig +++ b/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Podfile b/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Runner.xcodeproj/project.pbxproj b/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Runner.xcodeproj/project.pbxproj index bf47debd49db..2f1f7ec21d8d 100644 --- a/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/extension_google_sign_in_as_googleapis_auth/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6120C07ADB52591118DA0F92 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FEBA9003191C499B1DF409B /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -34,10 +33,9 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4DD8AF896C5A1FAD04B8864E /* 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 = ""; }; - 5FEBA9003191C499B1DF409B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -46,9 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C38E3FEDB1C924F84589FE0D /* 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 = ""; }; - D9D7C4D16179DE664B8D0B67 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,7 +52,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 6120C07ADB52591118DA0F92 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -83,7 +77,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, DCD469C02A082C93C9AD6AF1 /* Pods */, - C9E380208770C73E215CB425 /* Frameworks */, ); sourceTree = ""; }; @@ -110,20 +103,9 @@ path = Runner; sourceTree = ""; }; - C9E380208770C73E215CB425 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 5FEBA9003191C499B1DF409B /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; DCD469C02A082C93C9AD6AF1 /* Pods */ = { isa = PBXGroup; children = ( - C38E3FEDB1C924F84589FE0D /* Pods-Runner.debug.xcconfig */, - 4DD8AF896C5A1FAD04B8864E /* Pods-Runner.release.xcconfig */, - D9D7C4D16179DE664B8D0B67 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -135,7 +117,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 25F868589A93ACFFF1FBE8B7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -207,28 +188,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 25F868589A93ACFFF1FBE8B7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig b/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig +++ b/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig b/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig +++ b/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/file_selector/file_selector/example/ios/Podfile b/packages/file_selector/file_selector/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/file_selector/file_selector/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/file_selector/file_selector/example/ios/Runner.xcodeproj/project.pbxproj b/packages/file_selector/file_selector/example/ios/Runner.xcodeproj/project.pbxproj index 69b7f3c93f91..580c3a3461eb 100644 --- a/packages/file_selector/file_selector/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/file_selector/file_selector/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 60A7CC0D9DBA65FFCA53D36F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 682AABBBC8FE68C4C5B4A6AA /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -34,10 +33,9 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4B7E5ACCE3F2978378E88F91 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 682AABBBC8FE68C4C5B4A6AA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -46,9 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B36E3926B64867EDB87D551F /* 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 = ""; }; - D5393CFAB2F68411C1AFA702 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 60A7CC0D9DBA65FFCA53D36F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 015F2F1DEA561B08B815E4B6 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 682AABBBC8FE68C4C5B4A6AA /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 41F8DF2F792A165075528D28 /* Pods */ = { - isa = PBXGroup; - children = ( - D5393CFAB2F68411C1AFA702 /* Pods-Runner.debug.xcconfig */, - B36E3926B64867EDB87D551F /* Pods-Runner.release.xcconfig */, - 4B7E5ACCE3F2978378E88F91 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 41F8DF2F792A165075528D28 /* Pods */, - 015F2F1DEA561B08B815E4B6 /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A0D416CFEC051084A2A30D36 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -238,28 +210,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A0D416CFEC051084A2A30D36 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Release.xcconfig b/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/file_selector/file_selector/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/file_selector/file_selector/example/macos/Podfile b/packages/file_selector/file_selector/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/file_selector/file_selector/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/file_selector/file_selector/example/macos/Runner.xcodeproj/project.pbxproj b/packages/file_selector/file_selector/example/macos/Runner.xcodeproj/project.pbxproj index 863aeff3ffa6..d07c8412f7f1 100644 --- a/packages/file_selector/file_selector/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/file_selector/file_selector/example/macos/Runner.xcodeproj/project.pbxproj @@ -26,7 +26,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6BA632E5BE2B856B0D473EBF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6D20B684858422917AB21A6 /* Pods_Runner.framework */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ @@ -54,7 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 17DF935FF296A265D8BE378B /* 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 = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -69,12 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 453A41FF685B9AACDF48F0C6 /* 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 = ""; }; - 6FA96861AA2D76C12832F6C9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C6D20B684858422917AB21A6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 6BA632E5BE2B856B0D473EBF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - 58708F6C9D1522F09C51DA54 /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - 58708F6C9D1522F09C51DA54 /* Pods */ = { - isa = PBXGroup; - children = ( - 453A41FF685B9AACDF48F0C6 /* Pods-Runner.debug.xcconfig */, - 17DF935FF296A265D8BE378B /* Pods-Runner.release.xcconfig */, - 6FA96861AA2D76C12832F6C9 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C6D20B684858422917AB21A6 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A778864BDDD7B12C41D66FBB /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - A778864BDDD7B12C41D66FBB /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/file_selector/file_selector_ios/example/ios/Flutter/Debug.xcconfig b/packages/file_selector/file_selector_ios/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/file_selector/file_selector_ios/example/ios/Flutter/Debug.xcconfig +++ b/packages/file_selector/file_selector_ios/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/file_selector/file_selector_ios/example/ios/Flutter/Release.xcconfig b/packages/file_selector/file_selector_ios/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/file_selector/file_selector_ios/example/ios/Flutter/Release.xcconfig +++ b/packages/file_selector/file_selector_ios/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/file_selector/file_selector_ios/example/ios/Podfile b/packages/file_selector/file_selector_ios/example/ios/Podfile deleted file mode 100644 index 620e46eba607..000000000000 --- a/packages/file_selector/file_selector_ios/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/file_selector/file_selector_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/file_selector/file_selector_ios/example/ios/Runner.xcodeproj/project.pbxproj index 309b38f14813..620fdf265d51 100644 --- a/packages/file_selector/file_selector_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/file_selector/file_selector_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,10 +8,8 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 21160A929DC757957DE39F1E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 000792269CB6B9FE88AC567C /* Pods_Runner.framework */; }; 337EF9CE2BF7945F0079FB1A /* FileSelectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337EF9CD2BF7945F0079FB1A /* FileSelectorTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6165A2F80DFA224EAF50A1D5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC3841659BF3693FAC5A2F8F /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -43,18 +41,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 000792269CB6B9FE88AC567C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 337EF9CD2BF7945F0079FB1A /* FileSelectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSelectorTests.swift; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4A27CC0DB4EF6669B637A1E8 /* 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 = ""; }; - 5667547C6832727A744371E2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5C0E87EDCB9350EC4916E293 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 786CCB880423FD6D1019F59B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 79C120FEED85F112A72B5D35 /* 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 = ""; }; + 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; + 78DABEA22ED26510000E7860 /* file_selector_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = file_selector_ios; path = ../../ios/file_selector_ios; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -63,12 +58,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AC3841659BF3693FAC5A2F8F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C71AE4B6281C6A090086307A /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - F818CE2D7CDF8AFF94707327 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* file_selector_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = file_selector_ios; path = ../../ios/file_selector_ios; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -77,7 +67,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 21160A929DC757957DE39F1E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -85,7 +74,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6165A2F80DFA224EAF50A1D5 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,12 +83,6 @@ 2E44EE3EE3BCCAB6933171F8 /* Pods */ = { isa = PBXGroup; children = ( - 79C120FEED85F112A72B5D35 /* Pods-Runner.debug.xcconfig */, - F818CE2D7CDF8AFF94707327 /* Pods-Runner.release.xcconfig */, - 5C0E87EDCB9350EC4916E293 /* Pods-Runner.profile.xcconfig */, - 4A27CC0DB4EF6669B637A1E8 /* Pods-RunnerTests.debug.xcconfig */, - 5667547C6832727A744371E2 /* Pods-RunnerTests.release.xcconfig */, - 786CCB880423FD6D1019F59B /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -127,7 +109,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 2E44EE3EE3BCCAB6933171F8 /* Pods */, - C832A34FD3BC866442874ED0 /* Frameworks */, ); sourceTree = ""; }; @@ -163,15 +144,6 @@ path = RunnerTests; sourceTree = ""; }; - C832A34FD3BC866442874ED0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 000792269CB6B9FE88AC567C /* Pods_Runner.framework */, - AC3841659BF3693FAC5A2F8F /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -179,7 +151,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AC24910767ED5F17F5245292 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -203,7 +174,6 @@ isa = PBXNativeTarget; buildConfigurationList = C71AE4BF281C6A090086307A /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - A68B14611B411E4F96A5C80D /* [CP] Check Pods Manifest.lock */, C71AE4B2281C6A090086307A /* Sources */, C71AE4B3281C6A090086307A /* Frameworks */, C71AE4B4281C6A090086307A /* Resources */, @@ -313,50 +283,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A68B14611B411E4F96A5C80D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - AC24910767ED5F17F5245292 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -630,7 +556,6 @@ }; C71AE4BC281C6A090086307A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4A27CC0DB4EF6669B637A1E8 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -653,7 +578,6 @@ }; C71AE4BD281C6A090086307A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5667547C6832727A744371E2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -687,7 +611,6 @@ }; C71AE4BE281C6A090086307A /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 786CCB880423FD6D1019F59B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; diff --git a/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Release.xcconfig b/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/file_selector/file_selector_macos/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/file_selector/file_selector_macos/example/macos/Podfile b/packages/file_selector/file_selector_macos/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/file_selector/file_selector_macos/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/file_selector/file_selector_macos/example/macos/Runner.xcodeproj/project.pbxproj b/packages/file_selector/file_selector_macos/example/macos/Runner.xcodeproj/project.pbxproj index e20b58088b70..e4eac7950aa7 100644 --- a/packages/file_selector/file_selector_macos/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/file_selector/file_selector_macos/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4CE8B69FE511476B98B4816C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B61FB9CDECD72211FAB708CA /* Pods_Runner.framework */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ @@ -84,10 +83,6 @@ 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B61FB9CDECD72211FAB708CA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BA03A11192D3E8EEA888D495 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - C03B6D624A05212E07A5D41E /* 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 = ""; }; - D921BBD60B6562B7A5F559AC /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -103,7 +98,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 4CE8B69FE511476B98B4816C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +131,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 338EA5D226EFE72B0071837A /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, CAED34175B65FC224CC4F18C /* Pods */, ); sourceTree = ""; @@ -192,21 +185,10 @@ CAED34175B65FC224CC4F18C /* Pods */ = { isa = PBXGroup; children = ( - D921BBD60B6562B7A5F559AC /* Pods-Runner.debug.xcconfig */, - C03B6D624A05212E07A5D41E /* Pods-Runner.release.xcconfig */, - BA03A11192D3E8EEA888D495 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B61FB9CDECD72211FAB708CA /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -232,7 +214,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8F1744F37738365955F17998 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -292,7 +273,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -363,28 +344,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8F1744F37738365955F17998 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -761,7 +720,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/go_router/example/ios/Flutter/Debug.xcconfig b/packages/go_router/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/go_router/example/ios/Flutter/Debug.xcconfig +++ b/packages/go_router/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/go_router/example/ios/Flutter/Release.xcconfig b/packages/go_router/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/go_router/example/ios/Flutter/Release.xcconfig +++ b/packages/go_router/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/go_router/example/ios/Podfile b/packages/go_router/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/go_router/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/go_router/example/ios/Runner.xcodeproj/project.pbxproj b/packages/go_router/example/ios/Runner.xcodeproj/project.pbxproj index deb6394ec644..365633b3efe1 100644 --- a/packages/go_router/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/go_router/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AA177319549D428929ABDB4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0686CB2BA1F156C1D2447565 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -31,15 +30,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0686CB2BA1F156C1D2447565 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5A1A98A53CAE3552462AEDA6 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 90212C6E1492C81AAE2C3375 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -47,8 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DB438FC03DF109A82002E877 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,7 +52,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - AA177319549D428929ABDB4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -82,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - E80AFA277EC2D973F131FACC /* Pods */, - FFB63AA64ECEC712FABE7A82 /* Frameworks */, ); sourceTree = ""; }; @@ -110,25 +102,6 @@ path = Runner; sourceTree = ""; }; - E80AFA277EC2D973F131FACC /* Pods */ = { - isa = PBXGroup; - children = ( - DB438FC03DF109A82002E877 /* Pods-Runner.debug.xcconfig */, - 5A1A98A53CAE3552462AEDA6 /* Pods-Runner.release.xcconfig */, - 90212C6E1492C81AAE2C3375 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - FFB63AA64ECEC712FABE7A82 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0686CB2BA1F156C1D2447565 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 562FBE9BACC960D39E748F43 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -223,28 +195,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 562FBE9BACC960D39E748F43 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/go_router/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/go_router/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/go_router/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/go_router/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/go_router/example/macos/Flutter/Flutter-Release.xcconfig b/packages/go_router/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/go_router/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/go_router/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/go_router/example/macos/Podfile b/packages/go_router/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/go_router/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/go_router/example/macos/Runner.xcodeproj/project.pbxproj b/packages/go_router/example/macos/Runner.xcodeproj/project.pbxproj index 37c3ba2dd0a1..c1784250ad96 100644 --- a/packages/go_router/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/go_router/example/macos/Runner.xcodeproj/project.pbxproj @@ -26,7 +26,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 4579CDF431AA5E4C6FE443E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4CF4108E68F1905F4C00B71 /* Pods_Runner.framework */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ @@ -68,13 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 7718CFB2ECB4B120864B7158 /* 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 = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9A978829DFF67240C8200DEC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B4CF4108E68F1905F4C00B71 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D385DAFC8FF088B9DF2D10F2 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 4579CDF431AA5E4C6FE443E0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - 39BE41AD5E7025C012637B9B /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - 39BE41AD5E7025C012637B9B /* Pods */ = { - isa = PBXGroup; - children = ( - 7718CFB2ECB4B120864B7158 /* Pods-Runner.debug.xcconfig */, - D385DAFC8FF088B9DF2D10F2 /* Pods-Runner.release.xcconfig */, - 9A978829DFF67240C8200DEC /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B4CF4108E68F1905F4C00B71 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B2D0563F9BABB52878AAF09A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - B2D0563F9BABB52878AAF09A /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/google_fonts/example/ios/Flutter/Debug.xcconfig b/packages/google_fonts/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/google_fonts/example/ios/Flutter/Debug.xcconfig +++ b/packages/google_fonts/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_fonts/example/ios/Flutter/Release.xcconfig b/packages/google_fonts/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/google_fonts/example/ios/Flutter/Release.xcconfig +++ b/packages/google_fonts/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_fonts/example/ios/Podfile b/packages/google_fonts/example/ios/Podfile deleted file mode 100644 index e72e0b480cb9..000000000000 --- a/packages/google_fonts/example/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/google_fonts/example/ios/Runner.xcodeproj/project.pbxproj b/packages/google_fonts/example/ios/Runner.xcodeproj/project.pbxproj index e18eb05145e0..88da5469c9b2 100644 --- a/packages/google_fonts/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/google_fonts/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 5DE45FDB89D17B8C98F5DEF3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C9BC39DDA02A6DC8504BAD3 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -34,12 +33,10 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4CBD1948ED154609F24738A3 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C9BC39DDA02A6DC8504BAD3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -47,8 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0F089992F0997C25143DA81 /* 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 = ""; }; - E243FF386B80D3F749E8D1AF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 5DE45FDB89D17B8C98F5DEF3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2EBBCB14C62E0F6D715CE92E /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7C9BC39DDA02A6DC8504BAD3 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 9156333A12FC59745429C84A /* Pods */ = { - isa = PBXGroup; - children = ( - D0F089992F0997C25143DA81 /* Pods-Runner.debug.xcconfig */, - 4CBD1948ED154609F24738A3 /* Pods-Runner.release.xcconfig */, - E243FF386B80D3F749E8D1AF /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 9156333A12FC59745429C84A /* Pods */, - 2EBBCB14C62E0F6D715CE92E /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - DD83A6A31B985BA9516AED8C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -238,28 +210,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - DD83A6A31B985BA9516AED8C /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/google_fonts/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/google_fonts/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/google_fonts/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/google_fonts/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/google_fonts/example/macos/Flutter/Flutter-Release.xcconfig b/packages/google_fonts/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/google_fonts/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/google_fonts/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/google_fonts/example/macos/Podfile b/packages/google_fonts/example/macos/Podfile deleted file mode 100644 index 9ec46f8cd53c..000000000000 --- a/packages/google_fonts/example/macos/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/google_fonts/example/macos/Runner.xcodeproj/project.pbxproj b/packages/google_fonts/example/macos/Runner.xcodeproj/project.pbxproj index dc579ec96d93..d07c8412f7f1 100644 --- a/packages/google_fonts/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/google_fonts/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - BAAB3553BD77D1AA4A810BD5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04535AC30C66BC33B5C21173 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,7 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 04535AC30C66BC33B5C21173 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -71,10 +69,7 @@ 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 944BBDBA604A20FCA86A2DC9 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - DC17B9CE329D34B5EBDFE83B /* 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 = ""; }; - EDF5ECFDAA72D000FF4CD795 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - BAAB3553BD77D1AA4A810BD5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - 74B44E52BECCB2B2F5523C1A /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - 74B44E52BECCB2B2F5523C1A /* Pods */ = { - isa = PBXGroup; - children = ( - DC17B9CE329D34B5EBDFE83B /* Pods-Runner.debug.xcconfig */, - 944BBDBA604A20FCA86A2DC9 /* Pods-Runner.release.xcconfig */, - EDF5ECFDAA72D000FF4CD795 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 04535AC30C66BC33B5C21173 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C0F3D5C3726A5C5CFFE6FC02 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - C0F3D5C3726A5C5CFFE6FC02 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Debug.xcconfig b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Debug.xcconfig index e8efba114687..592ceee85b89 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Debug.xcconfig +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Release.xcconfig b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Release.xcconfig index 399e9340e6f6..592ceee85b89 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Release.xcconfig +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Podfile b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Podfile deleted file mode 100644 index 2622c5abadcd..000000000000 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Podfile +++ /dev/null @@ -1,45 +0,0 @@ -# Uncomment this line to define a global platform for your project -platform :ios, '16.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - - pod 'OCMock', '~> 3.9.1' - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Runner.xcodeproj/project.pbxproj b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Runner.xcodeproj/project.pbxproj index a30d3da3e1ee..f76391a39586 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/example/ios/Runner.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ 0DD7B6C32B744EEF00E857FD /* TileProviderControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD7B6C22B744EEF00E857FD /* TileProviderControllerTests.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 2A6906C72D263DF4001F8426 /* GroundOverlayControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6906C62D263DE7001F8426 /* GroundOverlayControllerTests.m */; }; - 2BDE99378062AE3E60B40021 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ACE0AFE8D82CD5962486AFD /* Pods_RunnerTests.framework */; }; 330909FF2D99B7A60077A751 /* MarkerControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 330909FE2D99B79B0077A751 /* MarkerControllerTests.m */; }; 3390B45E2F33AFA60094DEB9 /* PartiallyMockedMapView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3390B4582F33AFA60094DEB9 /* PartiallyMockedMapView.m */; }; 3390B45F2F33AFA60094DEB9 /* TestAssetProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 3390B45A2F33AFA60094DEB9 /* TestAssetProvider.m */; }; @@ -28,7 +27,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B3A7FA04ABB7B84780729949 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61A9A8623F5CA9BBC813DC6B /* Pods_Runner.framework */; }; F269303B2BB389BF00BF17C4 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = F269303A2BB389BF00BF17C4 /* assets */; }; F7151F13265D7ED70028CB91 /* GoogleMapsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F7151F12265D7ED70028CB91 /* GoogleMapsTests.m */; }; F7151F21265D7EE50028CB91 /* GoogleMapsUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = F7151F20265D7EE50028CB91 /* GoogleMapsUITests.m */; }; @@ -82,14 +80,11 @@ 339355BE2EB5359B00EBF864 /* HeatmapControllerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HeatmapControllerTests.m; sourceTree = ""; }; 339DF1EF2F1FE49300748863 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 339DF1F12F1FE4AD00748863 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 3ACE0AFE8D82CD5962486AFD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 478116512BEF8F47002F593E /* PolylineControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PolylineControllerTests.m; sourceTree = ""; }; 528F16822C62941000148160 /* ClusterManagersControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClusterManagersControllerTests.m; sourceTree = ""; }; 528F16862C62952700148160 /* ExtractIconFromDataTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExtractIconFromDataTests.m; sourceTree = ""; }; - 61A9A8623F5CA9BBC813DC6B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6851F3552835BC180032B7C8 /* ConversionsUtilsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConversionsUtilsTests.m; sourceTree = ""; }; - 733AFAB37683A9DA7512F09C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* google_maps_flutter_ios_sdk10 */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = google_maps_flutter_ios_sdk10; path = ../../ios/google_maps_flutter_ios_sdk10; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; @@ -101,9 +96,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B7AFC65E3DD5AC60D834D83D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E52C6A6210A56F027C582EF9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EA0E91726245EDC22B97E8B9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; F269303A2BB389BF00BF17C4 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = ""; }; F7151F10265D7ED70028CB91 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F7151F12265D7ED70028CB91 /* GoogleMapsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoogleMapsTests.m; sourceTree = ""; }; @@ -119,7 +111,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - B3A7FA04ABB7B84780729949 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -127,7 +118,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2BDE99378062AE3E60B40021 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -141,15 +131,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E7CF0857EFC88FC263CF3B2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 61A9A8623F5CA9BBC813DC6B /* Pods_Runner.framework */, - 3ACE0AFE8D82CD5962486AFD /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 3390B45D2F33AFA60094DEB9 /* TestUtils */ = { isa = PBXGroup; children = ( @@ -185,8 +166,6 @@ F7151F11265D7ED70028CB91 /* RunnerTests */, F7151F1F265D7EE50028CB91 /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, - A189CFE5474BF8A07908B2E0 /* Pods */, - 1E7CF0857EFC88FC263CF3B2 /* Frameworks */, ); sourceTree = ""; }; @@ -215,17 +194,6 @@ path = Runner; sourceTree = ""; }; - A189CFE5474BF8A07908B2E0 /* Pods */ = { - isa = PBXGroup; - children = ( - B7AFC65E3DD5AC60D834D83D /* Pods-Runner.debug.xcconfig */, - EA0E91726245EDC22B97E8B9 /* Pods-Runner.release.xcconfig */, - E52C6A6210A56F027C582EF9 /* Pods-RunnerTests.debug.xcconfig */, - 733AFAB37683A9DA7512F09C /* Pods-RunnerTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; F7151F11265D7ED70028CB91 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -264,7 +232,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 74BF216DF17B0C7F983459BD /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -288,11 +255,9 @@ isa = PBXNativeTarget; buildConfigurationList = F7151F19265D7ED70028CB91 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D067548A17DC238B80D2BD12 /* [CP] Check Pods Manifest.lock */, F7151F0C265D7ED70028CB91 /* Sources */, F7151F0D265D7ED70028CB91 /* Frameworks */, F7151F0E265D7ED70028CB91 /* Resources */, - 437D9EB41B7B211DA663F5F3 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -416,42 +381,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 437D9EB41B7B211DA663F5F3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RunnerTests/Pods-RunnerTests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/OCMock/OCMock.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OCMock.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RunnerTests/Pods-RunnerTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 74BF216DF17B0C7F983459BD /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -467,28 +396,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - D067548A17DC238B80D2BD12 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -589,7 +496,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -646,7 +553,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -730,7 +637,6 @@ }; F7151F17265D7ED70028CB91 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E52C6A6210A56F027C582EF9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -750,7 +656,6 @@ }; F7151F18265D7ED70028CB91 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 733AFAB37683A9DA7512F09C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Debug.xcconfig b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Debug.xcconfig index e8efba114687..592ceee85b89 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Debug.xcconfig +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Release.xcconfig b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Release.xcconfig index 399e9340e6f6..592ceee85b89 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Release.xcconfig +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Podfile b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Podfile deleted file mode 100644 index 37d20e51d606..000000000000 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Podfile +++ /dev/null @@ -1,45 +0,0 @@ -# Uncomment this line to define a global platform for your project -platform :ios, '15.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - - pod 'OCMock', '~> 3.9.1' - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Runner.xcodeproj/project.pbxproj b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Runner.xcodeproj/project.pbxproj index de7a15638e99..5c2bb451d25b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/example/ios/Runner.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ 0DD7B6C32B744EEF00E857FD /* TileProviderControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD7B6C22B744EEF00E857FD /* TileProviderControllerTests.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 2A6906C72D263DF4001F8426 /* GroundOverlayControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6906C62D263DE7001F8426 /* GroundOverlayControllerTests.m */; }; - 2BDE99378062AE3E60B40021 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ACE0AFE8D82CD5962486AFD /* Pods_RunnerTests.framework */; }; 330909FF2D99B7A60077A751 /* MarkerControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 330909FE2D99B79B0077A751 /* MarkerControllerTests.m */; }; 3390B45E2F33AFA60094DEB9 /* PartiallyMockedMapView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3390B4582F33AFA60094DEB9 /* PartiallyMockedMapView.m */; }; 3390B45F2F33AFA60094DEB9 /* TestAssetProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 3390B45A2F33AFA60094DEB9 /* TestAssetProvider.m */; }; @@ -28,7 +27,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B3A7FA04ABB7B84780729949 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61A9A8623F5CA9BBC813DC6B /* Pods_Runner.framework */; }; F269303B2BB389BF00BF17C4 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = F269303A2BB389BF00BF17C4 /* assets */; }; F7151F13265D7ED70028CB91 /* GoogleMapsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F7151F12265D7ED70028CB91 /* GoogleMapsTests.m */; }; F7151F21265D7EE50028CB91 /* GoogleMapsUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = F7151F20265D7EE50028CB91 /* GoogleMapsUITests.m */; }; @@ -82,14 +80,11 @@ 339355BE2EB5359B00EBF864 /* HeatmapControllerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HeatmapControllerTests.m; sourceTree = ""; }; 339DF1EF2F1FE49300748863 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 339DF1F12F1FE4AD00748863 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 3ACE0AFE8D82CD5962486AFD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 478116512BEF8F47002F593E /* PolylineControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PolylineControllerTests.m; sourceTree = ""; }; 528F16822C62941000148160 /* ClusterManagersControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClusterManagersControllerTests.m; sourceTree = ""; }; 528F16862C62952700148160 /* ExtractIconFromDataTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExtractIconFromDataTests.m; sourceTree = ""; }; - 61A9A8623F5CA9BBC813DC6B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6851F3552835BC180032B7C8 /* ConversionsUtilsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConversionsUtilsTests.m; sourceTree = ""; }; - 733AFAB37683A9DA7512F09C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* google_maps_flutter_ios_sdk9 */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = google_maps_flutter_ios_sdk9; path = ../../ios/google_maps_flutter_ios_sdk9; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; @@ -101,9 +96,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B7AFC65E3DD5AC60D834D83D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E52C6A6210A56F027C582EF9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EA0E91726245EDC22B97E8B9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; F269303A2BB389BF00BF17C4 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = ""; }; F7151F10265D7ED70028CB91 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F7151F12265D7ED70028CB91 /* GoogleMapsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoogleMapsTests.m; sourceTree = ""; }; @@ -119,7 +111,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - B3A7FA04ABB7B84780729949 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -127,7 +118,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2BDE99378062AE3E60B40021 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -141,15 +131,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1E7CF0857EFC88FC263CF3B2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 61A9A8623F5CA9BBC813DC6B /* Pods_Runner.framework */, - 3ACE0AFE8D82CD5962486AFD /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 3390B45D2F33AFA60094DEB9 /* TestUtils */ = { isa = PBXGroup; children = ( @@ -185,8 +166,6 @@ F7151F11265D7ED70028CB91 /* RunnerTests */, F7151F1F265D7EE50028CB91 /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, - A189CFE5474BF8A07908B2E0 /* Pods */, - 1E7CF0857EFC88FC263CF3B2 /* Frameworks */, ); sourceTree = ""; }; @@ -215,17 +194,6 @@ path = Runner; sourceTree = ""; }; - A189CFE5474BF8A07908B2E0 /* Pods */ = { - isa = PBXGroup; - children = ( - B7AFC65E3DD5AC60D834D83D /* Pods-Runner.debug.xcconfig */, - EA0E91726245EDC22B97E8B9 /* Pods-Runner.release.xcconfig */, - E52C6A6210A56F027C582EF9 /* Pods-RunnerTests.debug.xcconfig */, - 733AFAB37683A9DA7512F09C /* Pods-RunnerTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; F7151F11265D7ED70028CB91 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -264,7 +232,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 74BF216DF17B0C7F983459BD /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -288,11 +255,9 @@ isa = PBXNativeTarget; buildConfigurationList = F7151F19265D7ED70028CB91 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D067548A17DC238B80D2BD12 /* [CP] Check Pods Manifest.lock */, F7151F0C265D7ED70028CB91 /* Sources */, F7151F0D265D7ED70028CB91 /* Frameworks */, F7151F0E265D7ED70028CB91 /* Resources */, - 07ED8E29F55EB86E72028FBC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -400,24 +365,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 07ED8E29F55EB86E72028FBC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-RunnerTests/Pods-RunnerTests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/OCMock/OCMock.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OCMock.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RunnerTests/Pods-RunnerTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -434,24 +381,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 74BF216DF17B0C7F983459BD /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -467,28 +396,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - D067548A17DC238B80D2BD12 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -589,7 +496,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -646,7 +553,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -730,7 +637,6 @@ }; F7151F17265D7ED70028CB91 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E52C6A6210A56F027C582EF9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -750,7 +656,6 @@ }; F7151F18265D7ED70028CB91 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 733AFAB37683A9DA7512F09C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/google_sign_in/google_sign_in/example/ios/Flutter/Debug.xcconfig b/packages/google_sign_in/google_sign_in/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/google_sign_in/google_sign_in/example/ios/Flutter/Debug.xcconfig +++ b/packages/google_sign_in/google_sign_in/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_sign_in/google_sign_in/example/ios/Flutter/Release.xcconfig b/packages/google_sign_in/google_sign_in/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/google_sign_in/google_sign_in/example/ios/Flutter/Release.xcconfig +++ b/packages/google_sign_in/google_sign_in/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/google_sign_in/google_sign_in/example/ios/Podfile b/packages/google_sign_in/google_sign_in/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/google_sign_in/google_sign_in/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.pbxproj b/packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.pbxproj index dc12f06bed87..94e49dbd1042 100644 --- a/packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2506C3A8DBA6DC345AAFCE8D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 767761DD50C292297408AEDD /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; @@ -34,12 +33,10 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5008826461AE84D07A4D9FC0 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 767761DD50C292297408AEDD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 869F1BCCBF31DD362DC8091C /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -47,8 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A5DBCEC14A14CCDFCB446000 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,7 +52,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 2506C3A8DBA6DC345AAFCE8D /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -83,7 +77,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, B95624D47E1F4F5A6A415894 /* Pods */, - F0B650A7DEBD792A2B3EC119 /* Frameworks */, ); sourceTree = ""; }; @@ -113,21 +106,10 @@ B95624D47E1F4F5A6A415894 /* Pods */ = { isa = PBXGroup; children = ( - 5008826461AE84D07A4D9FC0 /* Pods-Runner.debug.xcconfig */, - 869F1BCCBF31DD362DC8091C /* Pods-Runner.release.xcconfig */, - A5DBCEC14A14CCDFCB446000 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - F0B650A7DEBD792A2B3EC119 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 767761DD50C292297408AEDD /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -135,7 +117,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8451E2E50F3C41C822E4801A /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -223,28 +204,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8451E2E50F3C41C822E4801A /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..073fdde19bf7 --- /dev/null +++ b/packages/google_sign_in/google_sign_in/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,69 @@ +{ + "originHash" : "fd06f65309a465a6cb6f442cd439d2481f4f7bb167b133bd83bf27b3b6b211e8", + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "3996d908c7b3ce8a87d39c808f9a6b2a08fbe043", + "version" : "9.0.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 3 +} diff --git a/packages/google_sign_in/google_sign_in/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..9c86bc227a8c --- /dev/null +++ b/packages/google_sign_in/google_sign_in/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,68 @@ +{ + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "3996d908c7b3ce8a87d39c808f9a6b2a08fbe043", + "version" : "9.0.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 2 +} diff --git a/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Release.xcconfig b/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/google_sign_in/google_sign_in/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/google_sign_in/google_sign_in/example/macos/Podfile b/packages/google_sign_in/google_sign_in/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/google_sign_in/google_sign_in/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.pbxproj b/packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.pbxproj index 3498fffcf7ce..59e50e2d89ba 100644 --- a/packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 91EC1EAD56E1573943150DF0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16C442C1B9BC9476C95AF0D6 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,7 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 16C442C1B9BC9476C95AF0D6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -69,16 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 58AF15EFA3113F25F3CCD5CF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 58C7A396CF655EE2B3D174BF /* 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 = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7C68AE67B32D2BA05FA75C07 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D1E7E66753A51266C0DC3639 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC39D4A66D72EB7C33ED15C1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F769D9B2CFC1D349BD20C867 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - FC501455AE275E8C66CF7C6A /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 91EC1EAD56E1573943150DF0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -111,7 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 3AAB212BD66F0D7F5F0118E6 /* Pods */, ); sourceTree = ""; @@ -163,25 +152,10 @@ 3AAB212BD66F0D7F5F0118E6 /* Pods */ = { isa = PBXGroup; children = ( - 7C68AE67B32D2BA05FA75C07 /* Pods-Runner.debug.xcconfig */, - FC501455AE275E8C66CF7C6A /* Pods-Runner.release.xcconfig */, - DC39D4A66D72EB7C33ED15C1 /* Pods-Runner.profile.xcconfig */, - 58C7A396CF655EE2B3D174BF /* Pods-RunnerTests.debug.xcconfig */, - F769D9B2CFC1D349BD20C867 /* Pods-RunnerTests.release.xcconfig */, - D1E7E66753A51266C0DC3639 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 16C442C1B9BC9476C95AF0D6 /* Pods_Runner.framework */, - 58AF15EFA3113F25F3CCD5CF /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -189,7 +163,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - DD22313F1BC2623931943E8D /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -308,28 +281,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - DD22313F1BC2623931943E8D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..9c86bc227a8c --- /dev/null +++ b/packages/google_sign_in/google_sign_in/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,68 @@ +{ + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "3996d908c7b3ce8a87d39c808f9a6b2a08fbe043", + "version" : "9.0.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 2 +} diff --git a/packages/google_sign_in/google_sign_in/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..9c86bc227a8c --- /dev/null +++ b/packages/google_sign_in/google_sign_in/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,68 @@ +{ + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "3996d908c7b3ce8a87d39c808f9a6b2a08fbe043", + "version" : "9.0.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 2 +} diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Debug.xcconfig b/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Debug.xcconfig index 9803018ca79d..592ceee85b89 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Debug.xcconfig +++ b/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ #include "Generated.xcconfig" -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Release.xcconfig b/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Release.xcconfig index a4a8c604e13d..592ceee85b89 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Release.xcconfig +++ b/packages/google_sign_in/google_sign_in_ios/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ #include "Generated.xcconfig" -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Podfile b/packages/google_sign_in/google_sign_in_ios/example/ios/Podfile deleted file mode 100644 index 1c17bb28b0a0..000000000000 --- a/packages/google_sign_in/google_sign_in_ios/example/ios/Podfile +++ /dev/null @@ -1,44 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -# Suppress warnings from transitive dependencies that cause analysis to fail. -inhibit_all_warnings! - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj index 86b676bb414a..c86011ea6264 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -16,8 +16,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C2FB9CBA01DB0A2DE5F31E12 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0263E28FA425D1CE928BDE15 /* libPods-Runner.a */; }; - C56D3B06A42F3B35C1F47A43 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18AD6475292B9C45B529DDC9 /* libPods-RunnerTests.a */; }; F76AC1A52666D0540040C8BC /* GoogleSignInTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76AC1A42666D0540040C8BC /* GoogleSignInTests.swift */; }; F76AC1B32666D0610040C8BC /* GoogleSignInUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = F76AC1B22666D0610040C8BC /* GoogleSignInUITests.m */; }; /* End PBXBuildFile section */ @@ -53,13 +51,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0263E28FA425D1CE928BDE15 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 18AD6475292B9C45B529DDC9 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 37E582FF620A90D0EB2C0851 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 45D93D4513839BFEA2AA74FE /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 5A76713E622F06379AEDEBFA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 5C6F5A6C1EC3B4CB008D64B5 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 5C6F5A6D1EC3B4CB008D64B5 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; + 78DABEA22ED26510000E7860 /* google_sign_in_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = google_sign_in_ios; path = ../../darwin/google_sign_in_ios; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7A303C2D1E89D76400B1F19E /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../darwin/Tests/GoogleService-Info.plist"; sourceTree = SOURCE_ROOT; }; 7ACDFB0D1E8944C400BE2D00 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; @@ -74,15 +69,12 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F582639B44581540871D9BB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; F76AC1A22666D0540040C8BC /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F76AC1A42666D0540040C8BC /* GoogleSignInTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GoogleSignInTests.swift; path = ../../darwin/Tests/GoogleSignInTests.swift; sourceTree = SOURCE_ROOT; }; F76AC1A62666D0540040C8BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F76AC1B02666D0610040C8BC /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F76AC1B22666D0610040C8BC /* GoogleSignInUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoogleSignInUITests.m; sourceTree = ""; }; F76AC1B42666D0610040C8BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* google_sign_in_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = google_sign_in_ios; path = ../../darwin/google_sign_in_ios; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -91,7 +83,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - C2FB9CBA01DB0A2DE5F31E12 /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -99,7 +90,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C56D3B06A42F3B35C1F47A43 /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,17 +103,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 840012C8B5EDBCF56B0E4AC1 /* Pods */ = { - isa = PBXGroup; - children = ( - 5A76713E622F06379AEDEBFA /* Pods-Runner.debug.xcconfig */, - F582639B44581540871D9BB0 /* Pods-Runner.release.xcconfig */, - 37E582FF620A90D0EB2C0851 /* Pods-RunnerTests.debug.xcconfig */, - 45D93D4513839BFEA2AA74FE /* Pods-RunnerTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -146,8 +125,6 @@ F76AC1A32666D0540040C8BC /* RunnerTests */, F76AC1B12666D0610040C8BC /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, - 840012C8B5EDBCF56B0E4AC1 /* Pods */, - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, ); sourceTree = ""; }; @@ -185,15 +162,6 @@ name = "Supporting Files"; sourceTree = ""; }; - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0263E28FA425D1CE928BDE15 /* libPods-Runner.a */, - 18AD6475292B9C45B529DDC9 /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; F76AC1A32666D0540040C8BC /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -220,7 +188,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -244,7 +211,6 @@ isa = PBXNativeTarget; buildConfigurationList = F76AC1AB2666D0540040C8BC /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 27975964E48117AA65B1D6C7 /* [CP] Check Pods Manifest.lock */, F76AC19E2666D0540040C8BC /* Sources */, F76AC19F2666D0540040C8BC /* Frameworks */, F76AC1A02666D0540040C8BC /* Resources */, @@ -354,28 +320,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 27975964E48117AA65B1D6C7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -407,24 +351,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -645,7 +571,6 @@ }; F76AC1A92666D0540040C8BC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 37E582FF620A90D0EB2C0851 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -664,7 +589,6 @@ }; F76AC1AA2666D0540040C8BC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 45D93D4513839BFEA2AA74FE /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..dca1e29f5605 --- /dev/null +++ b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,69 @@ +{ + "originHash" : "8c840eeeda2581c1fabf915461049b3c7ff6cd63f7dabd8d66b0814611e761da", + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "913b4005ea26aebe1c97d54e35ad82a515924c71", + "version" : "9.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 3 +} diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..241e1e9e7a8d --- /dev/null +++ b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,69 @@ +{ + "originHash" : "8c840eeeda2581c1fabf915461049b3c7ff6cd63f7dabd8d66b0814611e761da", + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "3996d908c7b3ce8a87d39c808f9a6b2a08fbe043", + "version" : "9.0.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 3 +} diff --git a/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Release.xcconfig b/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/google_sign_in/google_sign_in_ios/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/google_sign_in/google_sign_in_ios/example/macos/Podfile b/packages/google_sign_in/google_sign_in_ios/example/macos/Podfile deleted file mode 100644 index ff5ddb3b8bdc..000000000000 --- a/packages/google_sign_in/google_sign_in_ios/example/macos/Podfile +++ /dev/null @@ -1,42 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.pbxproj b/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.pbxproj index 7229893f34b7..3d9b326c28ab 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.pbxproj @@ -29,8 +29,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - D7B8415A3D20001DE212873D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A19720E5189178660264EC3F /* Pods_Runner.framework */; }; - F107B1B7E4ECB85727EC4286 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BD1DCE969A7E7C76D9CF93C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -64,8 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0BD1DCE969A7E7C76D9CF93C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0E1002C336EBB758B6DD1BE4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 330B3F8C2B1E2A5800E6DC3F /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../../darwin/Tests/GoogleService-Info.plist"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* GoogleSignInTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GoogleSignInTests.swift; path = ../../darwin/Tests/GoogleSignInTests.swift; sourceTree = SOURCE_ROOT; }; @@ -83,17 +79,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4626AA70E7BDF77ABE2E7DB0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* google_sign_in_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = google_sign_in_ios; path = ../../../darwin/google_sign_in_ios; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8403A54CFF539C6D4BFB2536 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A031586E267538A14E77F28E /* 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 = ""; }; - A19720E5189178660264EC3F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B2C32822D6302E2419819672 /* 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 = ""; }; - C3173B998667B2AD47F260FE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -101,7 +91,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F107B1B7E4ECB85727EC4286 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -110,7 +99,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - D7B8415A3D20001DE212873D /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -145,7 +133,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 330B3F8A2B1E27D300E6DC3F /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, A5245CE44A722A1081437B5D /* Pods */, ); sourceTree = ""; @@ -200,25 +187,10 @@ A5245CE44A722A1081437B5D /* Pods */ = { isa = PBXGroup; children = ( - 8403A54CFF539C6D4BFB2536 /* Pods-Runner.debug.xcconfig */, - A031586E267538A14E77F28E /* Pods-Runner.release.xcconfig */, - C3173B998667B2AD47F260FE /* Pods-Runner.profile.xcconfig */, - B2C32822D6302E2419819672 /* Pods-RunnerTests.debug.xcconfig */, - 0E1002C336EBB758B6DD1BE4 /* Pods-RunnerTests.release.xcconfig */, - 4626AA70E7BDF77ABE2E7DB0 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - A19720E5189178660264EC3F /* Pods_Runner.framework */, - 0BD1DCE969A7E7C76D9CF93C /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -226,7 +198,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 829BC609B118D03CC2221D87 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -237,8 +208,6 @@ 331C80DA294CF71000263BE5 /* PBXTargetDependency */, ); name = RunnerTests; - packageProductDependencies = ( - ); productName = RunnerTests; productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; @@ -247,7 +216,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 728CBB3DC3D62D9A33FE9D0E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -307,7 +275,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -379,50 +347,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 728CBB3DC3D62D9A33FE9D0E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 829BC609B118D03CC2221D87 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -474,7 +398,6 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B2C32822D6302E2419819672 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -489,7 +412,6 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0E1002C336EBB758B6DD1BE4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -504,7 +426,6 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4626AA70E7BDF77ABE2E7DB0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -790,7 +711,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..2063d77cd424 --- /dev/null +++ b/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,68 @@ +{ + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "913b4005ea26aebe1c97d54e35ad82a515924c71", + "version" : "9.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 2 +} diff --git a/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..90989bbbdf85 --- /dev/null +++ b/packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,69 @@ +{ + "originHash" : "0f98c30e05c97f0caa8ab4c3349224fd47a71a9a8e72026c1139364b9ed49230", + "pins" : [ + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "145104f5ea9d58ae21b60add007c33c1cc0c948e", + "version" : "2.0.0" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS.git", + "state" : { + "revision" : "913b4005ea26aebe1c97d54e35ad82a515924c71", + "version" : "9.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "56e0ccf09a6dd29dc7e68bdf729598240ca8aa16", + "version" : "5.0.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + } + ], + "version" : 3 +} diff --git a/packages/image_picker/image_picker/example/ios/Flutter/Debug.xcconfig b/packages/image_picker/image_picker/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/image_picker/image_picker/example/ios/Flutter/Debug.xcconfig +++ b/packages/image_picker/image_picker/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/image_picker/image_picker/example/ios/Flutter/Release.xcconfig b/packages/image_picker/image_picker/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/image_picker/image_picker/example/ios/Flutter/Release.xcconfig +++ b/packages/image_picker/image_picker/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/image_picker/image_picker/example/ios/Podfile b/packages/image_picker/image_picker/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/image_picker/image_picker/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj index 6a88d7ce85ee..80d0a3fd4c3e 100644 --- a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 5A83FB72DD53C06F381A951D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7B03CF20CC7D2526CFB5BC8 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -36,6 +35,7 @@ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -44,11 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A0997584A9D49E8920878087 /* 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 = ""; }; - B7B03CF20CC7D2526CFB5BC8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DCBCFDDE632A8654C6BD97EB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FAEB6393EE8BBB248030394C /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 5A83FB72DD53C06F381A951D /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 56BB58B6669462FF7555C556 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B7B03CF20CC7D2526CFB5BC8 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 687B8B59908B1AD84CDAC956 /* Pods */ = { - isa = PBXGroup; - children = ( - FAEB6393EE8BBB248030394C /* Pods-Runner.debug.xcconfig */, - A0997584A9D49E8920878087 /* Pods-Runner.release.xcconfig */, - DCBCFDDE632A8654C6BD97EB /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 687B8B59908B1AD84CDAC956 /* Pods */, - 56BB58B6669462FF7555C556 /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - EB6A09F0D466AEE2BF133AC6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -239,28 +211,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - EB6A09F0D466AEE2BF133AC6 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Release.xcconfig b/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/image_picker/image_picker/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/image_picker/image_picker/example/macos/Podfile b/packages/image_picker/image_picker/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/image_picker/image_picker/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/image_picker/image_picker/example/macos/Runner.xcodeproj/project.pbxproj b/packages/image_picker/image_picker/example/macos/Runner.xcodeproj/project.pbxproj index 091460c7eb06..037b7beafedf 100644 --- a/packages/image_picker/image_picker/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/image_picker/image_picker/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - E752A8CC1D9387A266D93ED4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686DC79A64D670F5C504FD08 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,8 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1A4D3C07D27B19F648F074CC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 225EECB3B1227F1F63B05B0A /* 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 = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* image_picker_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = image_picker_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -70,11 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3BC5226339EC5EE981F2E45B /* 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 = ""; }; - 686DC79A64D670F5C504FD08 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - E752A8CC1D9387A266D93ED4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - D1147CF6C0F642E1DCD4FF72 /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - D1147CF6C0F642E1DCD4FF72 /* Pods */ = { - isa = PBXGroup; - children = ( - 225EECB3B1227F1F63B05B0A /* Pods-Runner.debug.xcconfig */, - 3BC5226339EC5EE981F2E45B /* Pods-Runner.release.xcconfig */, - 1A4D3C07D27B19F648F074CC /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 686DC79A64D670F5C504FD08 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D4E5037333BDDE606E4946C1 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D4E5037333BDDE606E4946C1 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/image_picker/image_picker_ios/example/ios/Flutter/Debug.xcconfig b/packages/image_picker/image_picker_ios/example/ios/Flutter/Debug.xcconfig index 9803018ca79d..592ceee85b89 100755 --- a/packages/image_picker/image_picker_ios/example/ios/Flutter/Debug.xcconfig +++ b/packages/image_picker/image_picker_ios/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ #include "Generated.xcconfig" -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" diff --git a/packages/image_picker/image_picker_ios/example/ios/Flutter/Release.xcconfig b/packages/image_picker/image_picker_ios/example/ios/Flutter/Release.xcconfig index a4a8c604e13d..592ceee85b89 100755 --- a/packages/image_picker/image_picker_ios/example/ios/Flutter/Release.xcconfig +++ b/packages/image_picker/image_picker_ios/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ #include "Generated.xcconfig" -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" diff --git a/packages/image_picker/image_picker_ios/example/ios/Podfile b/packages/image_picker/image_picker_ios/example/ios/Podfile deleted file mode 100644 index cb1db8cc611e..000000000000 --- a/packages/image_picker/image_picker_ios/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - platform :ios, '13.0' - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/image_picker/image_picker_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/image_picker/image_picker_ios/example/ios/Runner.xcodeproj/project.pbxproj index 5808ec83821c..1c16179ca6f1 100644 --- a/packages/image_picker/image_picker_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/image_picker/image_picker_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -12,7 +12,6 @@ 334733FE266813F400DCC49E /* PhotoAssetUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */; }; 334733FF266813FA00DCC49E /* ImagePickerTestImages.m in Sources */ = {isa = PBXBuildFile; fileRef = F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */; }; 33473400266813FD00DCC49E /* ImagePickerPluginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */; }; - 3A72BAD3FAE6E0FA9D80826B /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 35AE65F25E0B8C8214D8372B /* libPods-RunnerTests.a */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 5C9513011EC38BD300040975 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C9513001EC38BD300040975 /* GeneratedPluginRegistrant.m */; }; 6801C8392555D726009DAF8D /* ImagePickerFromGalleryUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6801C8382555D726009DAF8D /* ImagePickerFromGalleryUITests.m */; }; @@ -36,7 +35,6 @@ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 9FC8F0E9229FA49E00C8D58F /* gifImage.gif in Resources */ = {isa = PBXBuildFile; fileRef = 9FC8F0E8229FA49E00C8D58F /* gifImage.gif */; }; BE6173D826A958B800D0974D /* ImagePickerFromLimitedGalleryUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = BE6173D726A958B800D0974D /* ImagePickerFromLimitedGalleryUITests.m */; }; - F4F7A436CCA4BF276270A3AE /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC32F6993F4529982D9519F1 /* libPods-Runner.a */; }; F706BF732E433163001263B9 /* jpgImageTall.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F706BF722E433163001263B9 /* jpgImageTall.jpg */; }; F706BF762E4331C4001263B9 /* pngImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 680049352280F2B8006DD6AB /* pngImage.png */; }; F706BF772E4331C4001263B9 /* jpgImage.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 680049362280F2B8006DD6AB /* jpgImage.jpg */; }; @@ -82,30 +80,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0C7B151765FD4249454C49AD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 334733F22668136400DCC49E /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 334733F62668136400DCC49E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 35AE65F25E0B8C8214D8372B /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5A9D31B91557877A0E8EF3E7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 5C9512FF1EC38BD300040975 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 5C9513001EC38BD300040975 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 680049252280D736006DD6AB /* MetaDataUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MetaDataUtilTests.m; sourceTree = ""; }; 680049352280F2B8006DD6AB /* pngImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pngImage.png; sourceTree = ""; }; 680049362280F2B8006DD6AB /* jpgImage.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = jpgImage.jpg; sourceTree = ""; }; - 6801632E632668F4349764C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 6801C8362555D726009DAF8D /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 6801C8382555D726009DAF8D /* ImagePickerFromGalleryUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerFromGalleryUITests.m; sourceTree = ""; }; 6801C83A2555D726009DAF8D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImagePickerPluginTests.m; sourceTree = ""; }; 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PhotoAssetUtilTests.m; sourceTree = ""; }; 782C2B44299ECE33008DC703 /* jpgImageWithRightOrientation.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = jpgImageWithRightOrientation.jpg; sourceTree = ""; }; + 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 7865C5E02941326F0010E17F /* bmpImage.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = bmpImage.bmp; sourceTree = ""; }; 7865C5E62941374F0010E17F /* heicImage.heic */ = {isa = PBXFileReference; lastKnownFileType = file; path = heicImage.heic; sourceTree = ""; }; 7865C5E9294137960010E17F /* icoImage.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icoImage.ico; sourceTree = ""; }; 7865C5EC294137AB0010E17F /* tiffImage.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = tiffImage.tiff; sourceTree = ""; }; 7865C5FB294157BB0010E17F /* icnsImage.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = icnsImage.icns; sourceTree = ""; }; 7865C5FE294252A60010E17F /* proRawImage.dng */ = {isa = PBXFileReference; lastKnownFileType = file; path = proRawImage.dng; sourceTree = ""; }; + 78DABEA22ED26510000E7860 /* image_picker_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = image_picker_ios; path = ../../ios/image_picker_ios; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -122,14 +119,9 @@ 9FC8F0E8229FA49E00C8D58F /* gifImage.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = gifImage.gif; sourceTree = ""; }; 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImageUtilTests.m; sourceTree = ""; }; BE6173D726A958B800D0974D /* ImagePickerFromLimitedGalleryUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerFromLimitedGalleryUITests.m; sourceTree = ""; }; - DC6FCAAD4E7580C9B3C2E21D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - EC32F6993F4529982D9519F1 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; F706BF722E433163001263B9 /* jpgImageTall.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = jpgImageTall.jpg; sourceTree = ""; }; F78AF3172342D9D7008449C7 /* ImagePickerTestImages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImagePickerTestImages.h; sourceTree = ""; }; F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerTestImages.m; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* image_picker_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = image_picker_ios; path = ../../ios/image_picker_ios; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -138,7 +130,6 @@ buildActionMask = 2147483647; files = ( 78CF8D862BC5E7070051231B /* OCMock in Frameworks */, - 3A72BAD3FAE6E0FA9D80826B /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -154,7 +145,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - F4F7A436CCA4BF276270A3AE /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -205,17 +195,6 @@ path = RunnerUITests; sourceTree = ""; }; - 840012C8B5EDBCF56B0E4AC1 /* Pods */ = { - isa = PBXGroup; - children = ( - 6801632E632668F4349764C9 /* Pods-Runner.debug.xcconfig */, - 5A9D31B91557877A0E8EF3E7 /* Pods-Runner.release.xcconfig */, - DC6FCAAD4E7580C9B3C2E21D /* Pods-RunnerTests.debug.xcconfig */, - 0C7B151765FD4249454C49AD /* Pods-RunnerTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -239,8 +218,6 @@ 334733F32668136400DCC49E /* RunnerTests */, 6801C8372555D726009DAF8D /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, - 840012C8B5EDBCF56B0E4AC1 /* Pods */, - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, ); sourceTree = ""; }; @@ -278,15 +255,6 @@ name = "Supporting Files"; sourceTree = ""; }; - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */ = { - isa = PBXGroup; - children = ( - EC32F6993F4529982D9519F1 /* libPods-Runner.a */, - 35AE65F25E0B8C8214D8372B /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -294,7 +262,6 @@ isa = PBXNativeTarget; buildConfigurationList = 334733F92668136400DCC49E /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - B8739A4353234497CF76B597 /* [CP] Check Pods Manifest.lock */, 334733EE2668136400DCC49E /* Sources */, 334733EF2668136400DCC49E /* Frameworks */, 334733F02668136400DCC49E /* Resources */, @@ -334,7 +301,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -491,46 +457,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - B8739A4353234497CF76B597 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -603,7 +529,6 @@ /* Begin XCBuildConfiguration section */ 334733FA2668136400DCC49E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DC6FCAAD4E7580C9B3C2E21D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -621,7 +546,6 @@ }; 334733FB2668136400DCC49E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C7B151765FD4249454C49AD /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Release.xcconfig b/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/image_picker/image_picker_macos/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/image_picker/image_picker_macos/example/macos/Podfile b/packages/image_picker/image_picker_macos/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/image_picker/image_picker_macos/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/image_picker/image_picker_macos/example/macos/Runner.xcodeproj/project.pbxproj b/packages/image_picker/image_picker_macos/example/macos/Runner.xcodeproj/project.pbxproj index 6a5a66ca1bc8..d07c8412f7f1 100644 --- a/packages/image_picker/image_picker_macos/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/image_picker/image_picker_macos/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - BBE2B8C47A32673657F9E2DC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B40E0F19CFF2111C7C9F07D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -68,13 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 450A6A13EFEFF8F54A1685E1 /* 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 = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7B40E0F19CFF2111C7C9F07D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AFE3DE60B5E9D50D0C5C0524 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EA63AF049335E53A5E609A89 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - BBE2B8C47A32673657F9E2DC /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - E0DBDFAB26ECD71761DCC07A /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7B40E0F19CFF2111C7C9F07D /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E0DBDFAB26ECD71761DCC07A /* Pods */ = { - isa = PBXGroup; - children = ( - 450A6A13EFEFF8F54A1685E1 /* Pods-Runner.debug.xcconfig */, - EA63AF049335E53A5E609A89 /* Pods-Runner.release.xcconfig */, - AFE3DE60B5E9D50D0C5C0524 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FAD9DA6D816F3A8C6E1C0C37 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - FAD9DA6D816F3A8C6E1C0C37 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Debug.xcconfig b/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Debug.xcconfig +++ b/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Release.xcconfig b/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Release.xcconfig +++ b/packages/in_app_purchase/in_app_purchase/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase/example/ios/Podfile b/packages/in_app_purchase/in_app_purchase/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/in_app_purchase/in_app_purchase/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/in_app_purchase/in_app_purchase/example/ios/Runner.xcodeproj/project.pbxproj b/packages/in_app_purchase/in_app_purchase/example/ios/Runner.xcodeproj/project.pbxproj index 800cdf882b9b..889e18361486 100644 --- a/packages/in_app_purchase/in_app_purchase/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/in_app_purchase/in_app_purchase/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,8 +14,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A5279298219369C600FF69E6 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5279297219369C600FF69E6 /* StoreKit.framework */; }; - D8DC1C323920D930C85F82EA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45E19929666F62B5A245A770 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -35,11 +33,10 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 45E19929666F62B5A245A770 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C94900269A2D56076FD5BA7 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -47,10 +44,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CEF0DF9F729A47BA122E05FB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E93DC11B85E9D711755903C8 /* 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 = ""; }; F6E5D5F926131C4800C68BED /* Configuration.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Configuration.storekit; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -59,7 +53,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - D8DC1C323920D930C85F82EA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -85,7 +78,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, AAE4A6C0CC4412DAA228761D /* Pods */, - D086712EA6B9C9757C0DD727 /* Frameworks */, ); sourceTree = ""; }; @@ -116,21 +108,10 @@ AAE4A6C0CC4412DAA228761D /* Pods */ = { isa = PBXGroup; children = ( - 7C94900269A2D56076FD5BA7 /* Pods-Runner.debug.xcconfig */, - E93DC11B85E9D711755903C8 /* Pods-Runner.release.xcconfig */, - CEF0DF9F729A47BA122E05FB /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D086712EA6B9C9757C0DD727 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 45E19929666F62B5A245A770 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -138,7 +119,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C7F52C0960A7BD0A9713B996 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -170,12 +150,12 @@ TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; SystemCapabilities = { com.apple.InAppPurchase = { enabled = 1; }; }; - LastSwiftMigration = 1100; }; }; }; @@ -246,28 +226,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C7F52C0960A7BD0A9713B996 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Release.xcconfig b/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/in_app_purchase/in_app_purchase/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase/example/macos/Podfile b/packages/in_app_purchase/in_app_purchase/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/in_app_purchase/in_app_purchase/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/in_app_purchase/in_app_purchase/example/macos/Runner.xcodeproj/project.pbxproj b/packages/in_app_purchase/in_app_purchase/example/macos/Runner.xcodeproj/project.pbxproj index 9a62a4b83334..3937b709525b 100644 --- a/packages/in_app_purchase/in_app_purchase/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/in_app_purchase/in_app_purchase/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1936C695A67BE3AC115E6938 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91FC7522CD18DEF95EA2F630 /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -54,7 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0B65A69DF81DCCDA43899BF5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -69,12 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 684854F04C44509BBCC60AB6 /* 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 = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 91FC7522CD18DEF95EA2F630 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BB0D94179B02A04FD98DA5BE /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 1936C695A67BE3AC115E6938 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -93,9 +87,6 @@ 27C7C1505089764F862054EC /* Pods */ = { isa = PBXGroup; children = ( - 684854F04C44509BBCC60AB6 /* Pods-Runner.debug.xcconfig */, - BB0D94179B02A04FD98DA5BE /* Pods-Runner.release.xcconfig */, - 0B65A69DF81DCCDA43899BF5 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -117,7 +108,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 27C7C1505089764F862054EC /* Pods */, ); sourceTree = ""; @@ -166,14 +156,6 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 91FC7522CD18DEF95EA2F630 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -181,7 +163,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D69320C4691D46AC439743E0 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -300,28 +281,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D69320C4691D46AC439743E0 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Debug.xcconfig b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Debug.xcconfig index e8efba114687..592ceee85b89 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Debug.xcconfig +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Release.xcconfig b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Release.xcconfig index 399e9340e6f6..592ceee85b89 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Release.xcconfig +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Podfile b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Podfile deleted file mode 100644 index 400d4e7a9f21..000000000000 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Runner.xcodeproj/project.pbxproj b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Runner.xcodeproj/project.pbxproj index 856578554d3f..f54aa78f6436 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/Runner.xcodeproj/project.pbxproj @@ -16,8 +16,6 @@ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; A5279298219369C600FF69E6 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5279297219369C600FF69E6 /* StoreKit.framework */; }; - C4667AA10A6BC70CE9A5007C /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AB9CD9DD098BDAB3D5053EE5 /* libPods-RunnerTests.a */; }; - E680BD031412EB2D02C9190B /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 21CE6E615CF661FC0E18FB0A /* libPods-Runner.a */; }; F22BF91C2BC9B40B00713878 /* SwiftStubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = F22BF91B2BC9B40B00713878 /* SwiftStubs.swift */; }; F22FD7A22CB080AE0006F28F /* StoreKit2TranslatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F22FD7A12CB080AE0006F28F /* StoreKit2TranslatorTests.swift */; }; F24C45E22C409D42000C6C72 /* InAppPurchasePluginTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F24C45E12C409D41000C6C72 /* InAppPurchasePluginTests.swift */; }; @@ -57,17 +55,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 21CE6E615CF661FC0E18FB0A /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6458340B2CE3497379F6B389 /* 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 = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* in_app_purchase_storekit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = in_app_purchase_storekit; path = ../../darwin/in_app_purchase_storekit; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 7AB7758EFACBE3E1E7BDE0C6 /* 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 = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 8B97B58DB1E9CF900A4617A3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -78,8 +72,6 @@ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A5279297219369C600FF69E6 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; A59001A421E69658004A3E5E /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - AB9CD9DD098BDAB3D5053EE5 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - CC9E5595B2B9B9B90632DA75 /* 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 = ""; }; F22BF91A2BC9B40B00713878 /* RunnerTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RunnerTests-Bridging-Header.h"; sourceTree = ""; }; F22BF91B2BC9B40B00713878 /* SwiftStubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftStubs.swift; sourceTree = ""; }; F22FD7A12CB080AE0006F28F /* StoreKit2TranslatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = StoreKit2TranslatorTests.swift; path = ../shared/RunnerTests/StoreKit2TranslatorTests.swift; sourceTree = SOURCE_ROOT; }; @@ -102,7 +94,6 @@ files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, A5279298219369C600FF69E6 /* StoreKit.framework in Frameworks */, - E680BD031412EB2D02C9190B /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -110,7 +101,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4667AA10A6BC70CE9A5007C /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -120,10 +110,6 @@ 0B4403AC68C3196AECF5EF89 /* Pods */ = { isa = PBXGroup; children = ( - 6458340B2CE3497379F6B389 /* Pods-Runner.debug.xcconfig */, - CC9E5595B2B9B9B90632DA75 /* Pods-Runner.release.xcconfig */, - 7AB7758EFACBE3E1E7BDE0C6 /* Pods-RunnerTests.debug.xcconfig */, - 8B97B58DB1E9CF900A4617A3 /* Pods-RunnerTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -219,8 +205,6 @@ isa = PBXGroup; children = ( A5279297219369C600FF69E6 /* StoreKit.framework */, - 21CE6E615CF661FC0E18FB0A /* libPods-Runner.a */, - AB9CD9DD098BDAB3D5053EE5 /* libPods-RunnerTests.a */, ); name = Frameworks; sourceTree = ""; @@ -232,7 +216,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9AF65E7BDC9361CB3944EE9C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -256,7 +239,6 @@ isa = PBXNativeTarget; buildConfigurationList = A59001AD21E69658004A3E5E /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 39A4BCA317070A14A6C5C70F /* [CP] Check Pods Manifest.lock */, A59001A021E69658004A3E5E /* Sources */, A59001A121E69658004A3E5E /* Frameworks */, A59001A221E69658004A3E5E /* Resources */, @@ -342,28 +324,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 39A4BCA317070A14A6C5C70F /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -395,28 +355,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; }; - 9AF65E7BDC9361CB3944EE9C /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -639,7 +577,6 @@ }; A59001AB21E69658004A3E5E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AB7758EFACBE3E1E7BDE0C6 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -670,7 +607,6 @@ }; A59001AC21E69658004A3E5E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8B97B58DB1E9CF900A4617A3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Release.xcconfig b/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Podfile b/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Podfile deleted file mode 100644 index b687011ee229..000000000000 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Runner.xcodeproj/project.pbxproj b/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Runner.xcodeproj/project.pbxproj index 5d26e8e13029..39f1ae5c7a56 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 00F61209EEB7954AF8415A4A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEB2EC182EA43F26A351EE3E /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -37,7 +36,6 @@ F2D5271E2C50645600C137C7 /* PaymentQueueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D5271D2C50645600C137C7 /* PaymentQueueTests.swift */; }; F2D527262C583C1C00C137C7 /* TranslatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D527252C583C1C00C137C7 /* TranslatorTests.swift */; }; F79BDC1C2905FC3200E3999D /* Stubs.m in Sources */ = {isa = PBXBuildFile; fileRef = F79BDC1B2905FC3200E3999D /* Stubs.m */; }; - F8270DE1AEF80A8CF2C45688 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 045C0F7D19875EDA98DF0B7F /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -71,9 +69,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0332995B6EC622E1F0605C08 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 045C0F7D19875EDA98DF0B7F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 101E6404B10F3A1371778205 /* 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 = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -87,15 +82,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 39C4797E13DFF5FCF1A87568 /* 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 = ""; }; - 46EFB01DD1BBB34F886C33A0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* in_app_purchase_storekit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = in_app_purchase_storekit; path = ../../../darwin/in_app_purchase_storekit; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AEB2EC182EA43F26A351EE3E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B537BC9F2D936311267ABC65 /* 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 = ""; }; F219F1A02CC0586700142FC2 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; F24C45E32C409D87000C6C72 /* InAppPurchasePluginTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = InAppPurchasePluginTests.swift; path = ../../shared/RunnerTests/InAppPurchasePluginTests.swift; sourceTree = ""; }; F27694082C4724B200277144 /* ProductRequestHandlerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProductRequestHandlerTests.swift; path = ../../shared/RunnerTests/ProductRequestHandlerTests.swift; sourceTree = ""; }; @@ -111,7 +102,6 @@ F79BDC152905FC0500E3999D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ../../shared/RunnerTests/Info.plist; sourceTree = ""; }; F79BDC1B2905FC3200E3999D /* Stubs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Stubs.m; path = ../../shared/RunnerTests/Stubs.m; sourceTree = ""; }; F79BDC1F2906023C00E3999D /* Stubs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Stubs.h; path = ../../shared/RunnerTests/Stubs.h; sourceTree = ""; }; - F8E47120B1A50B8A1C480FDB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -120,7 +110,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 00F61209EEB7954AF8415A4A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -128,7 +117,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F8270DE1AEF80A8CF2C45688 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -138,12 +126,6 @@ 09D47623A8E19B84FF0453EE /* Pods */ = { isa = PBXGroup; children = ( - 39C4797E13DFF5FCF1A87568 /* Pods-Runner.debug.xcconfig */, - 101E6404B10F3A1371778205 /* Pods-Runner.release.xcconfig */, - F8E47120B1A50B8A1C480FDB /* Pods-Runner.profile.xcconfig */, - B537BC9F2D936311267ABC65 /* Pods-RunnerTests.debug.xcconfig */, - 0332995B6EC622E1F0605C08 /* Pods-RunnerTests.release.xcconfig */, - 46EFB01DD1BBB34F886C33A0 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -153,8 +135,6 @@ children = ( F219F1A02CC0586700142FC2 /* StoreKit.framework */, F2D1274A2CB5DB61005FA2E5 /* StoreKitTest.framework */, - AEB2EC182EA43F26A351EE3E /* Pods_Runner.framework */, - 045C0F7D19875EDA98DF0B7F /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -254,7 +234,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4AB6971641BFC5F28870AACB /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -278,7 +257,6 @@ isa = PBXNativeTarget; buildConfigurationList = F700DD0B28E652A10004836B /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 011E09F08A701B1393C5DBFA /* [CP] Check Pods Manifest.lock */, F700DCFE28E652A10004836B /* Sources */, F700DCFF28E652A10004836B /* Frameworks */, F700DD0028E652A10004836B /* Resources */, @@ -334,7 +312,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -368,28 +346,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 011E09F08A701B1393C5DBFA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -428,28 +384,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4AB6971641BFC5F28870AACB /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -738,7 +672,6 @@ }; F700DD0828E652A10004836B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B537BC9F2D936311267ABC65 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; @@ -771,7 +704,6 @@ }; F700DD0928E652A10004836B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0332995B6EC622E1F0605C08 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; @@ -802,7 +734,6 @@ }; F700DD0A28E652A10004836B /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46EFB01DD1BBB34F886C33A0 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; @@ -877,7 +808,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/interactive_media_ads/example/ios/Flutter/Debug.xcconfig b/packages/interactive_media_ads/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/interactive_media_ads/example/ios/Flutter/Debug.xcconfig +++ b/packages/interactive_media_ads/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/interactive_media_ads/example/ios/Flutter/Release.xcconfig b/packages/interactive_media_ads/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/interactive_media_ads/example/ios/Flutter/Release.xcconfig +++ b/packages/interactive_media_ads/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/interactive_media_ads/example/ios/Podfile b/packages/interactive_media_ads/example/ios/Podfile deleted file mode 100644 index 620e46eba607..000000000000 --- a/packages/interactive_media_ads/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj b/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj index d1cdaab697d8..c760e7511448 100644 --- a/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,8 +9,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3D282E63E10407DBACF20FD6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 544903031C10E0FA3D89D2CE /* Pods_RunnerTests.framework */; }; - 4E107A500F4C07EF26C07FFF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCBAC040E6F614A1CDCF896 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 8F0EDFD12E0A2906001938E6 /* SettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F0EDFD02E0A2906001938E6 /* SettingsTests.swift */; }; @@ -67,21 +65,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 153699881E6FE1D0B5372678 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41604FD1E0DA824F933934B2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 465840C2278A5FCA3EA77E43 /* 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 = ""; }; - 544903031C10E0FA3D89D2CE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B63D978173E0F79E02D7128 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* interactive_media_ads */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = interactive_media_ads; path = ../../ios/interactive_media_ads; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 7A0E5CD036C0A19847922937 /* 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 = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 89C6230E68C80A6F4B207726 /* 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 = ""; }; 8F0EDFD02E0A2906001938E6 /* SettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTests.swift; sourceTree = ""; }; 8F0EDFD42E4AA191001938E6 /* AdProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdProxyAPITests.swift; sourceTree = ""; }; 8F0EDFD52E4AA191001938E6 /* UniversalAdIDProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniversalAdIDProxyAPITests.swift; sourceTree = ""; }; @@ -112,7 +103,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DDCBAC040E6F614A1CDCF896 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -120,7 +110,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3D282E63E10407DBACF20FD6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -129,7 +118,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 4E107A500F4C07EF26C07FFF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -188,7 +176,6 @@ 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, AF32999759207BFF55E206F8 /* Pods */, - A4081A23792594E766916ABA /* Frameworks */, ); sourceTree = ""; }; @@ -216,24 +203,9 @@ path = Runner; sourceTree = ""; }; - A4081A23792594E766916ABA /* Frameworks */ = { - isa = PBXGroup; - children = ( - DDCBAC040E6F614A1CDCF896 /* Pods_Runner.framework */, - 544903031C10E0FA3D89D2CE /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; AF32999759207BFF55E206F8 /* Pods */ = { isa = PBXGroup; children = ( - 7A0E5CD036C0A19847922937 /* Pods-Runner.debug.xcconfig */, - 465840C2278A5FCA3EA77E43 /* Pods-Runner.release.xcconfig */, - 153699881E6FE1D0B5372678 /* Pods-Runner.profile.xcconfig */, - 89C6230E68C80A6F4B207726 /* Pods-RunnerTests.debug.xcconfig */, - 5B63D978173E0F79E02D7128 /* Pods-RunnerTests.release.xcconfig */, - 41604FD1E0DA824F933934B2 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -245,7 +217,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 021D2273D927B5073948A888 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, 3BE96F44453EDBDD7D23B8A5 /* Frameworks */, @@ -264,7 +235,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BF613E92E45E672229E9718 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -348,28 +318,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 021D2273D927B5073948A888 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -386,28 +334,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8BF613E92E45E672229E9718 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -571,7 +497,6 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 89C6230E68C80A6F4B207726 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -589,7 +514,6 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B63D978173E0F79E02D7128 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -605,7 +529,6 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 41604FD1E0DA824F933934B2 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig b/packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig +++ b/packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig b/packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig +++ b/packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/local_auth/local_auth/example/ios/Podfile b/packages/local_auth/local_auth/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/local_auth/local_auth/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj index 4c51e08a9be8..20a6988a2688 100644 --- a/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj @@ -11,7 +11,6 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 905EA9BD53427D1D5E0201A2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 169A659354207B8020CBAFB2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -33,10 +32,10 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 169A659354207B8020CBAFB2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -45,10 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AECAD9C32C456B72E1EF15CD /* 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 = ""; }; - CDAA31899F46B683C7DF728E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F0A765C02B9418ADA41B9FA9 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,7 +52,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 905EA9BD53427D1D5E0201A2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -67,21 +61,10 @@ 2059D689E1C5DE4B00CC4552 /* Pods */ = { isa = PBXGroup; children = ( - AECAD9C32C456B72E1EF15CD /* Pods-Runner.debug.xcconfig */, - F0A765C02B9418ADA41B9FA9 /* Pods-Runner.release.xcconfig */, - CDAA31899F46B683C7DF728E /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - 746CA8E7C5F07CD712AE0A0A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 169A659354207B8020CBAFB2 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,7 +84,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 2059D689E1C5DE4B00CC4552 /* Pods */, - 746CA8E7C5F07CD712AE0A0A /* Frameworks */, ); sourceTree = ""; }; @@ -135,7 +117,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3CA2A081CA18BC0C652EA199 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -223,28 +204,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3CA2A081CA18BC0C652EA199 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Release.xcconfig b/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/local_auth/local_auth/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/local_auth/local_auth/example/macos/Podfile b/packages/local_auth/local_auth/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/local_auth/local_auth/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/local_auth/local_auth/example/macos/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth/example/macos/Runner.xcodeproj/project.pbxproj index 22443539bccb..c4a9fd421b0f 100644 --- a/packages/local_auth/local_auth/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/local_auth/local_auth/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 1BC2DC09A8E94B377F42CF98 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE72E01DCF4158EA81E6F9AC /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -54,8 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 09A2351319B85EBB2712065D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 206B53A30EED4EAA41637C9C /* 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 = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -70,15 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 48ED168D9C105B30C2229B4F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 84B2F8C324D0BC6169CF7C4A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 8FAE613E79CDA0335C27BB71 /* 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 = ""; }; - 941800DCC46CF3A6E134F013 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AE72E01DCF4158EA81E6F9AC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C0EE013DE4EFF82F20A45B81 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 1BC2DC09A8E94B377F42CF98 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -111,7 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, F749529E0EAC4E62673B56C1 /* Pods */, ); sourceTree = ""; @@ -160,24 +149,9 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - AE72E01DCF4158EA81E6F9AC /* Pods_Runner.framework */, - 941800DCC46CF3A6E134F013 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; F749529E0EAC4E62673B56C1 /* Pods */ = { isa = PBXGroup; children = ( - C0EE013DE4EFF82F20A45B81 /* Pods-Runner.debug.xcconfig */, - 8FAE613E79CDA0335C27BB71 /* Pods-Runner.release.xcconfig */, - 48ED168D9C105B30C2229B4F /* Pods-Runner.profile.xcconfig */, - 206B53A30EED4EAA41637C9C /* Pods-RunnerTests.debug.xcconfig */, - 84B2F8C324D0BC6169CF7C4A /* Pods-RunnerTests.release.xcconfig */, - 09A2351319B85EBB2712065D /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -189,7 +163,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 43C24571E48B9A5309B915D5 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -309,28 +282,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 43C24571E48B9A5309B915D5 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/local_auth/local_auth_darwin/example/ios/Flutter/Debug.xcconfig b/packages/local_auth/local_auth_darwin/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/local_auth/local_auth_darwin/example/ios/Flutter/Debug.xcconfig +++ b/packages/local_auth/local_auth_darwin/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/local_auth/local_auth_darwin/example/ios/Flutter/Release.xcconfig b/packages/local_auth/local_auth_darwin/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/local_auth/local_auth_darwin/example/ios/Flutter/Release.xcconfig +++ b/packages/local_auth/local_auth_darwin/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/local_auth/local_auth_darwin/example/ios/Podfile b/packages/local_auth/local_auth_darwin/example/ios/Podfile deleted file mode 100644 index 620e46eba607..000000000000 --- a/packages/local_auth/local_auth_darwin/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/local_auth/local_auth_darwin/example/ios/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth_darwin/example/ios/Runner.xcodeproj/project.pbxproj index 145e0cb9f947..938fff8a4e42 100644 --- a/packages/local_auth/local_auth_darwin/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/local_auth/local_auth_darwin/example/ios/Runner.xcodeproj/project.pbxproj @@ -13,11 +13,9 @@ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 7884E8682EC3CC0700C636F2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 9375D20F3481A1BF972196CD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB8BB33B4246DB498E610EBA /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C65F3A3729D330D26854D361 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A677DF28B7C406CEAC95220D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -48,9 +46,7 @@ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 330AD6512F3D2D32005FB0FC /* FLALocalAuthPluginTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLALocalAuthPluginTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 338F28E1D1B91325A1924393 /* 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 = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 70189EE0237D2546F1243193 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; @@ -58,8 +54,6 @@ 78DABEA22ED26510000E7860 /* local_auth_darwin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = local_auth_darwin; path = ../../darwin/local_auth_darwin; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 928E25B0578D7162FDC359A1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 945DB9938D5EFD71606EE52A /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -67,10 +61,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A677DF28B7C406CEAC95220D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AE81DFC762026ECC19E90B57 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - DB8BB33B4246DB498E610EBA /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F118122901367881B7D70D37 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -78,7 +68,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9375D20F3481A1BF972196CD /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -87,7 +76,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - C65F3A3729D330D26854D361 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -106,12 +94,6 @@ 7E280321D48EB544D54BA36C /* Pods */ = { isa = PBXGroup; children = ( - 338F28E1D1B91325A1924393 /* Pods-Runner.debug.xcconfig */, - 70189EE0237D2546F1243193 /* Pods-Runner.release.xcconfig */, - 928E25B0578D7162FDC359A1 /* Pods-Runner.profile.xcconfig */, - 945DB9938D5EFD71606EE52A /* Pods-RunnerTests.debug.xcconfig */, - AE81DFC762026ECC19E90B57 /* Pods-RunnerTests.release.xcconfig */, - F118122901367881B7D70D37 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -138,7 +120,6 @@ 97C146EF1CF9000F007C117D /* Products */, 330AD6502F3D2D0E005FB0FC /* RunnerTests */, 7E280321D48EB544D54BA36C /* Pods */, - CBFD801911B7AA0455CCBD2D /* Frameworks */, ); sourceTree = ""; }; @@ -167,15 +148,6 @@ path = Runner; sourceTree = ""; }; - CBFD801911B7AA0455CCBD2D /* Frameworks */ = { - isa = PBXGroup; - children = ( - A677DF28B7C406CEAC95220D /* Pods_Runner.framework */, - DB8BB33B4246DB498E610EBA /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -183,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D2130141FB82C4ABB7D1A5D6 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, 5918301AD6FB1B5EA756AC61 /* Frameworks */, @@ -202,7 +173,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8F4BF927674D152BE7F27ADA /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -303,28 +273,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8F4BF927674D152BE7F27ADA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -340,28 +288,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - D2130141FB82C4ABB7D1A5D6 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -488,7 +414,6 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 945DB9938D5EFD71606EE52A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -507,7 +432,6 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AE81DFC762026ECC19E90B57 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -524,7 +448,6 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F118122901367881B7D70D37 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; diff --git a/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Release.xcconfig b/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/local_auth/local_auth_darwin/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/local_auth/local_auth_darwin/example/macos/Podfile b/packages/local_auth/local_auth_darwin/example/macos/Podfile deleted file mode 100644 index ff5ddb3b8bdc..000000000000 --- a/packages/local_auth/local_auth_darwin/example/macos/Podfile +++ /dev/null @@ -1,42 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/local_auth/local_auth_darwin/example/macos/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth_darwin/example/macos/Runner.xcodeproj/project.pbxproj index d31f93556120..d857380a42d3 100644 --- a/packages/local_auth/local_auth_darwin/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/local_auth/local_auth_darwin/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,13 +21,11 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 274905EC52005E05DF633ACA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91FACED086369F6DB644E8B1 /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 3A858B24A41D64C4BF302405 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB20D00B3AAB343668A80A59 /* Pods_RunnerTests.framework */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; E62C10892C07DA2A000E3CCC /* FLALocalAuthPluginTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62C10882C07DA2A000E3CCC /* FLALocalAuthPluginTests.swift */; }; /* End PBXBuildFile section */ @@ -63,7 +61,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 09A6D0964FC42F6CEB3383B0 /* 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 = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; @@ -79,18 +76,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 6DC2CC18007F1B81C5CD38EB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 6E148E4EE27FBB2587C8CCE0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* local_auth_darwin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = local_auth_darwin; path = ../../../darwin/local_auth_darwin; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7C88C93F66E851DCCA28120C /* 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 = ""; }; - 8CA026E1D618025C0D52DD90 /* 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 = ""; }; - 91FACED086369F6DB644E8B1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - CB20D00B3AAB343668A80A59 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DC8BF0B04B7666C6A6EA0D26 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; E62C10882C07DA2A000E3CCC /* FLALocalAuthPluginTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FLALocalAuthPluginTests.swift; path = ../../../darwin/Tests/FLALocalAuthPluginTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -99,7 +89,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3A858B24A41D64C4BF302405 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -108,7 +97,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 274905EC52005E05DF633ACA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -141,7 +129,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 42D886FD4D6805989133E5D0 /* Pods */, ); sourceTree = ""; @@ -196,25 +183,10 @@ 42D886FD4D6805989133E5D0 /* Pods */ = { isa = PBXGroup; children = ( - 09A6D0964FC42F6CEB3383B0 /* Pods-Runner.debug.xcconfig */, - 8CA026E1D618025C0D52DD90 /* Pods-Runner.release.xcconfig */, - DC8BF0B04B7666C6A6EA0D26 /* Pods-Runner.profile.xcconfig */, - 7C88C93F66E851DCCA28120C /* Pods-RunnerTests.debug.xcconfig */, - 6E148E4EE27FBB2587C8CCE0 /* Pods-RunnerTests.release.xcconfig */, - 6DC2CC18007F1B81C5CD38EB /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 91FACED086369F6DB644E8B1 /* Pods_Runner.framework */, - CB20D00B3AAB343668A80A59 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -222,7 +194,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 079FC72150E3D6C338EFB4FA /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -241,7 +212,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 15765A7727B689B854708867 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -303,7 +273,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -336,50 +306,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 079FC72150E3D6C338EFB4FA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 15765A7727B689B854708867 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -469,7 +395,6 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7C88C93F66E851DCCA28120C /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -486,7 +411,6 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6E148E4EE27FBB2587C8CCE0 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -502,7 +426,6 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6DC2CC18007F1B81C5CD38EB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -795,7 +718,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/path_provider/path_provider/example/ios/Flutter/Debug.xcconfig b/packages/path_provider/path_provider/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/path_provider/path_provider/example/ios/Flutter/Debug.xcconfig +++ b/packages/path_provider/path_provider/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/path_provider/path_provider/example/ios/Flutter/Release.xcconfig b/packages/path_provider/path_provider/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/path_provider/path_provider/example/ios/Flutter/Release.xcconfig +++ b/packages/path_provider/path_provider/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/path_provider/path_provider/example/ios/Podfile b/packages/path_provider/path_provider/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/path_provider/path_provider/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/path_provider/path_provider/example/ios/Runner.xcodeproj/project.pbxproj b/packages/path_provider/path_provider/example/ios/Runner.xcodeproj/project.pbxproj index 25ece8d4c184..c8adcc5d0bd6 100644 --- a/packages/path_provider/path_provider/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/path_provider/path_provider/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2845184EEBEC52AD12645832 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D692C93D5ECEF65168BA36 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; @@ -34,11 +33,10 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4D8A276405BF24CBEA3E388B /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 84D692C93D5ECEF65168BA36 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -46,9 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5B0C67825A38CB73A4D9199 /* 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 = ""; }; - B9B73C13AA4BD5419AD293F4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 2845184EEBEC52AD12645832 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 668ACDABF0807F1341F739B9 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 84D692C93D5ECEF65168BA36 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 6EF92B34008B02D2326BC11D /* Pods */ = { - isa = PBXGroup; - children = ( - B5B0C67825A38CB73A4D9199 /* Pods-Runner.debug.xcconfig */, - 4D8A276405BF24CBEA3E388B /* Pods-Runner.release.xcconfig */, - B9B73C13AA4BD5419AD293F4 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 6EF92B34008B02D2326BC11D /* Pods */, - 668ACDABF0807F1341F739B9 /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AA83EFBF6960B64E1E1E6EEA /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -239,28 +211,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - AA83EFBF6960B64E1E1E6EEA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Debug.xcconfig index 785633d3a86b..c2efd0b608ba 100644 --- a/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Release.xcconfig b/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Release.xcconfig index 5fba960c3af2..c2efd0b608ba 100644 --- a/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/path_provider/path_provider/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/path_provider/path_provider/example/macos/Podfile b/packages/path_provider/path_provider/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/path_provider/path_provider/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/path_provider/path_provider/example/macos/Runner.xcodeproj/project.pbxproj b/packages/path_provider/path_provider/example/macos/Runner.xcodeproj/project.pbxproj index ed9cef645091..6e7dcd34b70c 100644 --- a/packages/path_provider/path_provider/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/path_provider/path_provider/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 23F6FAA3AF82DFCF2B7DD79A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1523F64D34B952AB303BFFA8 /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -54,8 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0A1A53CF00FD04D6ED0A8E4A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 1523F64D34B952AB303BFFA8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* path_provider_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = path_provider_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -70,11 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 46139048DB9F59D473B61B5E /* 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 = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - F4586DA69948E3A954A2FC9C /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,24 +78,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 23F6FAA3AF82DFCF2B7DD79A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 30697CBF35C100C7DD4B4699 /* Pods */ = { - isa = PBXGroup; - children = ( - 46139048DB9F59D473B61B5E /* Pods-Runner.debug.xcconfig */, - F4586DA69948E3A954A2FC9C /* Pods-Runner.release.xcconfig */, - 0A1A53CF00FD04D6ED0A8E4A /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -118,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - 30697CBF35C100C7DD4B4699 /* Pods */, ); sourceTree = ""; }; @@ -167,14 +148,6 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1523F64D34B952AB303BFFA8 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 82C3ED26F2C350499338A54B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; }; - 82C3ED26F2C350499338A54B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/path_provider/path_provider_foundation/example/ios/Flutter/Debug.xcconfig b/packages/path_provider/path_provider_foundation/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/path_provider/path_provider_foundation/example/ios/Flutter/Debug.xcconfig +++ b/packages/path_provider/path_provider_foundation/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/path_provider/path_provider_foundation/example/ios/Flutter/Release.xcconfig b/packages/path_provider/path_provider_foundation/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/path_provider/path_provider_foundation/example/ios/Flutter/Release.xcconfig +++ b/packages/path_provider/path_provider_foundation/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/path_provider/path_provider_foundation/example/ios/Podfile b/packages/path_provider/path_provider_foundation/example/ios/Podfile deleted file mode 100644 index a4e8dc81f973..000000000000 --- a/packages/path_provider/path_provider_foundation/example/ios/Podfile +++ /dev/null @@ -1,44 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/path_provider/path_provider_foundation/example/ios/Runner.xcodeproj/project.pbxproj b/packages/path_provider/path_provider_foundation/example/ios/Runner.xcodeproj/project.pbxproj index 65935b7e7140..0c70fafc2d34 100644 --- a/packages/path_provider/path_provider_foundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/path_provider/path_provider_foundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -10,13 +10,11 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 33258D7929818305006BAA98 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33258D7729818302006BAA98 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 569E86265D93B926F433B2DF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 479D5DD53D431F6BBABA2E43 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D18DAAE2A3406D4789C8DAB2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 988A82A3033B36B9EAF2782B /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,18 +43,13 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1E28C831B7D8EA9408BFB69A /* 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 = ""; }; 33258D7729818302006BAA98 /* RunnerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RunnerTests.swift; path = ../../darwin/RunnerTests/RunnerTests.swift; sourceTree = ""; }; 3380327429784D96002D32AE /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 479D5DD53D431F6BBABA2E43 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DB8EF5A2759054360D79B8D /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 86F7986E9DC17432CC8AE464 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 91DA83C3D33EB641BAEA3087 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -64,10 +57,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 988A82A3033B36B9EAF2782B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9AEFA2CD2991B4C300C2ED4A /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; - B0CB6DC5569DDEB858FBEB22 /* 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 = ""; }; - C1E50EBAA845915BAF5591C9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -75,7 +65,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D18DAAE2A3406D4789C8DAB2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -84,7 +73,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 569E86265D93B926F433B2DF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -119,7 +107,6 @@ 33258D76298182CC006BAA98 /* RunnerTests */, 97C146EF1CF9000F007C117D /* Products */, E1C876D20454FC3A1ED7F7E5 /* Pods */, - C72F144CE69E83C4574EB334 /* Frameworks */, ); sourceTree = ""; }; @@ -148,24 +135,9 @@ path = Runner; sourceTree = ""; }; - C72F144CE69E83C4574EB334 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 479D5DD53D431F6BBABA2E43 /* Pods_Runner.framework */, - 988A82A3033B36B9EAF2782B /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; E1C876D20454FC3A1ED7F7E5 /* Pods */ = { isa = PBXGroup; children = ( - 5DB8EF5A2759054360D79B8D /* Pods-Runner.debug.xcconfig */, - B0CB6DC5569DDEB858FBEB22 /* Pods-Runner.release.xcconfig */, - 91DA83C3D33EB641BAEA3087 /* Pods-Runner.profile.xcconfig */, - 1E28C831B7D8EA9408BFB69A /* Pods-RunnerTests.debug.xcconfig */, - C1E50EBAA845915BAF5591C9 /* Pods-RunnerTests.release.xcconfig */, - 86F7986E9DC17432CC8AE464 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -177,7 +149,6 @@ isa = PBXNativeTarget; buildConfigurationList = 3380327D29784D96002D32AE /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9144B1C9B36C0B00C1DF8FBB /* [CP] Check Pods Manifest.lock */, 3380327029784D96002D32AE /* Sources */, 3380327129784D96002D32AE /* Frameworks */, 3380327229784D96002D32AE /* Resources */, @@ -196,7 +167,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 45F307B61DA47FC553C87CA6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -296,50 +266,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 45F307B61DA47FC553C87CA6 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 9144B1C9B36C0B00C1DF8FBB /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -479,7 +405,6 @@ }; 3380327A29784D96002D32AE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1E28C831B7D8EA9408BFB69A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -494,7 +419,6 @@ }; 3380327B29784D96002D32AE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C1E50EBAA845915BAF5591C9 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -509,7 +433,6 @@ }; 3380327C29784D96002D32AE /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 86F7986E9DC17432CC8AE464 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Debug.xcconfig index 785633d3a86b..c2efd0b608ba 100644 --- a/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Release.xcconfig b/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Release.xcconfig index 5fba960c3af2..c2efd0b608ba 100644 --- a/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/path_provider/path_provider_foundation/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/path_provider/path_provider_foundation/example/macos/Podfile b/packages/path_provider/path_provider_foundation/example/macos/Podfile deleted file mode 100644 index b687011ee229..000000000000 --- a/packages/path_provider/path_provider_foundation/example/macos/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/path_provider/path_provider_foundation/example/macos/Runner.xcodeproj/project.pbxproj b/packages/path_provider/path_provider_foundation/example/macos/Runner.xcodeproj/project.pbxproj index 89b9f4cfefeb..dcb49a46668e 100644 --- a/packages/path_provider/path_provider_foundation/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/path_provider/path_provider_foundation/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 23F6FAA3AF82DFCF2B7DD79A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1523F64D34B952AB303BFFA8 /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -29,7 +28,6 @@ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 33EBD3AA26728EA70013E557 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33EBD3A926728EA70013E557 /* RunnerTests.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - FEE1C654F5DF2F210CC17B17 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA0C143378C83246316BE4F7 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -63,11 +61,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0A1A53CF00FD04D6ED0A8E4A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 0B41979101786837FC1ABC29 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 0B43E5DCF2F998ABCD395373 /* 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 = ""; }; - 1523F64D34B952AB303BFFA8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C62AF358280E9A8FA10B127 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* path_provider_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = path_provider_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -85,12 +78,9 @@ 33EBD3A726728EA70013E557 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 33EBD3A926728EA70013E557 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ../../../darwin/RunnerTests/RunnerTests.swift; sourceTree = ""; }; 33EBD3AB26728EA70013E557 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 46139048DB9F59D473B61B5E /* 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 = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BA0C143378C83246316BE4F7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F4586DA69948E3A954A2FC9C /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -99,7 +89,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 23F6FAA3AF82DFCF2B7DD79A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,7 +96,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FEE1C654F5DF2F210CC17B17 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -117,12 +105,6 @@ 30697CBF35C100C7DD4B4699 /* Pods */ = { isa = PBXGroup; children = ( - 46139048DB9F59D473B61B5E /* Pods-Runner.debug.xcconfig */, - F4586DA69948E3A954A2FC9C /* Pods-Runner.release.xcconfig */, - 0A1A53CF00FD04D6ED0A8E4A /* Pods-Runner.profile.xcconfig */, - 0B43E5DCF2F998ABCD395373 /* Pods-RunnerTests.debug.xcconfig */, - 0B41979101786837FC1ABC29 /* Pods-RunnerTests.release.xcconfig */, - 1C62AF358280E9A8FA10B127 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -145,7 +127,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33EBD3A826728EA70013E557 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 30697CBF35C100C7DD4B4699 /* Pods */, ); sourceTree = ""; @@ -204,15 +185,6 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1523F64D34B952AB303BFFA8 /* Pods_Runner.framework */, - BA0C143378C83246316BE4F7 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -220,7 +192,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 82C3ED26F2C350499338A54B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -244,7 +215,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33EBD3B126728EA70013E557 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 74960BD2BEA7516F537D0F92 /* [CP] Check Pods Manifest.lock */, 33EBD3A326728EA70013E557 /* Sources */, 33EBD3A426728EA70013E557 /* Frameworks */, 33EBD3A526728EA70013E557 /* Resources */, @@ -370,50 +340,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; }; - 74960BD2BEA7516F537D0F92 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 82C3ED26F2C350499338A54B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -704,7 +630,6 @@ }; 33EBD3AE26728EA70013E557 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B43E5DCF2F998ABCD395373 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -723,7 +648,6 @@ }; 33EBD3AF26728EA70013E557 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B41979101786837FC1ABC29 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -742,7 +666,6 @@ }; 33EBD3B026728EA70013E557 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C62AF358280E9A8FA10B127 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; diff --git a/packages/pigeon/example/app/ios/Flutter/Debug.xcconfig b/packages/pigeon/example/app/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/pigeon/example/app/ios/Flutter/Debug.xcconfig +++ b/packages/pigeon/example/app/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pigeon/example/app/ios/Flutter/Release.xcconfig b/packages/pigeon/example/app/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/pigeon/example/app/ios/Flutter/Release.xcconfig +++ b/packages/pigeon/example/app/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pigeon/example/app/ios/Podfile b/packages/pigeon/example/app/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/pigeon/example/app/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/pigeon/example/app/ios/Runner.xcodeproj/project.pbxproj b/packages/pigeon/example/app/ios/Runner.xcodeproj/project.pbxproj index 38368f4a500d..d35dbca6ab24 100644 --- a/packages/pigeon/example/app/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/pigeon/example/app/ios/Runner.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3368472729F02D040090029A /* Messages.g.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3368472629F02D040090029A /* Messages.g.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3EE8794C275F32088AD591EB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A650BDD6F68BD8FFBF3F1780 /* Pods_Runner.framework */; }; 474BFAAB2D01312700CB80BA /* EventChannelMessages.g.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474BFAAA2D01312700CB80BA /* EventChannelMessages.g.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; @@ -35,12 +34,12 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27CAC22A75533A4A7E343992 /* 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 = ""; }; 3368472629F02D040090029A /* Messages.g.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Messages.g.swift; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 474BFAAA2D01312700CB80BA /* EventChannelMessages.g.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventChannelMessages.g.swift; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -49,10 +48,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A650BDD6F68BD8FFBF3F1780 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AE98FBE14AEFBBA591D3392B /* 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 = ""; }; - C9FCCD56B6FEFE59650B7D41 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -61,27 +56,15 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 3EE8794C275F32088AD591EB /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2DE1FB11A4049DEDD8609D3D /* Frameworks */ = { - isa = PBXGroup; - children = ( - A650BDD6F68BD8FFBF3F1780 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 5AC2660E9756DE131CECB642 /* Pods */ = { isa = PBXGroup; children = ( - AE98FBE14AEFBBA591D3392B /* Pods-Runner.debug.xcconfig */, - 27CAC22A75533A4A7E343992 /* Pods-Runner.release.xcconfig */, - C9FCCD56B6FEFE59650B7D41 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -105,7 +88,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 5AC2660E9756DE131CECB642 /* Pods */, - 2DE1FB11A4049DEDD8609D3D /* Frameworks */, ); sourceTree = ""; }; @@ -141,7 +123,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 11874A3E3724772837B0A747 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -186,7 +167,7 @@ ); mainGroup = 97C146E51CF9000F007C117D; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; @@ -212,28 +193,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 11874A3E3724772837B0A747 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -548,7 +507,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/pigeon/example/app/macos/Flutter/Flutter-Debug.xcconfig b/packages/pigeon/example/app/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/pigeon/example/app/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/pigeon/example/app/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/pigeon/example/app/macos/Flutter/Flutter-Release.xcconfig b/packages/pigeon/example/app/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/pigeon/example/app/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/pigeon/example/app/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/pigeon/example/app/macos/Podfile b/packages/pigeon/example/app/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/pigeon/example/app/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/pigeon/example/app/macos/Runner.xcodeproj/project.pbxproj b/packages/pigeon/example/app/macos/Runner.xcodeproj/project.pbxproj index 5e6b80a7523e..c175252ead73 100644 --- a/packages/pigeon/example/app/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/pigeon/example/app/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - FE4D972A28C4B251F843526C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32CC79C72C76529428DDC41C /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,7 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 32CC79C72C76529428DDC41C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 3368472429F02AAC0090029A /* Messages.g.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Messages.g.swift; path = ../../ios/Runner/Messages.g.swift; sourceTree = ""; }; @@ -70,11 +68,8 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4891FB202295F11C6F60A6FC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A31DF385E5E70E8894046AC3 /* 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 = ""; }; - F4D94E001BD74D8D03893EC5 /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -82,7 +77,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FE4D972A28C4B251F843526C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -106,8 +100,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - B56E624D6807F2D1E8C4EA7C /* Pods */, ); sourceTree = ""; }; @@ -155,25 +147,6 @@ path = Runner; sourceTree = ""; }; - B56E624D6807F2D1E8C4EA7C /* Pods */ = { - isa = PBXGroup; - children = ( - A31DF385E5E70E8894046AC3 /* Pods-Runner.debug.xcconfig */, - F4D94E001BD74D8D03893EC5 /* Pods-Runner.release.xcconfig */, - 4891FB202295F11C6F60A6FC /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 32CC79C72C76529428DDC41C /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -181,7 +154,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4901B19C7FAADB635D77080B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -294,28 +266,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4901B19C7FAADB635D77080B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Debug.xcconfig b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Debug.xcconfig +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Release.xcconfig b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Release.xcconfig +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Podfile b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Podfile deleted file mode 100644 index 797861ae71c7..000000000000 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Podfile +++ /dev/null @@ -1,46 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - - target.build_configurations.each do |config| - config.build_settings['GCC_TREAT_WARNINGS_AS_ERRORS'] = 'YES' - end - end -end diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj index 47f4debbc6fb..9ec8521a194a 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj @@ -22,14 +22,12 @@ 33A341B0291EBA9100D34E0F /* PrimitiveTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 33A341A4291EBA9100D34E0F /* PrimitiveTest.m */; }; 33AA1662291EB8B600ECBEEB /* RunnerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33AA1661291EB8B600ECBEEB /* RunnerTests.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 704994D29C27E76CD86C70BB /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 066DE82583FFABE4243776FB /* libPods-RunnerTests.a */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EB2133B34553CD36D4AE374F /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F87F49FAD891F66A75D95E85 /* libPods-Runner.a */; }; - 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -56,9 +54,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 02A70E05D812113F13F5A217 /* 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 = ""; }; - 066DE82583FFABE4243776FB /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 078F27A33C9DB47686C00E70 /* 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 = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 33A34196291EBA9000D34E0F /* AsyncHandlersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncHandlersTest.m; sourceTree = ""; }; @@ -79,9 +74,9 @@ 33AA165F291EB8B600ECBEEB /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 33AA1661291EB8B600ECBEEB /* RunnerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RunnerTests.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 561E2904E07F35F0B04F5B46 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 6113B2770ED5A74828978171 /* 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 = ""; }; - 62B4FD6165884218124CB1E9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; + 78DABEA22ED26510000E7860 /* alternate_language_test_plugin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = alternate_language_test_plugin; path = ../../darwin/alternate_language_test_plugin; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -93,11 +88,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C47E6C31D80944C08FAD78CC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - F87F49FAD891F66A75D95E85 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* alternate_language_test_plugin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = alternate_language_test_plugin; path = ../../darwin/alternate_language_test_plugin; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -105,7 +95,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 704994D29C27E76CD86C70BB /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -114,22 +103,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - EB2133B34553CD36D4AE374F /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 00DD93B7FA51A2141F86E724 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F87F49FAD891F66A75D95E85 /* libPods-Runner.a */, - 066DE82583FFABE4243776FB /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; 33AA1660291EB8B600ECBEEB /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -156,12 +135,6 @@ 7ADF8AD6006543AA8B1E20C1 /* Pods */ = { isa = PBXGroup; children = ( - 02A70E05D812113F13F5A217 /* Pods-Runner.debug.xcconfig */, - 6113B2770ED5A74828978171 /* Pods-Runner.release.xcconfig */, - 62B4FD6165884218124CB1E9 /* Pods-Runner.profile.xcconfig */, - 078F27A33C9DB47686C00E70 /* Pods-RunnerTests.debug.xcconfig */, - 561E2904E07F35F0B04F5B46 /* Pods-RunnerTests.release.xcconfig */, - C47E6C31D80944C08FAD78CC /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -188,7 +161,6 @@ 33AA1660291EB8B600ECBEEB /* RunnerTests */, 97C146EF1CF9000F007C117D /* Products */, 7ADF8AD6006543AA8B1E20C1 /* Pods */, - 00DD93B7FA51A2141F86E724 /* Frameworks */, ); sourceTree = ""; }; @@ -232,7 +204,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33AA1668291EB8B600ECBEEB /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 81D50B6E064849557BD0D347 /* [CP] Check Pods Manifest.lock */, 33AA165B291EB8B600ECBEEB /* Sources */, 33AA165C291EB8B600ECBEEB /* Frameworks */, 33AA165D291EB8B600ECBEEB /* Resources */, @@ -248,13 +219,9 @@ productType = "com.apple.product-type.bundle.unit-test"; }; 97C146ED1CF9000F007C117D /* Runner */ = { - packageProductDependencies = ( - 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, - ); isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F4137F1E25211755D7761631 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -267,6 +234,9 @@ dependencies = ( ); name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); productName = Runner; productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; @@ -275,9 +245,6 @@ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { - packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, - ); isa = PBXProject; attributes = { LastUpgradeCheck = 1510; @@ -301,6 +268,9 @@ Base, ); mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; projectRoot = ""; @@ -349,28 +319,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 81D50B6E064849557BD0D347 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -386,28 +334,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F4137F1E25211755D7761631 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -541,7 +467,6 @@ }; 33AA1665291EB8B600ECBEEB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 078F27A33C9DB47686C00E70 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -556,7 +481,6 @@ }; 33AA1666291EB8B600ECBEEB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 561E2904E07F35F0B04F5B46 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -571,7 +495,6 @@ }; 33AA1667291EB8B600ECBEEB /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C47E6C31D80944C08FAD78CC /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -759,12 +682,14 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; /* End XCLocalSwiftPackageReference section */ + /* Begin XCSwiftPackageProductDependency section */ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { isa = XCSwiftPackageProductDependency; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Release.xcconfig b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Podfile b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Podfile deleted file mode 100644 index ff5ddb3b8bdc..000000000000 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Podfile +++ /dev/null @@ -1,42 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Runner.xcodeproj/project.pbxproj b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Runner.xcodeproj/project.pbxproj index 050d35d6f70e..edd0d84d497d 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,8 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0D7AA04F867B850C58216739 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF8BB4081B46FB8120727E26 /* Pods_Runner.framework */; }; - 175F934430D0CAB10EA34579 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 682C75DDB5CD4EB8D08360C5 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; @@ -79,19 +77,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5EE3C0398E9AC1B8C35AE87D /* 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 = ""; }; - 682C75DDB5CD4EB8D08360C5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7671709AF50BB50842EA8B2B /* 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 = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* alternate_language_test_plugin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = alternate_language_test_plugin; path = ../../../darwin/alternate_language_test_plugin; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7B755EC1B70C6DE5D62ECE5B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - CF8BB4081B46FB8120727E26 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D2B4CC0DCD712A73FC4805C2 /* 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 = ""; }; - DAFBE1E70BF8E058B1A22B17 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EC8E2B4AD109E092CD6B9C41 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -99,7 +89,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 175F934430D0CAB10EA34579 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -108,7 +97,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 0D7AA04F867B850C58216739 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -118,12 +106,6 @@ 1EC62CB395CE8E1EC824E078 /* Pods */ = { isa = PBXGroup; children = ( - D2B4CC0DCD712A73FC4805C2 /* Pods-Runner.debug.xcconfig */, - 7671709AF50BB50842EA8B2B /* Pods-Runner.release.xcconfig */, - DAFBE1E70BF8E058B1A22B17 /* Pods-Runner.profile.xcconfig */, - 5EE3C0398E9AC1B8C35AE87D /* Pods-RunnerTests.debug.xcconfig */, - EC8E2B4AD109E092CD6B9C41 /* Pods-RunnerTests.release.xcconfig */, - 7B755EC1B70C6DE5D62ECE5B /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -154,7 +136,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 1EC62CB395CE8E1EC824E078 /* Pods */, ); sourceTree = ""; @@ -206,15 +187,6 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - CF8BB4081B46FB8120727E26 /* Pods_Runner.framework */, - 682C75DDB5CD4EB8D08360C5 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -222,7 +194,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D1118CDCC1A944FBF64A562E /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -241,7 +212,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 6922B9504013AEB23F67302D /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,7 +271,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -372,50 +342,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6922B9504013AEB23F67302D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - D1118CDCC1A944FBF64A562E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -467,7 +393,6 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EE3C0398E9AC1B8C35AE87D /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -482,7 +407,6 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EC8E2B4AD109E092CD6B9C41 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -497,7 +421,6 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B755EC1B70C6DE5D62ECE5B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -783,7 +706,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Debug.xcconfig b/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Debug.xcconfig +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Release.xcconfig b/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Release.xcconfig +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/Podfile b/packages/pigeon/platform_tests/test_plugin/example/ios/Podfile deleted file mode 100644 index c279c7bbb597..000000000000 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/Podfile +++ /dev/null @@ -1,48 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - - target.build_configurations.each do |config| - config.build_settings['SWIFT_TREAT_WARNINGS_AS_ERRORS'] = 'YES' - end - end -end diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/Runner.xcodeproj/project.pbxproj b/packages/pigeon/platform_tests/test_plugin/example/ios/Runner.xcodeproj/project.pbxproj index 526af2157a81..1c93e5bc05f0 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1A110B6716B0F8542A6A18D1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC37C4E8AE005B445F208C02 /* Pods_RunnerTests.framework */; }; 33A341B8291ECCA100D34E0F /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A341B7291ECCA100D34E0F /* RunnerTests.swift */; }; 33A341CB291ECDFD00D34E0F /* MultipleArityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A341BF291ECDFD00D34E0F /* MultipleArityTests.swift */; }; 33A341CC291ECDFD00D34E0F /* AllDatatypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A341C0291ECDFD00D34E0F /* AllDatatypesTests.swift */; }; @@ -23,7 +22,6 @@ 33A341D5291ECDFD00D34E0F /* AsyncHandlersTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A341C9291ECDFD00D34E0F /* AsyncHandlersTest.swift */; }; 33A341D6291ECDFD00D34E0F /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33A341CA291ECDFD00D34E0F /* Utils.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6885ADFFF3D912887C317B7C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 786308B4AA81D1B6AA2FA10F /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 8F85C49D2BBB14F30053FB60 /* InstanceManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F85C49C2BBB14F30053FB60 /* InstanceManagerTests.swift */; }; @@ -58,7 +56,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1003C19F4B2A0DDD9763A1E4 /* 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 = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 33A341B5291ECCA100D34E0F /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -76,11 +73,11 @@ 33A341C9291ECDFD00D34E0F /* AsyncHandlersTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncHandlersTest.swift; sourceTree = ""; }; 33A341CA291ECDFD00D34E0F /* Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 407DC1E57B864B3AC2D1D534 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4E640DBB26024C85BF85408E /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 786308B4AA81D1B6AA2FA10F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; + 78DABEA22ED26510000E7860 /* test_plugin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = test_plugin; path = ../../darwin/test_plugin; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 8F85C49C2BBB14F30053FB60 /* InstanceManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceManagerTests.swift; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; @@ -90,15 +87,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9808B6775522250A40D7D452 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - BC37C4E8AE005B445F208C02 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BF5B776B52F984FB430C15A3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; E04641F92A46270400661C9E /* NSNullFieldTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSNullFieldTests.swift; sourceTree = ""; }; - EB04430DB6D43CCC08FA526B /* 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 = ""; }; F750BDED2F28844900E3DB39 /* ProxyApiTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyApiTests.swift; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* test_plugin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = test_plugin; path = ../../darwin/test_plugin; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -106,7 +96,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1A110B6716B0F8542A6A18D1 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -115,7 +104,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 6885ADFFF3D912887C317B7C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -148,25 +136,10 @@ 388F17C8A0325528A352A807 /* Pods */ = { isa = PBXGroup; children = ( - 1003C19F4B2A0DDD9763A1E4 /* Pods-Runner.debug.xcconfig */, - 4E640DBB26024C85BF85408E /* Pods-Runner.release.xcconfig */, - BF5B776B52F984FB430C15A3 /* Pods-Runner.profile.xcconfig */, - EB04430DB6D43CCC08FA526B /* Pods-RunnerTests.debug.xcconfig */, - 407DC1E57B864B3AC2D1D534 /* Pods-RunnerTests.release.xcconfig */, - 9808B6775522250A40D7D452 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - 8060760051E07AE47C40F036 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 786308B4AA81D1B6AA2FA10F /* Pods_Runner.framework */, - BC37C4E8AE005B445F208C02 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -189,7 +162,6 @@ 33A341B6291ECCA100D34E0F /* RunnerTests */, 97C146EF1CF9000F007C117D /* Products */, 388F17C8A0325528A352A807 /* Pods */, - 8060760051E07AE47C40F036 /* Frameworks */, ); sourceTree = ""; }; @@ -224,7 +196,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33A341BE291ECCA100D34E0F /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 68071F6E376CAAF900FEFD29 /* [CP] Check Pods Manifest.lock */, 33A341B1291ECCA100D34E0F /* Sources */, 33A341B2291ECCA100D34E0F /* Frameworks */, 33A341B3291ECCA100D34E0F /* Resources */, @@ -243,7 +214,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 7E33641B55112906F49CAB0C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -343,50 +313,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 68071F6E376CAAF900FEFD29 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 7E33641B55112906F49CAB0C /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -540,7 +466,6 @@ }; 33A341BB291ECCA100D34E0F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB04430DB6D43CCC08FA526B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -558,7 +483,6 @@ }; 33A341BC291ECCA100D34E0F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 407DC1E57B864B3AC2D1D534 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -574,7 +498,6 @@ }; 33A341BD291ECCA100D34E0F /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9808B6775522250A40D7D452 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Release.xcconfig b/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/pigeon/platform_tests/test_plugin/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/pigeon/platform_tests/test_plugin/example/macos/Podfile b/packages/pigeon/platform_tests/test_plugin/example/macos/Podfile deleted file mode 100644 index 358b97d070ff..000000000000 --- a/packages/pigeon/platform_tests/test_plugin/example/macos/Podfile +++ /dev/null @@ -1,47 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - - target.build_configurations.each do |config| - config.build_settings['SWIFT_TREAT_WARNINGS_AS_ERRORS'] = 'YES' - end - end -end diff --git a/packages/pigeon/platform_tests/test_plugin/example/macos/Runner.xcodeproj/project.pbxproj b/packages/pigeon/platform_tests/test_plugin/example/macos/Runner.xcodeproj/project.pbxproj index ec56e3debc38..30471781624a 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/pigeon/platform_tests/test_plugin/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,9 +27,7 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6315A7A2721DA1118B8E9021 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29E004D53850EB57FB6837A5 /* Pods_RunnerTests.framework */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 875D4A972362F737CAF2FE4C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FC0DA6B36ADE41CB6E0674E /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -63,8 +61,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1D1B345C7A308AD53319BFE8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 29E004D53850EB57FB6837A5 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33A341DB291ED36900D34E0F /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -81,17 +77,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 34C7F8E51A95DED51F18178C /* 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 = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* test_plugin */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = test_plugin; path = ../../../darwin/test_plugin; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 84F9F76B1CDA5A3EA34A53A9 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9FC0DA6B36ADE41CB6E0674E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CE9F6321D99B81775C2E58F7 /* 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 = ""; }; - D883C1052351847D8F8C1AC6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - E2C8B3AD8F4C88A8093956DB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -99,7 +89,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6315A7A2721DA1118B8E9021 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -108,7 +97,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 875D4A972362F737CAF2FE4C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -141,7 +129,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33A341DC291ED36900D34E0F /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, CA1DCAF3D143850A6677D34A /* Pods */, ); sourceTree = ""; @@ -196,25 +183,10 @@ CA1DCAF3D143850A6677D34A /* Pods */ = { isa = PBXGroup; children = ( - 34C7F8E51A95DED51F18178C /* Pods-Runner.debug.xcconfig */, - 84F9F76B1CDA5A3EA34A53A9 /* Pods-Runner.release.xcconfig */, - E2C8B3AD8F4C88A8093956DB /* Pods-Runner.profile.xcconfig */, - CE9F6321D99B81775C2E58F7 /* Pods-RunnerTests.debug.xcconfig */, - D883C1052351847D8F8C1AC6 /* Pods-RunnerTests.release.xcconfig */, - 1D1B345C7A308AD53319BFE8 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 9FC0DA6B36ADE41CB6E0674E /* Pods_Runner.framework */, - 29E004D53850EB57FB6837A5 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -222,7 +194,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33A341E4291ED36900D34E0F /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D8A37CA9DC49F3BACCA22E13 /* [CP] Check Pods Manifest.lock */, 33A341D7291ED36900D34E0F /* Sources */, 33A341D8291ED36900D34E0F /* Frameworks */, 33A341D9291ED36900D34E0F /* Resources */, @@ -241,7 +212,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D30FEEB3988449C1EC3D1DBF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,7 +271,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -372,50 +342,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D30FEEB3988449C1EC3D1DBF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - D8A37CA9DC49F3BACCA22E13 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -540,7 +466,6 @@ }; 33A341E1291ED36900D34E0F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CE9F6321D99B81775C2E58F7 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -555,7 +480,6 @@ }; 33A341E2291ED36900D34E0F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D883C1052351847D8F8C1AC6 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -570,7 +494,6 @@ }; 33A341E3291ED36900D34E0F /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D1B345C7A308AD53319BFE8 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -783,7 +706,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Debug.xcconfig b/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Debug.xcconfig +++ b/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Release.xcconfig b/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Release.xcconfig +++ b/packages/pointer_interceptor/pointer_interceptor/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pointer_interceptor/pointer_interceptor/example/ios/Podfile b/packages/pointer_interceptor/pointer_interceptor/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/pointer_interceptor/pointer_interceptor/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/pointer_interceptor/pointer_interceptor/example/ios/Runner.xcodeproj/project.pbxproj b/packages/pointer_interceptor/pointer_interceptor/example/ios/Runner.xcodeproj/project.pbxproj index acdd52bb34bc..924bbe6bb7f5 100644 --- a/packages/pointer_interceptor/pointer_interceptor/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/pointer_interceptor/pointer_interceptor/example/ios/Runner.xcodeproj/project.pbxproj @@ -15,7 +15,6 @@ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; F25BFF892B037A720088B2C7 /* DummyPlatformViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F25BFF882B037A6C0088B2C7 /* DummyPlatformViewFactory.swift */; }; - F7B3FF2A19BF60DCE2927CCE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC6D95C6CA2BCA05B3C28FD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -32,13 +31,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 095E300DCC1C42BD0A014AAC /* 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 = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 53AC91685EB02A84FAE15CFA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -47,10 +45,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - ABC6D95C6CA2BCA05B3C28FD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EBBA6242570F249EF7490E9D /* 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 = ""; }; F25BFF882B037A6C0088B2C7 /* DummyPlatformViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DummyPlatformViewFactory.swift; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -59,7 +54,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - F7B3FF2A19BF60DCE2927CCE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -69,9 +63,6 @@ 1C9A5A1A7487CB72068132AF /* Pods */ = { isa = PBXGroup; children = ( - EBBA6242570F249EF7490E9D /* Pods-Runner.debug.xcconfig */, - 095E300DCC1C42BD0A014AAC /* Pods-Runner.release.xcconfig */, - 53AC91685EB02A84FAE15CFA /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -95,7 +86,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 1C9A5A1A7487CB72068132AF /* Pods */, - FC5EF6E923E6BF75C542BDC7 /* Frameworks */, ); sourceTree = ""; }; @@ -123,14 +113,6 @@ path = Runner; sourceTree = ""; }; - FC5EF6E923E6BF75C542BDC7 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ABC6D95C6CA2BCA05B3C28FD /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -138,7 +120,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4B32A7E5952A8E40E6FE6E6C /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -226,28 +207,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B32A7E5952A8E40E6FE6E6C /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Debug.xcconfig b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Debug.xcconfig +++ b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Release.xcconfig b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Release.xcconfig +++ b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Podfile b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Podfile deleted file mode 100644 index 620e46eba607..000000000000 --- a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Runner.xcodeproj/project.pbxproj index 242fe795a6c4..7d5a6ab19eb5 100644 --- a/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/pointer_interceptor/pointer_interceptor_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -10,13 +10,11 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 46643191504C316CD4ABDB75 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7324BF52939888500E1D0F3 /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - E168ED82D399C1A9329D0876 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1F367B2EDD332D4B9230AF1 /* Pods_Runner.framework */; }; F21CDFA32B056EBD0017C279 /* RunnerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F21CDFA22B056EBD0017C279 /* RunnerUITests.swift */; }; F21CDFAD2B0591E30017C279 /* DummyPlatformViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F21CDFAC2B0591E30017C279 /* DummyPlatformViewFactory.swift */; }; /* End PBXBuildFile section */ @@ -52,17 +50,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0572F01CACAE4D575F1A1128 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2DD5F6BD11575A75FA2A0EBC /* 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 = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 37A897E52BBF8D001E20DCBE /* 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 = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4231BCCD2D6A3407E2AA20F2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; + 78DABEA22ED26510000E7860 /* pointer_interceptor_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = pointer_interceptor_ios; path = ../../ios/pointer_interceptor_ios; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -71,17 +68,10 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B65B5543E4E11276FC0745D9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - CDA7125E540D71A7A056DCE6 /* 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 = ""; }; - F1F367B2EDD332D4B9230AF1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F21CDF922B056DB70017C279 /* RunnerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerUITests.swift; sourceTree = ""; }; F21CDFA02B056EBD0017C279 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F21CDFA22B056EBD0017C279 /* RunnerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerUITests.swift; sourceTree = ""; }; F21CDFAC2B0591E30017C279 /* DummyPlatformViewFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DummyPlatformViewFactory.swift; sourceTree = ""; }; - F7324BF52939888500E1D0F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* pointer_interceptor_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = pointer_interceptor_ios; path = ../../ios/pointer_interceptor_ios; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -89,7 +79,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 46643191504C316CD4ABDB75 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -98,7 +87,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - E168ED82D399C1A9329D0876 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -144,7 +132,6 @@ 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, DBD25E199A731479B0BACE39 /* Pods */, - ACDADE5C43240D66CC8F6502 /* Frameworks */, ); sourceTree = ""; }; @@ -174,24 +161,9 @@ path = Runner; sourceTree = ""; }; - ACDADE5C43240D66CC8F6502 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F1F367B2EDD332D4B9230AF1 /* Pods_Runner.framework */, - F7324BF52939888500E1D0F3 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; DBD25E199A731479B0BACE39 /* Pods */ = { isa = PBXGroup; children = ( - 2DD5F6BD11575A75FA2A0EBC /* Pods-Runner.debug.xcconfig */, - CDA7125E540D71A7A056DCE6 /* Pods-Runner.release.xcconfig */, - 0572F01CACAE4D575F1A1128 /* Pods-Runner.profile.xcconfig */, - 37A897E52BBF8D001E20DCBE /* Pods-RunnerTests.debug.xcconfig */, - 4231BCCD2D6A3407E2AA20F2 /* Pods-RunnerTests.release.xcconfig */, - B65B5543E4E11276FC0745D9 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -219,7 +191,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - DB9D75B7E0C58FFA3FAAD55B /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, 92C054B3F5E4DE78794EA034 /* Frameworks */, @@ -238,7 +209,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C53E3297221374298B80F1DF /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -384,50 +354,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - C53E3297221374298B80F1DF /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - DB9D75B7E0C58FFA3FAAD55B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -566,7 +492,6 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 37A897E52BBF8D001E20DCBE /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -584,7 +509,6 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4231BCCD2D6A3407E2AA20F2 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -600,7 +524,6 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B65B5543E4E11276FC0745D9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/quick_actions/quick_actions/example/ios/Flutter/Debug.xcconfig b/packages/quick_actions/quick_actions/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/quick_actions/quick_actions/example/ios/Flutter/Debug.xcconfig +++ b/packages/quick_actions/quick_actions/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/quick_actions/quick_actions/example/ios/Flutter/Release.xcconfig b/packages/quick_actions/quick_actions/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/quick_actions/quick_actions/example/ios/Flutter/Release.xcconfig +++ b/packages/quick_actions/quick_actions/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/quick_actions/quick_actions/example/ios/Podfile b/packages/quick_actions/quick_actions/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/quick_actions/quick_actions/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/quick_actions/quick_actions/example/ios/Runner.xcodeproj/project.pbxproj b/packages/quick_actions/quick_actions/example/ios/Runner.xcodeproj/project.pbxproj index edf101d8e45e..b5b5f00de4f5 100644 --- a/packages/quick_actions/quick_actions/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/quick_actions/quick_actions/example/ios/Runner.xcodeproj/project.pbxproj @@ -11,7 +11,6 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 91D5522EB65E8FD8A1A8FEA5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65E9E1A69E00E453A620EE16 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -33,12 +32,10 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 258A707F7F5E75508EA6CBB5 /* 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 = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 489B9F06437C3EC3C24CCFF7 /* 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 = ""; }; - 65E9E1A69E00E453A620EE16 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -47,8 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E04C971B2BC180B7F1721E5B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,7 +52,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 91D5522EB65E8FD8A1A8FEA5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -67,21 +61,10 @@ 6AEEE814FD5A1A7548F4A15A /* Pods */ = { isa = PBXGroup; children = ( - 258A707F7F5E75508EA6CBB5 /* Pods-Runner.debug.xcconfig */, - 489B9F06437C3EC3C24CCFF7 /* Pods-Runner.release.xcconfig */, - E04C971B2BC180B7F1721E5B /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - 7428BFE57AC84D10FDE3026A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 65E9E1A69E00E453A620EE16 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,7 +84,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 6AEEE814FD5A1A7548F4A15A /* Pods */, - 7428BFE57AC84D10FDE3026A /* Frameworks */, ); sourceTree = ""; }; @@ -135,7 +117,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8F1FD4D99F6E5F7BAB7F5DD3 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -223,28 +204,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8F1FD4D99F6E5F7BAB7F5DD3 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Debug.xcconfig b/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Debug.xcconfig +++ b/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Release.xcconfig b/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Release.xcconfig +++ b/packages/quick_actions/quick_actions_ios/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/quick_actions/quick_actions_ios/example/ios/Podfile b/packages/quick_actions/quick_actions_ios/example/ios/Podfile deleted file mode 100644 index 6eafd7e2e953..000000000000 --- a/packages/quick_actions/quick_actions_ios/example/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj index 896c12fde641..de1bcff445d7 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -17,8 +17,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C66812E006BAB016455F81AD /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5BEAC67B525D56B0AD1071 /* libPods-Runner.a */; }; - E31FFDA76225242A5AC160D3 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E91D9960E7EC8C96C4898AB /* libPods-RunnerTests.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -52,20 +50,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 086AD8B96FFEBD8E7C46BF03 /* 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 = ""; }; - 09C77B062D09986407ECCB50 /* 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 = ""; }; - 0E91D9960E7EC8C96C4898AB /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1F5BEAC67B525D56B0AD1071 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2A571051C03AE0B7DB2BB9F5 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 331585962F352C6B00FACB51 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331585A22F352C8600FACB51 /* RunnerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerUITests.swift; sourceTree = ""; }; 331585A72F352CE600FACB51 /* QuickActionsPluginTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickActionsPluginTests.swift; sourceTree = ""; }; 331585AC2F352D1800FACB51 /* MockShortcutItemProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockShortcutItemProvider.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 55F7BBA29E93DE0E2559059E /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; @@ -79,8 +71,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E931AB79B01733DF8F159F19 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F03DC78CEB0A54C6BCF43A75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +85,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E31FFDA76225242A5AC160D3 /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -104,27 +93,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - C66812E006BAB016455F81AD /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1D5F083F5FDCE6FC43F3CC69 /* Pods */ = { - isa = PBXGroup; - children = ( - 086AD8B96FFEBD8E7C46BF03 /* Pods-Runner.debug.xcconfig */, - 09C77B062D09986407ECCB50 /* Pods-Runner.release.xcconfig */, - E931AB79B01733DF8F159F19 /* Pods-Runner.profile.xcconfig */, - 55F7BBA29E93DE0E2559059E /* Pods-RunnerTests.debug.xcconfig */, - F03DC78CEB0A54C6BCF43A75 /* Pods-RunnerTests.release.xcconfig */, - 2A571051C03AE0B7DB2BB9F5 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 331585A42F352C8600FACB51 /* RunnerUITests */ = { isa = PBXGroup; children = ( @@ -172,8 +146,6 @@ 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, 331585A42F352C8600FACB51 /* RunnerUITests */, - 1D5F083F5FDCE6FC43F3CC69 /* Pods */, - E1C063A6B3E7FF88E13D8D4E /* Frameworks */, ); sourceTree = ""; }; @@ -202,15 +174,6 @@ path = Runner; sourceTree = ""; }; - E1C063A6B3E7FF88E13D8D4E /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1F5BEAC67B525D56B0AD1071 /* libPods-Runner.a */, - 0E91D9960E7EC8C96C4898AB /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -236,7 +199,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - FDEF645B68AF8C5C1F55CCEA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, 8C572A24CDFB4B16C53DB292 /* Frameworks */, @@ -255,7 +217,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A0D9C9C15655392B54783BEA /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -384,50 +345,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A0D9C9C15655392B54783BEA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - FDEF645B68AF8C5C1F55CCEA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -638,7 +555,6 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55F7BBA29E93DE0E2559059E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -657,7 +573,6 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F03DC78CEB0A54C6BCF43A75 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -674,7 +589,6 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A571051C03AE0B7DB2BB9F5 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; diff --git a/packages/rfw/example/remote/ios/Flutter/Debug.xcconfig b/packages/rfw/example/remote/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/rfw/example/remote/ios/Flutter/Debug.xcconfig +++ b/packages/rfw/example/remote/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/rfw/example/remote/ios/Flutter/Release.xcconfig b/packages/rfw/example/remote/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/rfw/example/remote/ios/Flutter/Release.xcconfig +++ b/packages/rfw/example/remote/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/rfw/example/remote/ios/Podfile b/packages/rfw/example/remote/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/rfw/example/remote/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/rfw/example/remote/ios/Runner.xcodeproj/project.pbxproj b/packages/rfw/example/remote/ios/Runner.xcodeproj/project.pbxproj index 96827de22d59..4dfec68f39f5 100644 --- a/packages/rfw/example/remote/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/rfw/example/remote/ios/Runner.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9CE78CAA22092B01A34858F6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C0A1BEE4027C17F876680E7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -34,12 +33,10 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 53C2E067362F97105BC29D1E /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C0A1BEE4027C17F876680E7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 930017DBB28105284FF6FFC7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -47,8 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FC32B7ECAEDCADC107987DDF /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 9CE78CAA22092B01A34858F6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 33229402E4F143A40B98C88E /* Pods */ = { - isa = PBXGroup; - children = ( - FC32B7ECAEDCADC107987DDF /* Pods-Runner.debug.xcconfig */, - 53C2E067362F97105BC29D1E /* Pods-Runner.release.xcconfig */, - 930017DBB28105284FF6FFC7 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 8D7A9CCBDDED29EDF28765FC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7C0A1BEE4027C17F876680E7 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 33229402E4F143A40B98C88E /* Pods */, - 8D7A9CCBDDED29EDF28765FC /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 850FDD5F197CBC384057B95E /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -223,28 +195,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 850FDD5F197CBC384057B95E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/rfw/example/remote/macos/Flutter/Flutter-Debug.xcconfig b/packages/rfw/example/remote/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/rfw/example/remote/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/rfw/example/remote/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/rfw/example/remote/macos/Flutter/Flutter-Release.xcconfig b/packages/rfw/example/remote/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/rfw/example/remote/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/rfw/example/remote/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/rfw/example/remote/macos/Podfile b/packages/rfw/example/remote/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/rfw/example/remote/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/rfw/example/remote/macos/Runner.xcodeproj/project.pbxproj b/packages/rfw/example/remote/macos/Runner.xcodeproj/project.pbxproj index 5997f6f76a3e..0265a30ea7b7 100644 --- a/packages/rfw/example/remote/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/rfw/example/remote/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 02C0D91643FE6F39BEA2BB6E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843B05D923F2BC6B7E429B6A /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -68,13 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 843B05D923F2BC6B7E429B6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B3379FCDBBE6204BEF2B5C16 /* 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 = ""; }; - CD4ACEFE55709DCCDCD58135 /* 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 = ""; }; - DF79506D30CEA9FF7E0A2EF7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 02C0D91643FE6F39BEA2BB6E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - 86AA60D5EB1EA06D4F24A876 /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - 86AA60D5EB1EA06D4F24A876 /* Pods */ = { - isa = PBXGroup; - children = ( - B3379FCDBBE6204BEF2B5C16 /* Pods-Runner.debug.xcconfig */, - CD4ACEFE55709DCCDCD58135 /* Pods-Runner.release.xcconfig */, - DF79506D30CEA9FF7E0A2EF7 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 843B05D923F2BC6B7E429B6A /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3A6B5419711B5B56FAA0549E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3A6B5419711B5B56FAA0549E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/shared_preferences/shared_preferences/example/ios/Flutter/Debug.xcconfig b/packages/shared_preferences/shared_preferences/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/shared_preferences/shared_preferences/example/ios/Flutter/Debug.xcconfig +++ b/packages/shared_preferences/shared_preferences/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences/example/ios/Flutter/Release.xcconfig b/packages/shared_preferences/shared_preferences/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/shared_preferences/shared_preferences/example/ios/Flutter/Release.xcconfig +++ b/packages/shared_preferences/shared_preferences/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences/example/ios/Podfile b/packages/shared_preferences/shared_preferences/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/shared_preferences/shared_preferences/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/shared_preferences/shared_preferences/example/ios/Runner.xcodeproj/project.pbxproj b/packages/shared_preferences/shared_preferences/example/ios/Runner.xcodeproj/project.pbxproj index 9948e5dc00db..722b4d88202a 100644 --- a/packages/shared_preferences/shared_preferences/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/shared_preferences/shared_preferences/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - EAD6F497AA1C303C34F19ABE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B032E4352AB47DB6141FF0E5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -31,12 +30,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08B549C8F9BCAF855AF40130 /* 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 = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -45,10 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B032E4352AB47DB6141FF0E5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B938B3C5F4809A19E8475F1D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F40F32A160742F198DCB8600 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - EAD6F497AA1C303C34F19ABE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 374C54E59E6F4EA5E9294268 /* Pods */ = { - isa = PBXGroup; - children = ( - F40F32A160742F198DCB8600 /* Pods-Runner.debug.xcconfig */, - 08B549C8F9BCAF855AF40130 /* Pods-Runner.release.xcconfig */, - B938B3C5F4809A19E8475F1D /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 68E2BD8C5B1BFF3524D2DED9 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B032E4352AB47DB6141FF0E5 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 374C54E59E6F4EA5E9294268 /* Pods */, - 68E2BD8C5B1BFF3524D2DED9 /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E00B657C81248BFE5612E5B8 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -239,28 +211,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E00B657C81248BFE5612E5B8 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Release.xcconfig b/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/shared_preferences/shared_preferences/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences/example/macos/Podfile b/packages/shared_preferences/shared_preferences/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/shared_preferences/shared_preferences/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/shared_preferences/shared_preferences/example/macos/Runner.xcodeproj/project.pbxproj b/packages/shared_preferences/shared_preferences/example/macos/Runner.xcodeproj/project.pbxproj index 72d078424a47..d07c8412f7f1 100644 --- a/packages/shared_preferences/shared_preferences/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/shared_preferences/shared_preferences/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - DA98078CB4612E9A884E9EE1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 688249AA8BCD9890EFC6A3C3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -68,13 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 688249AA8BCD9890EFC6A3C3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8BE07209243A880815CD0655 /* 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 = ""; }; - 9559BFA07E131693F36756D1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - FB517C88258DF7E2701C5EBD /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - DA98078CB4612E9A884E9EE1 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - F58EF12F35E2D6D991BD099C /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 688249AA8BCD9890EFC6A3C3 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - F58EF12F35E2D6D991BD099C /* Pods */ = { - isa = PBXGroup; - children = ( - FB517C88258DF7E2701C5EBD /* Pods-Runner.debug.xcconfig */, - 8BE07209243A880815CD0655 /* Pods-Runner.release.xcconfig */, - 9559BFA07E131693F36756D1 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C5B8601E60D36BDBCF524F3 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8C5B8601E60D36BDBCF524F3 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Debug.xcconfig b/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Debug.xcconfig +++ b/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Release.xcconfig b/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Release.xcconfig +++ b/packages/shared_preferences/shared_preferences_foundation/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences_foundation/example/ios/Podfile b/packages/shared_preferences/shared_preferences_foundation/example/ios/Podfile deleted file mode 100644 index 620e46eba607..000000000000 --- a/packages/shared_preferences/shared_preferences_foundation/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/shared_preferences/shared_preferences_foundation/example/ios/Runner.xcodeproj/project.pbxproj b/packages/shared_preferences/shared_preferences_foundation/example/ios/Runner.xcodeproj/project.pbxproj index 1958dee18b08..ff0110ade063 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/shared_preferences/shared_preferences_foundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -15,8 +15,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9AF3A5CAB88B27F2BC36D686 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4C443E7E16FB2AD978AC1D6 /* Pods_RunnerTests.framework */; }; - B81650923B266CE1F32B75E4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3702C135032CE4599D8327B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,13 +45,13 @@ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ../../../darwin/Tests/RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A8F2565F3AF472E2E0A219E /* 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 = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6F1615DD96BB2B955423149B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; + 78DABEA22ED26510000E7860 /* shared_preferences_foundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = shared_preferences_foundation; path = ../../darwin/shared_preferences_foundation; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 87C77C652D5BC0B23F81E01F /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -61,14 +59,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B5E9D2BAFD0E9BF6494E5389 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D4C443E7E16FB2AD978AC1D6 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D9DC9227831D288079E5C887 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - F1B6CB00204D3430428972D5 /* 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 = ""; }; - F3702C135032CE4599D8327B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* shared_preferences_foundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = shared_preferences_foundation; path = ../../darwin/shared_preferences_foundation; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -76,7 +66,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9AF3A5CAB88B27F2BC36D686 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -85,7 +74,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - B81650923B266CE1F32B75E4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -100,15 +88,6 @@ path = RunnerTests; sourceTree = ""; }; - 4E1DD4374F34EBDF7F4214F0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F3702C135032CE4599D8327B /* Pods_Runner.framework */, - D4C443E7E16FB2AD978AC1D6 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -130,8 +109,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DA43E4FDD6392A0D5FBF1611 /* Pods */, - 4E1DD4374F34EBDF7F4214F0 /* Frameworks */, ); sourceTree = ""; }; @@ -159,20 +136,6 @@ path = Runner; sourceTree = ""; }; - DA43E4FDD6392A0D5FBF1611 /* Pods */ = { - isa = PBXGroup; - children = ( - 3A8F2565F3AF472E2E0A219E /* Pods-Runner.debug.xcconfig */, - 87C77C652D5BC0B23F81E01F /* Pods-Runner.release.xcconfig */, - 6F1615DD96BB2B955423149B /* Pods-Runner.profile.xcconfig */, - F1B6CB00204D3430428972D5 /* Pods-RunnerTests.debug.xcconfig */, - D9DC9227831D288079E5C887 /* Pods-RunnerTests.release.xcconfig */, - B5E9D2BAFD0E9BF6494E5389 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -180,7 +143,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9DEF57700431B717ADF93FFA /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, 3F94D8484CE6A0609BCE7680 /* Frameworks */, @@ -199,7 +161,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4B0B07E2CB0088D1DE03E09A /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -298,28 +259,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 4B0B07E2CB0088D1DE03E09A /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -335,28 +274,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9DEF57700431B717ADF93FFA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -480,7 +397,6 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1B6CB00204D3430428972D5 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -498,7 +414,6 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9DC9227831D288079E5C887 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -514,7 +429,6 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B5E9D2BAFD0E9BF6494E5389 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Debug.xcconfig index 785633d3a86b..c2efd0b608ba 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Release.xcconfig b/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Release.xcconfig index 5fba960c3af2..c2efd0b608ba 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/shared_preferences/shared_preferences_foundation/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/shared_preferences/shared_preferences_foundation/example/macos/Podfile b/packages/shared_preferences/shared_preferences_foundation/example/macos/Podfile deleted file mode 100644 index b687011ee229..000000000000 --- a/packages/shared_preferences/shared_preferences_foundation/example/macos/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/shared_preferences/shared_preferences_foundation/example/macos/Runner.xcodeproj/project.pbxproj b/packages/shared_preferences/shared_preferences_foundation/example/macos/Runner.xcodeproj/project.pbxproj index 37019492a053..5051c8fa5b06 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/shared_preferences/shared_preferences_foundation/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,15 +21,13 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2664C8CF4F7C09B469256E8C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBE52A82BBDAFEA0EB8C219A /* Pods_RunnerTests.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 33EBD39B26727BD10013E557 /* ../../../darwin/Tests/RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33EBD39A26727BD10013E557 /* ../../../darwin/Tests/RunnerTests.swift */; }; + 33EBD39B26727BD10013E557 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33EBD39A26727BD10013E557 /* RunnerTests.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - DD4A1B9DEDBB72C87CD7AE27 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -63,7 +61,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2E4DBB55AB946A7F1AA7D737 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* url_launcher_example_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = url_launcher_example_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -79,20 +76,13 @@ 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 33EBD39826727BD10013E557 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 33EBD39A26727BD10013E557 /* ../../../darwin/Tests/RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ../../../darwin/Tests/RunnerTests.swift; sourceTree = ""; }; + 33EBD39A26727BD10013E557 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ../../../darwin/Tests/RunnerTests.swift; sourceTree = ""; }; 33EBD39C26727BD10013E557 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 53F020549CA1E801ACA3428F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* shared_preferences_foundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = shared_preferences_foundation; path = ../../../darwin/shared_preferences_foundation; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 899489AD6AA35AECA4E2BEA6 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AD26B2A2C7409B621A8ADDA0 /* 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 = ""; }; - B36FDC1D769C9045B8821207 /* 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 = ""; }; - CC4DAF1C0735E2069209EED8 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - FBE52A82BBDAFEA0EB8C219A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -101,7 +91,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - DD4A1B9DEDBB72C87CD7AE27 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -109,7 +98,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2664C8CF4F7C09B469256E8C /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -134,7 +122,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33EBD39926727BD10013E557 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 96C1F6D923BD5787E8EBE8FC /* Pods */, ); sourceTree = ""; @@ -176,7 +163,7 @@ 33EBD39926727BD10013E557 /* RunnerTests */ = { isa = PBXGroup; children = ( - 33EBD39A26727BD10013E557 /* ../../../darwin/Tests/RunnerTests.swift */, + 33EBD39A26727BD10013E557 /* RunnerTests.swift */, 33EBD39C26727BD10013E557 /* Info.plist */, ); path = RunnerTests; @@ -198,25 +185,10 @@ 96C1F6D923BD5787E8EBE8FC /* Pods */ = { isa = PBXGroup; children = ( - 899489AD6AA35AECA4E2BEA6 /* Pods-Runner.debug.xcconfig */, - B36FDC1D769C9045B8821207 /* Pods-Runner.release.xcconfig */, - 53F020549CA1E801ACA3428F /* Pods-Runner.profile.xcconfig */, - AD26B2A2C7409B621A8ADDA0 /* Pods-RunnerTests.debug.xcconfig */, - CC4DAF1C0735E2069209EED8 /* Pods-RunnerTests.release.xcconfig */, - 2E4DBB55AB946A7F1AA7D737 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */, - FBE52A82BBDAFEA0EB8C219A /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -224,7 +196,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C318D59394D0E38099411848 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -248,7 +219,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33EBD3A226727BD10013E557 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 057C8B472E54526F53651CE7 /* [CP] Check Pods Manifest.lock */, 33EBD39426727BD10013E557 /* Sources */, 33EBD39526727BD10013E557 /* Frameworks */, 33EBD39626727BD10013E557 /* Resources */, @@ -303,7 +273,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -336,28 +306,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 057C8B472E54526F53651CE7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -396,28 +344,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; }; - C318D59394D0E38099411848 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -435,7 +361,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 33EBD39B26727BD10013E557 /* ../../../darwin/Tests/RunnerTests.swift in Sources */, + 33EBD39B26727BD10013E557 /* RunnerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -708,7 +634,6 @@ }; 33EBD39F26727BD10013E557 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AD26B2A2C7409B621A8ADDA0 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -727,7 +652,6 @@ }; 33EBD3A026727BD10013E557 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC4DAF1C0735E2069209EED8 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -746,7 +670,6 @@ }; 33EBD3A126727BD10013E557 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2E4DBB55AB946A7F1AA7D737 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -809,7 +732,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/url_launcher/url_launcher/example/ios/Flutter/Debug.xcconfig b/packages/url_launcher/url_launcher/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/url_launcher/url_launcher/example/ios/Flutter/Debug.xcconfig +++ b/packages/url_launcher/url_launcher/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher/example/ios/Flutter/Release.xcconfig b/packages/url_launcher/url_launcher/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/url_launcher/url_launcher/example/ios/Flutter/Release.xcconfig +++ b/packages/url_launcher/url_launcher/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher/example/ios/Podfile b/packages/url_launcher/url_launcher/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/url_launcher/url_launcher/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/url_launcher/url_launcher/example/ios/Runner.xcodeproj/project.pbxproj b/packages/url_launcher/url_launcher/example/ios/Runner.xcodeproj/project.pbxproj index e58cc87ce9e2..f8e757476811 100644 --- a/packages/url_launcher/url_launcher/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/url_launcher/url_launcher/example/ios/Runner.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D13E44AD19CD0A351876E5C4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFD235E2FE0CE956904F47C5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -33,11 +32,10 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A52B8EFDA951FEF4B9BB81A /* 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 = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 5BF3C559900B58906FB3FFEB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -46,9 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B8A8E907AE12D878E6767835 /* 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 = ""; }; - DFD235E2FE0CE956904F47C5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,32 +52,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - D13E44AD19CD0A351876E5C4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 290D8143F8053A60DE9908CC /* Frameworks */ = { - isa = PBXGroup; - children = ( - DFD235E2FE0CE956904F47C5 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 8B98DC942D15FF212CA7F06A /* Pods */ = { - isa = PBXGroup; - children = ( - B8A8E907AE12D878E6767835 /* Pods-Runner.debug.xcconfig */, - 2A52B8EFDA951FEF4B9BB81A /* Pods-Runner.release.xcconfig */, - 5BF3C559900B58906FB3FFEB /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -101,8 +76,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 8B98DC942D15FF212CA7F06A /* Pods */, - 290D8143F8053A60DE9908CC /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +109,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 412A8FF5EAA8AA6772558C0A /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -224,28 +196,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 412A8FF5EAA8AA6772558C0A /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Debug.xcconfig index 785633d3a86b..c2efd0b608ba 100644 --- a/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Release.xcconfig b/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Release.xcconfig index 5fba960c3af2..c2efd0b608ba 100644 --- a/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/url_launcher/url_launcher/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher/example/macos/Podfile b/packages/url_launcher/url_launcher/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/url_launcher/url_launcher/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/url_launcher/url_launcher/example/macos/Runner.xcodeproj/project.pbxproj b/packages/url_launcher/url_launcher/example/macos/Runner.xcodeproj/project.pbxproj index ead96f4a5926..c553b4b04dc4 100644 --- a/packages/url_launcher/url_launcher/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/url_launcher/url_launcher/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - DD4A1B9DEDBB72C87CD7AE27 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -68,13 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 53F020549CA1E801ACA3428F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 899489AD6AA35AECA4E2BEA6 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B36FDC1D769C9045B8821207 /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - DD4A1B9DEDBB72C87CD7AE27 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,8 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - 96C1F6D923BD5787E8EBE8FC /* Pods */, ); sourceTree = ""; }; @@ -156,25 +148,6 @@ path = Runner; sourceTree = ""; }; - 96C1F6D923BD5787E8EBE8FC /* Pods */ = { - isa = PBXGroup; - children = ( - 899489AD6AA35AECA4E2BEA6 /* Pods-Runner.debug.xcconfig */, - B36FDC1D769C9045B8821207 /* Pods-Runner.release.xcconfig */, - 53F020549CA1E801ACA3428F /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -182,7 +155,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C318D59394D0E38099411848 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -301,28 +273,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; }; - C318D59394D0E38099411848 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Debug.xcconfig b/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Debug.xcconfig +++ b/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Release.xcconfig b/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Release.xcconfig +++ b/packages/url_launcher/url_launcher_ios/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher_ios/example/ios/Podfile b/packages/url_launcher/url_launcher_ios/example/ios/Podfile deleted file mode 100644 index 620e46eba607..000000000000 --- a/packages/url_launcher/url_launcher_ios/example/ios/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/url_launcher/url_launcher_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/url_launcher/url_launcher_ios/example/ios/Runner.xcodeproj/project.pbxproj index 55d5dc8521fb..4d7d09ce6cde 100644 --- a/packages/url_launcher/url_launcher_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/url_launcher/url_launcher_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -17,8 +17,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BEA2D71DF546CE4A2851E929 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CB4E975DB36730B83890CDE /* Pods_RunnerTests.framework */; }; - FD169F9B228DE7F85BEC3A3F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FAF704B65F01780EB4B8F3A /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -52,7 +50,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 05B7BFFA1D1A1F70D8946549 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 330AD6352F3D1465005FB0FC /* URLLauncherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLLauncherTests.swift; sourceTree = ""; }; @@ -60,8 +57,6 @@ 330AD64B2F3D16F9005FB0FC /* URLLauncherUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLLauncherUITests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 469F167F56D809267C883B51 /* 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 = ""; }; - 6E77F8FE842DFCE3A762447B /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; @@ -69,7 +64,6 @@ 78DABEA22ED26510000E7860 /* url_launcher_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = url_launcher_ios; path = ../../ios/url_launcher_ios; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7CB4E975DB36730B83890CDE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -77,10 +71,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9FAF704B65F01780EB4B8F3A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A9AD8810A4A49A4D99A4702F /* 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 = ""; }; - C187F0B029834D4CE885AC78 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DBE33D73D51F58DFA64DBFCC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +85,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BEA2D71DF546CE4A2851E929 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -104,22 +93,12 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - FD169F9B228DE7F85BEC3A3F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 16CDB3A29B1843EA02E7FBEC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 9FAF704B65F01780EB4B8F3A /* Pods_Runner.framework */, - 7CB4E975DB36730B83890CDE /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 330AD64C2F3D16F9005FB0FC /* RunnerUITests */ = { isa = PBXGroup; children = ( @@ -139,12 +118,6 @@ 8EC81FD43B815F2703697F35 /* Pods */ = { isa = PBXGroup; children = ( - 469F167F56D809267C883B51 /* Pods-Runner.debug.xcconfig */, - A9AD8810A4A49A4D99A4702F /* Pods-Runner.release.xcconfig */, - 05B7BFFA1D1A1F70D8946549 /* Pods-Runner.profile.xcconfig */, - 6E77F8FE842DFCE3A762447B /* Pods-RunnerTests.debug.xcconfig */, - DBE33D73D51F58DFA64DBFCC /* Pods-RunnerTests.release.xcconfig */, - C187F0B029834D4CE885AC78 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -172,7 +145,6 @@ 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, 8EC81FD43B815F2703697F35 /* Pods */, - 16CDB3A29B1843EA02E7FBEC /* Frameworks */, ); sourceTree = ""; }; @@ -227,7 +199,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 3B546645FD10076934D6A393 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, 62FC51DD628E3B89DFAC1B1B /* Frameworks */, @@ -246,7 +217,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4AF9477C5D95015293F7592D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -359,50 +329,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B546645FD10076934D6A393 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 4AF9477C5D95015293F7592D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -616,7 +542,6 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6E77F8FE842DFCE3A762447B /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -634,7 +559,6 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DBE33D73D51F58DFA64DBFCC /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -650,7 +574,6 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C187F0B029834D4CE885AC78 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Debug.xcconfig index 785633d3a86b..c2efd0b608ba 100644 --- a/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Release.xcconfig b/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Release.xcconfig index 5fba960c3af2..c2efd0b608ba 100644 --- a/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/url_launcher/url_launcher_macos/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/url_launcher/url_launcher_macos/example/macos/Podfile b/packages/url_launcher/url_launcher_macos/example/macos/Podfile deleted file mode 100644 index b687011ee229..000000000000 --- a/packages/url_launcher/url_launcher_macos/example/macos/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/url_launcher/url_launcher_macos/example/macos/Runner.xcodeproj/project.pbxproj b/packages/url_launcher/url_launcher_macos/example/macos/Runner.xcodeproj/project.pbxproj index ee59fb737352..047f12ef5eea 100644 --- a/packages/url_launcher/url_launcher_macos/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/url_launcher/url_launcher_macos/example/macos/Runner.xcodeproj/project.pbxproj @@ -28,8 +28,6 @@ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 33EBD3B9267296CB0013E557 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33EBD3B8267296CB0013E557 /* RunnerTests.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - B0E8018BA137CF3E1D668F89 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A7581585AB49438450A8105 /* Pods_RunnerTests.framework */; }; - DD4A1B9DEDBB72C87CD7AE27 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -63,7 +61,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 220FFDB920A73FF04EA40119 /* 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 = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* url_launcher_example_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = url_launcher_example_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -81,18 +78,11 @@ 33EBD3B6267296CB0013E557 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 33EBD3B8267296CB0013E557 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 33EBD3BA267296CB0013E557 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 53F020549CA1E801ACA3428F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 5A7581585AB49438450A8105 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5CFCAA4A883B5A0C4BD62DCF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* url_launcher_macos */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = url_launcher_macos; path = ../../../macos/url_launcher_macos; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 899489AD6AA35AECA4E2BEA6 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - B36FDC1D769C9045B8821207 /* 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 = ""; }; - FD671DB5E266C257DCC5AD6A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -101,7 +91,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - DD4A1B9DEDBB72C87CD7AE27 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -109,7 +98,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B0E8018BA137CF3E1D668F89 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -134,7 +122,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33EBD3B7267296CB0013E557 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 96C1F6D923BD5787E8EBE8FC /* Pods */, ); sourceTree = ""; @@ -198,25 +185,10 @@ 96C1F6D923BD5787E8EBE8FC /* Pods */ = { isa = PBXGroup; children = ( - 899489AD6AA35AECA4E2BEA6 /* Pods-Runner.debug.xcconfig */, - B36FDC1D769C9045B8821207 /* Pods-Runner.release.xcconfig */, - 53F020549CA1E801ACA3428F /* Pods-Runner.profile.xcconfig */, - 220FFDB920A73FF04EA40119 /* Pods-RunnerTests.debug.xcconfig */, - 5CFCAA4A883B5A0C4BD62DCF /* Pods-RunnerTests.release.xcconfig */, - FD671DB5E266C257DCC5AD6A /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 5067D74CB28D28AE3B3DD05B /* Pods_Runner.framework */, - 5A7581585AB49438450A8105 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -224,7 +196,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - C318D59394D0E38099411848 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -248,7 +219,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33EBD3C0267296CB0013E557 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 460A36EFD54BEB8122DDAC6D /* [CP] Check Pods Manifest.lock */, 33EBD3B2267296CB0013E557 /* Sources */, 33EBD3B3267296CB0013E557 /* Frameworks */, 33EBD3B4267296CB0013E557 /* Resources */, @@ -303,7 +273,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -374,50 +344,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; }; - 460A36EFD54BEB8122DDAC6D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C318D59394D0E38099411848 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -708,7 +634,6 @@ }; 33EBD3BD267296CB0013E557 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 220FFDB920A73FF04EA40119 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -727,7 +652,6 @@ }; 33EBD3BE267296CB0013E557 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5CFCAA4A883B5A0C4BD62DCF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -746,7 +670,6 @@ }; 33EBD3BF267296CB0013E557 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FD671DB5E266C257DCC5AD6A /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COMBINE_HIDPI_IMAGES = YES; @@ -809,7 +732,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/video_player/video_player/example/ios/Flutter/Debug.xcconfig b/packages/video_player/video_player/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/video_player/video_player/example/ios/Flutter/Debug.xcconfig +++ b/packages/video_player/video_player/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/video_player/video_player/example/ios/Flutter/Release.xcconfig b/packages/video_player/video_player/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/video_player/video_player/example/ios/Flutter/Release.xcconfig +++ b/packages/video_player/video_player/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/video_player/video_player/example/ios/Podfile b/packages/video_player/video_player/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/video_player/video_player/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/video_player/video_player/example/ios/Runner.xcodeproj/project.pbxproj b/packages/video_player/video_player/example/ios/Runner.xcodeproj/project.pbxproj index 4a103645db11..ec9807af0b03 100644 --- a/packages/video_player/video_player/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/video_player/video_player/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 193C592148F80168DD12ACD6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CF09348A0B3AACB0A09ECA4 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; @@ -31,12 +30,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0CF09348A0B3AACB0A09ECA4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2FAED6AEC460CF17939164E1 /* 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 = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 72CA8201F7F94A0FCDD4FA50 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; @@ -48,7 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CEBE010C0CA6126E6A4DCD0B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,7 +52,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 193C592148F80168DD12ACD6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -67,9 +61,6 @@ 4E5F3708C4D496B69B5145BF /* Pods */ = { isa = PBXGroup; children = ( - 72CA8201F7F94A0FCDD4FA50 /* Pods-Runner.debug.xcconfig */, - 2FAED6AEC460CF17939164E1 /* Pods-Runner.release.xcconfig */, - CEBE010C0CA6126E6A4DCD0B /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -93,7 +84,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 4E5F3708C4D496B69B5145BF /* Pods */, - FE966BDC0324FD5CDB067410 /* Frameworks */, ); sourceTree = ""; }; @@ -120,14 +110,6 @@ path = Runner; sourceTree = ""; }; - FE966BDC0324FD5CDB067410 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0CF09348A0B3AACB0A09ECA4 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -135,7 +117,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A526C4C26D549003F5EB64A6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -238,28 +219,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A526C4C26D549003F5EB64A6 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/video_player/video_player/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/video_player/video_player/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/video_player/video_player/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/video_player/video_player/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/video_player/video_player/example/macos/Flutter/Flutter-Release.xcconfig b/packages/video_player/video_player/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/video_player/video_player/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/video_player/video_player/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/video_player/video_player/example/macos/Podfile b/packages/video_player/video_player/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/video_player/video_player/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/video_player/video_player/example/macos/Runner.xcodeproj/project.pbxproj b/packages/video_player/video_player/example/macos/Runner.xcodeproj/project.pbxproj index 57b3107862f3..db4c333e1da2 100644 --- a/packages/video_player/video_player/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/video_player/video_player/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,7 +27,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - C000184E56E3386C22EF683A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC60543320154AF9A465D416 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,8 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 02C27A1B6E2107E1180C7844 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 044AB83CB7314E1A17E5664E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* video_player_avfoundation_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = video_player_avfoundation_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -70,15 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 6219A9055D27630C4A195F9E /* 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 = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FA146FB7E9341C7D2257338 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 88628E8F00815A73ED1C8120 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C6A82353943E29605DBDFCE3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CC60543320154AF9A465D416 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E2FB7E9AE1C550EE55EE6D27 /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - C000184E56E3386C22EF683A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -111,7 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 628924301D1755B9EF85E51F /* Pods */, ); sourceTree = ""; @@ -163,25 +152,10 @@ 628924301D1755B9EF85E51F /* Pods */ = { isa = PBXGroup; children = ( - 88628E8F00815A73ED1C8120 /* Pods-Runner.debug.xcconfig */, - 6219A9055D27630C4A195F9E /* Pods-Runner.release.xcconfig */, - 044AB83CB7314E1A17E5664E /* Pods-Runner.profile.xcconfig */, - E2FB7E9AE1C550EE55EE6D27 /* Pods-RunnerTests.debug.xcconfig */, - C6A82353943E29605DBDFCE3 /* Pods-RunnerTests.release.xcconfig */, - 02C27A1B6E2107E1180C7844 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - CC60543320154AF9A465D416 /* Pods_Runner.framework */, - 7FA146FB7E9341C7D2257338 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -189,7 +163,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D3E396DFBCC51886820113AA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -308,28 +281,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D3E396DFBCC51886820113AA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/video_player/video_player_avfoundation/example/ios/Flutter/Debug.xcconfig b/packages/video_player/video_player_avfoundation/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Flutter/Debug.xcconfig +++ b/packages/video_player/video_player_avfoundation/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/video_player/video_player_avfoundation/example/ios/Flutter/Release.xcconfig b/packages/video_player/video_player_avfoundation/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Flutter/Release.xcconfig +++ b/packages/video_player/video_player_avfoundation/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/video_player/video_player_avfoundation/example/ios/Podfile b/packages/video_player/video_player_avfoundation/example/ios/Podfile deleted file mode 100644 index 6eafd7e2e953..000000000000 --- a/packages/video_player/video_player_avfoundation/example/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj index 4f2e831812ba..43d08638e5ec 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -18,8 +18,6 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B0F5C77B94E32FB72444AE9F /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20721C28387E1F78689EC502 /* libPods-Runner.a */; }; - D182ECB59C06DBC7E2D5D913 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD232FD3BD3343A5F52AF50 /* libPods-RunnerTests.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -55,20 +53,16 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 20721C28387E1F78689EC502 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2A2EA522BDC492279A91AB75 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 331585C42F36433100FACB51 /* VideoPlayerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayerUITests.swift; sourceTree = ""; }; 335542AC2F364D080081D0DC /* VideoPlayerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = VideoPlayerTests.swift; path = ../../darwin/RunnerTests/VideoPlayerTests.swift; sourceTree = SOURCE_ROOT; }; 335542AF2F366B4F0081D0DC /* TestClasses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestClasses.swift; path = ../../darwin/RunnerTests/TestClasses.swift; sourceTree = SOURCE_ROOT; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6CDC4DA5940705A6E7671616 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* video_player_avfoundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = video_player_avfoundation; path = ../../darwin/video_player_avfoundation; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 7BD232FD3BD3343A5F52AF50 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -77,8 +71,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B15EC39F4617FE1082B18834 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - C18C242FF01156F58C0DAF1C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; F7151F2C26603EBD0028CB91 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F7151F3026603EBD0028CB91 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F7151F3A26603ECA0028CB91 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -91,7 +83,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - B0F5C77B94E32FB72444AE9F /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -106,33 +97,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D182ECB59C06DBC7E2D5D913 /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 05E898481BC29A7FA83AA441 /* Pods */ = { - isa = PBXGroup; - children = ( - C18C242FF01156F58C0DAF1C /* Pods-Runner.debug.xcconfig */, - B15EC39F4617FE1082B18834 /* Pods-Runner.release.xcconfig */, - 6CDC4DA5940705A6E7671616 /* Pods-RunnerTests.debug.xcconfig */, - 2A2EA522BDC492279A91AB75 /* Pods-RunnerTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - 23104BB9DCF267F65AD246F9 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 20721C28387E1F78689EC502 /* libPods-Runner.a */, - 7BD232FD3BD3343A5F52AF50 /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -155,8 +125,6 @@ F7151F3B26603ECA0028CB91 /* RunnerTests */, F7151F2D26603EBD0028CB91 /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, - 05E898481BC29A7FA83AA441 /* Pods */, - 23104BB9DCF267F65AD246F9 /* Frameworks */, ); sourceTree = ""; }; @@ -220,7 +188,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F31A669BD45D5A7C940BF077 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -262,7 +229,6 @@ isa = PBXNativeTarget; buildConfigurationList = F7151F4126603ECB0028CB91 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - E9F7B01F913C69934A6629F6 /* [CP] Check Pods Manifest.lock */, F7151F3626603ECA0028CB91 /* Sources */, F7151F3726603ECA0028CB91 /* Frameworks */, F7151F3826603ECA0028CB91 /* Resources */, @@ -386,46 +352,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E9F7B01F913C69934A6629F6 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - F31A669BD45D5A7C940BF077 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -686,7 +612,6 @@ }; F7151F4226603ECB0028CB91 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6CDC4DA5940705A6E7671616 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -708,7 +633,6 @@ }; F7151F4326603ECB0028CB91 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A2EA522BDC492279A91AB75 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; diff --git a/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Release.xcconfig b/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/video_player/video_player_avfoundation/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/video_player/video_player_avfoundation/example/macos/Podfile b/packages/video_player/video_player_avfoundation/example/macos/Podfile deleted file mode 100644 index ff5ddb3b8bdc..000000000000 --- a/packages/video_player/video_player_avfoundation/example/macos/Podfile +++ /dev/null @@ -1,42 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/video_player/video_player_avfoundation/example/macos/Runner.xcodeproj/project.pbxproj b/packages/video_player/video_player_avfoundation/example/macos/Runner.xcodeproj/project.pbxproj index c6e225a06c2a..adcd95672227 100644 --- a/packages/video_player/video_player_avfoundation/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/video_player/video_player_avfoundation/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 18AD5E2A5B24DAFCF3749529 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FA146FB7E9341C7D2257338 /* Pods_RunnerTests.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33C53DEF2F3A6F65008AFBB3 /* TestClasses.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33C53DED2F3A6F65008AFBB3 /* TestClasses.swift */; }; 33C53DF02F3A6F65008AFBB3 /* VideoPlayerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33C53DEE2F3A6F65008AFBB3 /* VideoPlayerTests.swift */; }; @@ -30,7 +29,6 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - C000184E56E3386C22EF683A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC60543320154AF9A465D416 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -64,8 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 02C27A1B6E2107E1180C7844 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 044AB83CB7314E1A17E5664E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; @@ -83,17 +79,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 6219A9055D27630C4A195F9E /* 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 = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* video_player_avfoundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = video_player_avfoundation; path = ../../../darwin/video_player_avfoundation; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7FA146FB7E9341C7D2257338 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 88628E8F00815A73ED1C8120 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C6A82353943E29605DBDFCE3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CC60543320154AF9A465D416 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E2FB7E9AE1C550EE55EE6D27 /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -101,7 +91,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 18AD5E2A5B24DAFCF3749529 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -110,7 +99,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - C000184E56E3386C22EF683A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -144,7 +132,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 330B3F8E2B1F9C6A00E6DC3F /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 628924301D1755B9EF85E51F /* Pods */, ); sourceTree = ""; @@ -199,25 +186,10 @@ 628924301D1755B9EF85E51F /* Pods */ = { isa = PBXGroup; children = ( - 88628E8F00815A73ED1C8120 /* Pods-Runner.debug.xcconfig */, - 6219A9055D27630C4A195F9E /* Pods-Runner.release.xcconfig */, - 044AB83CB7314E1A17E5664E /* Pods-Runner.profile.xcconfig */, - E2FB7E9AE1C550EE55EE6D27 /* Pods-RunnerTests.debug.xcconfig */, - C6A82353943E29605DBDFCE3 /* Pods-RunnerTests.release.xcconfig */, - 02C27A1B6E2107E1180C7844 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - CC60543320154AF9A465D416 /* Pods_Runner.framework */, - 7FA146FB7E9341C7D2257338 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -225,7 +197,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 5121AE1943D8EE14C90ED8B7 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -244,7 +215,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D3E396DFBCC51886820113AA /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -305,7 +275,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -376,50 +346,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 5121AE1943D8EE14C90ED8B7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - D3E396DFBCC51886820113AA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -472,7 +398,6 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E2FB7E9AE1C550EE55EE6D27 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -489,7 +414,6 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C6A82353943E29605DBDFCE3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -505,7 +429,6 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 02C27A1B6E2107E1180C7844 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -792,7 +715,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/webview_flutter/webview_flutter/example/ios/Flutter/Debug.xcconfig b/packages/webview_flutter/webview_flutter/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/webview_flutter/webview_flutter/example/ios/Flutter/Debug.xcconfig +++ b/packages/webview_flutter/webview_flutter/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter/example/ios/Flutter/Release.xcconfig b/packages/webview_flutter/webview_flutter/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/webview_flutter/webview_flutter/example/ios/Flutter/Release.xcconfig +++ b/packages/webview_flutter/webview_flutter/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter/example/ios/Podfile b/packages/webview_flutter/webview_flutter/example/ios/Podfile deleted file mode 100644 index 17adeb14132e..000000000000 --- a/packages/webview_flutter/webview_flutter/example/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end 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 695278eece38..9e6616bb1b93 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 @@ -11,7 +11,6 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 91D76FA1BB90043B793C7513 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46C32110BE7B9F1AD8046D6C /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -31,16 +30,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 06D12C22782C4CE266C5338E /* 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 = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 46C32110BE7B9F1AD8046D6C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6595AF2A9A8C49090F1EDC18 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 84AEFCDC10A260253889DA52 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -48,7 +44,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,27 +52,15 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 91D76FA1BB90043B793C7513 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 17947605657ACB7DFE467466 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 46C32110BE7B9F1AD8046D6C /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 5BC5CE83DA53B9CF4B50686D /* Pods */ = { isa = PBXGroup; children = ( - 6595AF2A9A8C49090F1EDC18 /* Pods-Runner.debug.xcconfig */, - 06D12C22782C4CE266C5338E /* Pods-Runner.release.xcconfig */, - 84AEFCDC10A260253889DA52 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -101,7 +84,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 5BC5CE83DA53B9CF4B50686D /* Pods */, - 17947605657ACB7DFE467466 /* Frameworks */, ); sourceTree = ""; }; @@ -135,7 +117,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8154F1E8C205724230BEAA5F /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -223,28 +204,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 8154F1E8C205724230BEAA5F /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Release.xcconfig b/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/webview_flutter/webview_flutter/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter/example/macos/Podfile b/packages/webview_flutter/webview_flutter/example/macos/Podfile deleted file mode 100644 index 66f6172bbb39..000000000000 --- a/packages/webview_flutter/webview_flutter/example/macos/Podfile +++ /dev/null @@ -1,39 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/webview_flutter/webview_flutter/example/macos/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter/example/macos/Runner.xcodeproj/project.pbxproj index 0a7e6056330e..2074d25b6bbb 100644 --- a/packages/webview_flutter/webview_flutter/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2EB4149157BBD3A430F11F07 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F0018C81FCBA5B69ABBF5D1 /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -68,17 +67,9 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5F8C8F28798E2C13759B0247 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 667DA8CACF6C1923CDF6309D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 7AF549A34A225DB69555B81E /* 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 = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F0018C81FCBA5B69ABBF5D1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9161E5D15A39CAD8BDCA3648 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - EA616C3C53C91DA835A1F62D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F3B4A758F2F46A632FB5B88A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F927ED1AFD55FE3E39FF121E /* 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 = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,7 +78,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - 2EB4149157BBD3A430F11F07 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -111,7 +101,6 @@ 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, 394ADD5AAA21B9C50952CBB6 /* Pods */, ); sourceTree = ""; @@ -163,25 +152,10 @@ 394ADD5AAA21B9C50952CBB6 /* Pods */ = { isa = PBXGroup; children = ( - 7AF549A34A225DB69555B81E /* Pods-Runner.debug.xcconfig */, - 9161E5D15A39CAD8BDCA3648 /* Pods-Runner.release.xcconfig */, - EA616C3C53C91DA835A1F62D /* Pods-Runner.profile.xcconfig */, - F927ED1AFD55FE3E39FF121E /* Pods-RunnerTests.debug.xcconfig */, - 5F8C8F28798E2C13759B0247 /* Pods-RunnerTests.release.xcconfig */, - 667DA8CACF6C1923CDF6309D /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 8F0018C81FCBA5B69ABBF5D1 /* Pods_Runner.framework */, - F3B4A758F2F46A632FB5B88A /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -189,7 +163,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 25920929D4636EAA1B54D439 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -271,28 +244,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 25920929D4636EAA1B54D439 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Debug.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Debug.xcconfig index ec97fc6f3021..592ceee85b89 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Debug.xcconfig +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Release.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Release.xcconfig index c4855bfe2000..592ceee85b89 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Release.xcconfig +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Flutter/Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Podfile b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Podfile deleted file mode 100644 index f64f36010b70..000000000000 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Podfile +++ /dev/null @@ -1,42 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '13.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end 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 96b94ee9e116..39f911e5915c 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 @@ -47,13 +47,11 @@ 8FEC64862DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64842DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift */; }; 8FEC64872DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64822DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift */; }; 8FEC64882DA2C6DC00C48569 /* SecTrustProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64832DA2C6DC00C48569 /* SecTrustProxyAPITests.swift */; }; - 904EA421B6925EC8D52ABE1B /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 573E8F1472CA1578A7CBDB63 /* libPods-RunnerTests.a */; }; 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - A1C354B092678F5A3DF18D01 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 185E08CFEB8AE9D939566DE6 /* libPods-Runner.a */; }; F7151F77266057800028CB91 /* FLTWebViewUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = F7151F76266057800028CB91 /* FLTWebViewUITests.m */; }; /* End PBXBuildFile section */ @@ -90,14 +88,9 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 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 = ""; }; - 573E8F1472CA1578A7CBDB63 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 68BDCAE923C3F7CB00D9C032 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 68BDCAED23C3F7CB00D9C032 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; @@ -151,7 +144,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C519E1940290A9B5DEBB9BCF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; F7151F74266057800028CB91 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F7151F76266057800028CB91 /* FLTWebViewUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FLTWebViewUITests.m; sourceTree = ""; }; F7151F78266057800028CB91 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -162,7 +154,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 904EA421B6925EC8D52ABE1B /* libPods-RunnerTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -171,7 +162,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - A1C354B092678F5A3DF18D01 /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -255,7 +245,6 @@ F7151F75266057800028CB91 /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, B8AEEA11D6ECBD09750349AE /* Pods */, - CD4E515970E7228B6793AF9A /* Frameworks */, ); sourceTree = ""; }; @@ -296,23 +285,10 @@ B8AEEA11D6ECBD09750349AE /* Pods */ = { isa = PBXGroup; children = ( - 4AA20286555659E34ACB3BE5 /* Pods-Runner.debug.xcconfig */, - 14B8C759112CB6E8AA62F003 /* Pods-Runner.release.xcconfig */, - 56443D345A163E3A65320207 /* Pods-RunnerTests.debug.xcconfig */, - C519E1940290A9B5DEBB9BCF /* Pods-RunnerTests.release.xcconfig */, ); path = Pods; sourceTree = ""; }; - CD4E515970E7228B6793AF9A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 185E08CFEB8AE9D939566DE6 /* libPods-Runner.a */, - 573E8F1472CA1578A7CBDB63 /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; F7151F75266057800028CB91 /* RunnerUITests */ = { isa = PBXGroup; children = ( @@ -329,7 +305,6 @@ isa = PBXNativeTarget; buildConfigurationList = 68BDCAF223C3F7CB00D9C032 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 15992349B960AD5AE56B30FC /* [CP] Check Pods Manifest.lock */, 68BDCAE523C3F7CB00D9C032 /* Sources */, 68BDCAE623C3F7CB00D9C032 /* Frameworks */, 68BDCAE723C3F7CB00D9C032 /* Resources */, @@ -348,7 +323,6 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9E2F8153891253EACD6E06D7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -465,28 +439,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 15992349B960AD5AE56B30FC /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -518,28 +470,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; }; - 9E2F8153891253EACD6E06D7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -642,7 +572,6 @@ /* Begin XCBuildConfiguration section */ 68BDCAF023C3F7CB00D9C032 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 56443D345A163E3A65320207 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -665,7 +594,6 @@ }; 68BDCAF123C3F7CB00D9C032 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C519E1940290A9B5DEBB9BCF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Debug.xcconfig index 4b81f9b2d200..c2efd0b608ba 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Release.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Release.xcconfig index 5caa9d1579e4..c2efd0b608ba 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Podfile b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Podfile deleted file mode 100644 index ff5ddb3b8bdc..000000000000 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Podfile +++ /dev/null @@ -1,42 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj index bae067701bc2..b8645353ae56 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj @@ -26,7 +26,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 6FBECA2F94D9B352000B75D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 418FB4EA49104BADE288A967 /* Pods_RunnerTests.framework */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 8FEC64952DA303E200C48569 /* SecCertificateProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64922DA303E200C48569 /* SecCertificateProxyAPITests.swift */; }; 8FEC64962DA303E200C48569 /* WebpagePreferencesProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64942DA303E200C48569 /* WebpagePreferencesProxyAPITests.swift */; }; @@ -62,7 +61,6 @@ 8FF1FEBD2D37201300A5E400 /* ScriptMessageProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF1FE912D37201300A5E400 /* ScriptMessageProxyAPITests.swift */; }; 8FF1FEBE2D37201300A5E400 /* FrameInfoProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF1FE862D37201300A5E400 /* FrameInfoProxyAPITests.swift */; }; 8FF1FEBF2D37201300A5E400 /* HTTPCookieProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF1FE882D37201300A5E400 /* HTTPCookieProxyAPITests.swift */; }; - EC73D2F02E81CFF0A2CA5D1E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D183650EAE2ABECF7D9CBA94 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -96,7 +94,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 02805256CB102DDACBC04AEE /* 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 = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; @@ -112,13 +109,10 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 418FB4EA49104BADE288A967 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 69E635CFAEEB8242654D4BBC /* 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 = ""; }; 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; 78DABEA22ED26510000E7860 /* webview_flutter_wkwebview */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = webview_flutter_wkwebview; path = ../../../darwin/webview_flutter_wkwebview; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7D83F970E1160B09690C7723 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 8FEC64912DA303E200C48569 /* GetTrustResultResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GetTrustResultResponseProxyAPITests.swift; path = ../../darwin/Tests/GetTrustResultResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FEC64922DA303E200C48569 /* SecCertificateProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecCertificateProxyAPITests.swift; path = ../../darwin/Tests/SecCertificateProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FEC64932DA303E200C48569 /* SecTrustProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecTrustProxyAPITests.swift; path = ../../darwin/Tests/SecTrustProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; @@ -155,10 +149,6 @@ 8FF1FEA12D37201300A5E400 /* WebViewProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WebViewProxyAPITests.swift; path = ../../darwin/Tests/WebViewProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FF1FEC02D37201500A5E400 /* RunnerTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RunnerTests-Bridging-Header.h"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - ADCB9E0C172AE7D0FAEDBF42 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - B8188FDAD7773BAC85CB6DE9 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D183650EAE2ABECF7D9CBA94 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D63AEC83B24957EBEB3AA850 /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -166,7 +156,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6FBECA2F94D9B352000B75D7 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -175,7 +164,6 @@ buildActionMask = 2147483647; files = ( 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, - EC73D2F02E81CFF0A2CA5D1E /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -243,7 +231,6 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, 57E0600E4AC0FCC05F33A596 /* Pods */, - DEE7D4409B558EFC0D7C2BDC /* Frameworks */, ); sourceTree = ""; }; @@ -297,25 +284,10 @@ 57E0600E4AC0FCC05F33A596 /* Pods */ = { isa = PBXGroup; children = ( - 02805256CB102DDACBC04AEE /* Pods-Runner.debug.xcconfig */, - D63AEC83B24957EBEB3AA850 /* Pods-Runner.release.xcconfig */, - ADCB9E0C172AE7D0FAEDBF42 /* Pods-Runner.profile.xcconfig */, - 69E635CFAEEB8242654D4BBC /* Pods-RunnerTests.debug.xcconfig */, - 7D83F970E1160B09690C7723 /* Pods-RunnerTests.release.xcconfig */, - B8188FDAD7773BAC85CB6DE9 /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - DEE7D4409B558EFC0D7C2BDC /* Frameworks */ = { - isa = PBXGroup; - children = ( - D183650EAE2ABECF7D9CBA94 /* Pods_Runner.framework */, - 418FB4EA49104BADE288A967 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -323,7 +295,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 05D7642BA03EFE4FAEF7BAB1 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -342,7 +313,6 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4D1FE18AFCDA46E722527658 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -403,7 +373,7 @@ ); mainGroup = 33CC10E42044A3C60003C045; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; projectDirPath = ""; @@ -436,28 +406,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 05D7642BA03EFE4FAEF7BAB1 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -496,28 +444,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4D1FE18AFCDA46E722527658 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -602,7 +528,6 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 69E635CFAEEB8242654D4BBC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -620,7 +545,6 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D83F970E1160B09690C7723 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -637,7 +561,6 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B8188FDAD7773BAC85CB6DE9 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; @@ -925,7 +848,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; From 0f2eeaecde3f34322f9e9980177d15beaeb2b871 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Mon, 16 Mar 2026 10:18:25 -0400 Subject: [PATCH 06/55] [tool] Add a SwiftPM flag to fetch-deps (#11258) Currently the iOS/macOS part of `fetch-deps` uses whatever the default Swift Package Manager setting is, even though the `build-examples` command is always using Swift Package Manager. That means that it's caching a bunch of things we don't need. This PR adds a `--swift-package-manager` flag to `fetch-deps`, and passes the same value we are using for `build-examples`. This fixes the tree breakage on macOS stable. Some of our macOS example projects don't have RunnerTest targets, and the default template version of `Podfile` assumes there is one (since it's part of the template project), so re-enabling the CocoaPods build after #11237 requires a small manual change to Podfile. Since any CocoaPods builds of those projects should be manual, that should be fine, but without this PR we are accidentally hitting that in CI. --- .ci/targets/ios_platform_tests.yaml | 2 +- .ci/targets/macos_platform_tests.yaml | 2 +- script/tool/lib/src/fetch_deps_command.dart | 66 +++++++-- .../test/drive_examples_command_test.dart | 2 - script/tool/test/fetch_deps_command_test.dart | 140 +++++++++++++++++- 5 files changed, 196 insertions(+), 16 deletions(-) diff --git a/.ci/targets/ios_platform_tests.yaml b/.ci/targets/ios_platform_tests.yaml index 262de31fb93f..08eaaf54c15a 100644 --- a/.ci/targets/ios_platform_tests.yaml +++ b/.ci/targets/ios_platform_tests.yaml @@ -7,7 +7,7 @@ tasks: infra_step: true # Note infra steps failing prevents "always" from running. - name: download Dart and iOS deps script: .ci/scripts/tool_runner.sh - args: ["fetch-deps", "--ios", "--supporting-target-platforms-only"] + args: ["fetch-deps", "--ios", "--supporting-target-platforms-only", "--swift-package-manager"] infra_step: true - name: build examples script: .ci/scripts/tool_runner.sh diff --git a/.ci/targets/macos_platform_tests.yaml b/.ci/targets/macos_platform_tests.yaml index 6756fa7e490f..ab8b033d09c6 100644 --- a/.ci/targets/macos_platform_tests.yaml +++ b/.ci/targets/macos_platform_tests.yaml @@ -4,7 +4,7 @@ tasks: infra_step: true # Note infra steps failing prevents "always" from running. - name: download Dart and macOS deps script: .ci/scripts/tool_runner.sh - args: ["fetch-deps", "--macos", "--supporting-target-platforms-only"] + args: ["fetch-deps", "--macos", "--supporting-target-platforms-only", "--swift-package-manager"] infra_step: true - name: build examples script: .ci/scripts/tool_runner.sh diff --git a/script/tool/lib/src/fetch_deps_command.dart b/script/tool/lib/src/fetch_deps_command.dart index 0645bd08836d..9243a10bc4fb 100644 --- a/script/tool/lib/src/fetch_deps_command.dart +++ b/script/tool/lib/src/fetch_deps_command.dart @@ -78,9 +78,11 @@ class FetchDepsCommand extends PackageLoopingCommand { 'Include packages with Windows examples when used with ' '--$_supportingTargetPlatformsOnlyFlag', ); + argParser.addFlag(_swiftPackageManagerFlag, defaultsTo: null); } static const String _dartFlag = 'dart'; + static const String _swiftPackageManagerFlag = 'swift-package-manager'; static const String _supportingTargetPlatformsOnlyFlag = 'supporting-target-platforms-only'; @@ -101,18 +103,24 @@ class FetchDepsCommand extends PackageLoopingCommand { @override Future initializeRun() async { - // `pod install` requires having the platform artifacts precached. See - // https://github.com/flutter/flutter/blob/fb7a763c640d247d090cbb373e4b3a0459ac171b/packages/flutter_tools/bin/podhelper.rb#L47 - // https://github.com/flutter/flutter/blob/fb7a763c640d247d090cbb373e4b3a0459ac171b/packages/flutter_tools/bin/podhelper.rb#L130 - final bool precacheIOS = getBoolArg(platformIOS); - final bool precacheMacOS = getBoolArg(platformMacOS); - if (precacheIOS || precacheMacOS) { + final bool includeIOS = getBoolArg(platformIOS); + final bool includeMacOS = getBoolArg(platformMacOS); + // TODO(stuartmorgan): Flip the default to true once SwiftPM is on by + // default on stable. For now this will have the wrong default on stable, + // but that's fine since we are usually providing an explicit flag for now. + final bool usesCocoaPods = + (includeIOS || includeMacOS) && + !(getNullableBoolArg(_swiftPackageManagerFlag) ?? false); + if (usesCocoaPods) { + // `pod install` requires having the platform artifacts precached. See + // https://github.com/flutter/flutter/blob/fb7a763c640d247d090cbb373e4b3a0459ac171b/packages/flutter_tools/bin/podhelper.rb#L47 + // https://github.com/flutter/flutter/blob/fb7a763c640d247d090cbb373e4b3a0459ac171b/packages/flutter_tools/bin/podhelper.rb#L130 final int precacheExitCode = await processRunner.runAndStream( flutterCommand, [ 'precache', - if (precacheIOS) '--ios', - if (precacheMacOS) '--macos', + if (includeIOS) '--ios', + if (includeMacOS) '--macos', ], ); if (precacheExitCode != 0) { @@ -128,6 +136,13 @@ class FetchDepsCommand extends PackageLoopingCommand { } } + bool? get _swiftPackageManagerFeatureConfig { + if (!getBoolArg(platformIOS) && !getBoolArg(platformMacOS)) { + return null; + } + return getNullableBoolArg(_swiftPackageManagerFlag); + } + @override Future runForPackage(RepositoryPackage package) async { var fetchedDeps = false; @@ -158,9 +173,40 @@ class FetchDepsCommand extends PackageLoopingCommand { case FlutterPlatform.android: result = await _fetchAndroidDeps(package); case FlutterPlatform.ios: - result = await _fetchDarwinDeps(package, platformIOS); case FlutterPlatform.macos: - result = await _fetchDarwinDeps(package, platformMacOS); + { + final bool? swiftPackageManagerOverride = + _swiftPackageManagerFeatureConfig; + final String platformString = platform == FlutterPlatform.ios + ? platformIOS + : platformMacOS; + // Rather than changing global config state, enable SwiftPM via a + // temporary package-level override. + if (swiftPackageManagerOverride != null) { + for (final RepositoryPackage example in package.getExamples()) { + print( + 'Overriding enable-swift-package-manager to ' + '$swiftPackageManagerOverride', + ); + setSwiftPackageManagerState( + example, + enabled: swiftPackageManagerOverride, + ); + } + } + + result = await _fetchDarwinDeps(package, platformString); + + // If an override was added, remove it. + if (swiftPackageManagerOverride != null) { + for (final RepositoryPackage example in package.getExamples()) { + print('Removing enable-swift-package-manager override'); + setSwiftPackageManagerState(example, enabled: null); + } + } + break; + } + case FlutterPlatform.linux: case FlutterPlatform.web: case FlutterPlatform.windows: diff --git a/script/tool/test/drive_examples_command_test.dart b/script/tool/test/drive_examples_command_test.dart index e9d1cc2e0826..f4aebdb569ac 100644 --- a/script/tool/test/drive_examples_command_test.dart +++ b/script/tool/test/drive_examples_command_test.dart @@ -48,8 +48,6 @@ void main() { ); runner.addCommand(command); - // TODO(dit): Clean this up, https://github.com/flutter/flutter/issues/151869 - mockPlatform.environment['CHANNEL'] = 'master'; mockPlatform.environment['FLUTTER_LOGS_DIR'] = '/path/to/logs'; }); diff --git a/script/tool/test/fetch_deps_command_test.dart b/script/tool/test/fetch_deps_command_test.dart index 57c3a8c277a1..8a59663e7ff7 100644 --- a/script/tool/test/fetch_deps_command_test.dart +++ b/script/tool/test/fetch_deps_command_test.dart @@ -525,7 +525,6 @@ void main() { mockPlatform, )] = [ FakeProcessInfo(MockProcess(), ['precache']), - FakeProcessInfo(MockProcess(), ['repo', 'update']), FakeProcessInfo(MockProcess(exitCode: 1), [ 'build', 'ios', @@ -650,7 +649,6 @@ void main() { mockPlatform, )] = [ FakeProcessInfo(MockProcess(), ['precache']), - FakeProcessInfo(MockProcess(), ['repo', 'update']), FakeProcessInfo(MockProcess(exitCode: 1), [ 'build', 'macos', @@ -716,5 +714,143 @@ void main() { ); }); }); + + group('swift-package-manager', () { + for (final platformName in [platformIOS, platformMacOS]) { + group(platformName, () { + test('is not set by default', () async { + mockPlatform.isMacOS = true; + final RepositoryPackage plugin = createFakePlugin( + 'plugin1', + packagesDir, + platformSupport: { + platformName: const PlatformDetails(PlatformSupport.inline), + }, + ); + final RepositoryPackage example = plugin.getExamples().first; + final String originalPubspecContents = example.pubspecFile + .readAsStringSync(); + String? buildTimePubspecContents; + processRunner.mockProcessesForExecutable[getFlutterCommand( + mockPlatform, + )] = [ + FakeProcessInfo(MockProcess(), ['precache']), + FakeProcessInfo(MockProcess(), ['build'], () { + buildTimePubspecContents = example.pubspecFile + .readAsStringSync(); + }), + ]; + + await runCapturingPrint(runner, [ + 'fetch-deps', + '--no-dart', + '--$platformName', + ]); + + // Ensure that SwiftPM was not set at build time. + expect( + buildTimePubspecContents, + isNot(contains('enable-swift-package-manager')), + ); + // And that the pubspec wasn't changed at all. + expect( + example.pubspecFile.readAsStringSync().trim(), + originalPubspecContents.trim(), + ); + }); + + test('can be enabled', () async { + mockPlatform.isMacOS = true; + final RepositoryPackage plugin = createFakePlugin( + 'plugin1', + packagesDir, + platformSupport: { + platformName: const PlatformDetails(PlatformSupport.inline), + }, + ); + final RepositoryPackage example = plugin.getExamples().first; + final String originalPubspecContents = example.pubspecFile + .readAsStringSync(); + String? buildTimePubspecContents; + processRunner.mockProcessesForExecutable[getFlutterCommand( + mockPlatform, + )] = [ + FakeProcessInfo(MockProcess(), ['build'], () { + buildTimePubspecContents = example.pubspecFile + .readAsStringSync(); + }), + ]; + + await runCapturingPrint(runner, [ + 'fetch-deps', + '--no-dart', + '--$platformName', + '--swift-package-manager', + ]); + + // Ensure that SwiftPM was enabled for the package. + expect( + originalPubspecContents, + isNot(contains('enable-swift-package-manager: true')), + ); + expect( + buildTimePubspecContents, + contains('enable-swift-package-manager: true'), + ); + // And that it was undone after. + expect( + example.pubspecFile.readAsStringSync().trim(), + originalPubspecContents.trim(), + ); + }); + + test('can be disabled', () async { + mockPlatform.isMacOS = true; + final RepositoryPackage plugin = createFakePlugin( + 'plugin1', + packagesDir, + platformSupport: { + platformName: const PlatformDetails(PlatformSupport.inline), + }, + ); + final RepositoryPackage example = plugin.getExamples().first; + final String originalPubspecContents = example.pubspecFile + .readAsStringSync(); + String? buildTimePubspecContents; + processRunner.mockProcessesForExecutable[getFlutterCommand( + mockPlatform, + )] = [ + FakeProcessInfo(MockProcess(), ['precache']), + FakeProcessInfo(MockProcess(), ['build'], () { + buildTimePubspecContents = example.pubspecFile + .readAsStringSync(); + }), + ]; + + await runCapturingPrint(runner, [ + 'fetch-deps', + '--no-dart', + '--$platformName', + '--no-swift-package-manager', + ]); + + // Ensure that SwiftPM was disabled for the package. + expect( + originalPubspecContents, + isNot(contains('enable-swift-package-manager: false')), + ); + expect( + buildTimePubspecContents, + contains('enable-swift-package-manager: false'), + ); + // And that it was undone after. + expect( + example.pubspecFile.readAsStringSync().trim(), + originalPubspecContents.trim(), + ); + }); + }); + } + }); }); } From 88afc6863149dfa1a26170a17789a1b711ddbe5a Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Mon, 16 Mar 2026 12:25:05 -0400 Subject: [PATCH 07/55] [tool] Fix fetch-deps handling of SwiftPM (#11261) https://github.com/flutter/packages/pull/11258 did not work correctly to disable CocoaPods (i.e., to fix the tree breakage on `stable`) because it only added the config flag around the `flutter build`. When caching Dart deps as well, the `flutter pub get` call will cause `Podfile` to be recreated if SwiftPM support isn't enabled, and once it's present, `build` will try to use CocoaPods even with SwiftPM support enabled, because it looks like a project that is still using CocoaPods. This fixes that by: - Applying the override for the entire set of commands, not just `build`. - Applying the override to the plugin as well as the example, because `flutter pub get` on a package automatically sub-runs on the example, and it appears that it does so using the config flags of the top-level package. --- script/tool/lib/src/fetch_deps_command.dart | 68 ++++++++++--------- script/tool/test/fetch_deps_command_test.dart | 64 +++++++++++++++++ 2 files changed, 99 insertions(+), 33 deletions(-) diff --git a/script/tool/lib/src/fetch_deps_command.dart b/script/tool/lib/src/fetch_deps_command.dart index 9243a10bc4fb..8691039ac81b 100644 --- a/script/tool/lib/src/fetch_deps_command.dart +++ b/script/tool/lib/src/fetch_deps_command.dart @@ -147,6 +147,30 @@ class FetchDepsCommand extends PackageLoopingCommand { Future runForPackage(RepositoryPackage package) async { var fetchedDeps = false; final skips = []; + + final bool? swiftPackageManagerOverride = _swiftPackageManagerFeatureConfig; + // Rather than changing global config state, enable SwiftPM via a + // temporary package-level override. This must be done before running any + // Flutter commands, not just `build`, because `flutter pub get` triggers + // codepaths that can generate a Podfile, changing the behavior of + // `flutter build`. + if (swiftPackageManagerOverride != null) { + print( + 'Overriding enable-swift-package-manager to ' + '$swiftPackageManagerOverride', + ); + setSwiftPackageManagerState( + package, + enabled: swiftPackageManagerOverride, + ); + for (final RepositoryPackage example in package.getExamples()) { + setSwiftPackageManagerState( + example, + enabled: swiftPackageManagerOverride, + ); + } + } + if (getBoolArg(_dartFlag)) { final bool filterPlatforms = getBoolArg( _supportingTargetPlatformsOnlyFlag, @@ -173,40 +197,9 @@ class FetchDepsCommand extends PackageLoopingCommand { case FlutterPlatform.android: result = await _fetchAndroidDeps(package); case FlutterPlatform.ios: + result = await _fetchDarwinDeps(package, platformIOS); case FlutterPlatform.macos: - { - final bool? swiftPackageManagerOverride = - _swiftPackageManagerFeatureConfig; - final String platformString = platform == FlutterPlatform.ios - ? platformIOS - : platformMacOS; - // Rather than changing global config state, enable SwiftPM via a - // temporary package-level override. - if (swiftPackageManagerOverride != null) { - for (final RepositoryPackage example in package.getExamples()) { - print( - 'Overriding enable-swift-package-manager to ' - '$swiftPackageManagerOverride', - ); - setSwiftPackageManagerState( - example, - enabled: swiftPackageManagerOverride, - ); - } - } - - result = await _fetchDarwinDeps(package, platformString); - - // If an override was added, remove it. - if (swiftPackageManagerOverride != null) { - for (final RepositoryPackage example in package.getExamples()) { - print('Removing enable-swift-package-manager override'); - setSwiftPackageManagerState(example, enabled: null); - } - } - break; - } - + result = await _fetchDarwinDeps(package, platformMacOS); case FlutterPlatform.linux: case FlutterPlatform.web: case FlutterPlatform.windows: @@ -225,6 +218,15 @@ class FetchDepsCommand extends PackageLoopingCommand { } } + // If an override was added, remove it. + if (swiftPackageManagerOverride != null) { + print('Removing enable-swift-package-manager override'); + setSwiftPackageManagerState(package, enabled: null); + for (final RepositoryPackage example in package.getExamples()) { + setSwiftPackageManagerState(example, enabled: null); + } + } + if (errors.isNotEmpty) { return PackageResult.fail(errors); } diff --git a/script/tool/test/fetch_deps_command_test.dart b/script/tool/test/fetch_deps_command_test.dart index 8a59663e7ff7..4a5bae11e8d4 100644 --- a/script/tool/test/fetch_deps_command_test.dart +++ b/script/tool/test/fetch_deps_command_test.dart @@ -849,6 +849,70 @@ void main() { originalPubspecContents.trim(), ); }); + + test( + 'is set before running pub get, and includes the plugin package', + () async { + mockPlatform.isMacOS = true; + final RepositoryPackage plugin = createFakePlugin( + 'plugin1', + packagesDir, + platformSupport: { + platformName: const PlatformDetails(PlatformSupport.inline), + }, + ); + final RepositoryPackage example = plugin.getExamples().first; + final String originalPluginPubspecContents = plugin.pubspecFile + .readAsStringSync(); + final String originalExamplePubspecContents = example.pubspecFile + .readAsStringSync(); + String? buildTimePluginPubspecContents; + String? buildTimeExamplePubspecContents; + processRunner.mockProcessesForExecutable[getFlutterCommand( + mockPlatform, + )] = [ + FakeProcessInfo(MockProcess(), ['pub', 'get'], () { + buildTimePluginPubspecContents = plugin.pubspecFile + .readAsStringSync(); + buildTimeExamplePubspecContents = example.pubspecFile + .readAsStringSync(); + }), + ]; + + await runCapturingPrint(runner, [ + 'fetch-deps', + '--$platformName', + '--swift-package-manager', + ]); + + // Ensure that SwiftPM was enabled for the plugin and the example. + expect( + originalPluginPubspecContents, + isNot(contains('enable-swift-package-manager: true')), + ); + expect( + originalExamplePubspecContents, + isNot(contains('enable-swift-package-manager: true')), + ); + expect( + buildTimePluginPubspecContents, + contains('enable-swift-package-manager: true'), + ); + expect( + buildTimeExamplePubspecContents, + contains('enable-swift-package-manager: true'), + ); + // And that it was undone after. + expect( + plugin.pubspecFile.readAsStringSync().trim(), + originalPluginPubspecContents.trim(), + ); + expect( + example.pubspecFile.readAsStringSync().trim(), + originalExamplePubspecContents.trim(), + ); + }, + ); }); } }); From a9d36fb7b9021b6e980156097fa8c0f8392273f3 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Mon, 16 Mar 2026 14:23:49 -0400 Subject: [PATCH 08/55] [tool] Apply SwiftPM to non-plugin builds too (#11265) The `--swift-package-manager` flag for `build-exampes` was incorrectly only applying the override to plugin examples; any app build can have transitive plugin dependencies, and the flag should cause those to be built with Swift Package Manager. Fixes current tree breakage on `stable`. --- .../tool/lib/src/build_examples_command.dart | 4 +- .../test/build_examples_command_test.dart | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/script/tool/lib/src/build_examples_command.dart b/script/tool/lib/src/build_examples_command.dart index c6136f49677b..6c416cd09c30 100644 --- a/script/tool/lib/src/build_examples_command.dart +++ b/script/tool/lib/src/build_examples_command.dart @@ -199,9 +199,7 @@ class BuildExamplesCommand extends PackageLoopingCommand { } print(''); - final bool? swiftPackageManagerOverride = isPlugin - ? _swiftPackageManagerFeatureConfig - : null; + final bool? swiftPackageManagerOverride = _swiftPackageManagerFeatureConfig; var builtSomething = false; for (final RepositoryPackage example in package.getExamples()) { diff --git a/script/tool/test/build_examples_command_test.dart b/script/tool/test/build_examples_command_test.dart index ab0783a8e1ba..b2f66c5dbd6f 100644 --- a/script/tool/test/build_examples_command_test.dart +++ b/script/tool/test/build_examples_command_test.dart @@ -321,6 +321,53 @@ void main() { ); }); + test( + 'building non-plugin package for iOS with Swift Package Manager', + () async { + mockPlatform.isMacOS = true; + + final RepositoryPackage package = createFakePackage( + 'a_package', + packagesDir, + isFlutter: true, + ); + + final RepositoryPackage example = package.getExamples().first; + example.directory.childDirectory('ios').createSync(recursive: true); + final String originalPubspecContents = example.pubspecFile + .readAsStringSync(); + String? buildTimePubspecContents; + processRunner.mockProcessesForExecutable[getFlutterCommand( + mockPlatform, + )] = [ + FakeProcessInfo(MockProcess(), ['build'], () { + buildTimePubspecContents = example.pubspecFile.readAsStringSync(); + }), + ]; + + await runCapturingPrint(runner, [ + 'build-examples', + '--ios', + '--swift-package-manager', + ]); + + // Ensure that SwiftPM was enabled for the package. + expect( + originalPubspecContents, + isNot(contains('enable-swift-package-manager: true')), + ); + expect( + buildTimePubspecContents, + contains('enable-swift-package-manager: true'), + ); + // And that it was undone after. + expect( + example.pubspecFile.readAsStringSync().trim(), + originalPubspecContents.trim(), + ); + }, + ); + test( 'building for Linux when plugin is not set up for Linux results in no-op', () async { From 1802599d43eb93a1ada0dfb294d3f030bdacc2a2 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Tue, 17 Mar 2026 12:48:55 -0400 Subject: [PATCH 09/55] [ci] Enable SwiftPM by default for platform tests (#11271) Rather than continue to plumb `--swift-package-manager` support into every command to make CI work on stable, just enable it at the machine level before running platform tests so that they all use Swift Package Manager, making `stable` and `master` act the same for these tasks. The build-all tests are not changed, as they continue to be the testbed for ensuring that plugins are usable by clients who are using CocoaPods. A recipe step runs `flutter config --clear-features` at the start of any bot's run, so this should not cause cross-task bot contamination. --- .ci/scripts/enable_swift_package_manager.sh | 7 +++++++ .ci/targets/ios_platform_tests.yaml | 4 ++++ .ci/targets/macos_platform_tests.yaml | 4 ++++ 3 files changed, 15 insertions(+) create mode 100755 .ci/scripts/enable_swift_package_manager.sh diff --git a/.ci/scripts/enable_swift_package_manager.sh b/.ci/scripts/enable_swift_package_manager.sh new file mode 100755 index 000000000000..d8d789e7da95 --- /dev/null +++ b/.ci/scripts/enable_swift_package_manager.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# 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. +set -e + +flutter config --enable-swift-package-manager diff --git a/.ci/targets/ios_platform_tests.yaml b/.ci/targets/ios_platform_tests.yaml index 08eaaf54c15a..4e10a6f091b7 100644 --- a/.ci/targets/ios_platform_tests.yaml +++ b/.ci/targets/ios_platform_tests.yaml @@ -2,6 +2,10 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh infra_step: true # Note infra steps failing prevents "always" from running. + - name: enable Swift Package Manager + # For consistency between stable and master channels, enable SwiftPM. + # TODO(stuartmorgan): Remove this step once it's the default on stable. + script: .ci/scripts/enable_swift_package_manager.sh - name: create simulator script: .ci/scripts/create_simulator.sh infra_step: true # Note infra steps failing prevents "always" from running. diff --git a/.ci/targets/macos_platform_tests.yaml b/.ci/targets/macos_platform_tests.yaml index ab8b033d09c6..fd2a1767cc2f 100644 --- a/.ci/targets/macos_platform_tests.yaml +++ b/.ci/targets/macos_platform_tests.yaml @@ -2,6 +2,10 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh infra_step: true # Note infra steps failing prevents "always" from running. + - name: enable Swift Package Manager + # For consistency between stable and master channels, enable SwiftPM. + # TODO(stuartmorgan): Remove this step once it's the default on stable. + script: .ci/scripts/enable_swift_package_manager.sh - name: download Dart and macOS deps script: .ci/scripts/tool_runner.sh args: ["fetch-deps", "--macos", "--supporting-target-platforms-only", "--swift-package-manager"] From dd634a2186cfe9e5b57fca2c8cceae7b4fa41790 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 18:12:25 +0000 Subject: [PATCH 10/55] [dependabot]: Bump the test-dependencies group across 14 directories with 1 update (#11250) Bumps the test-dependencies group with 1 update in the /packages/camera/camera_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/camera/camera_android_camerax/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/file_selector/file_selector_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/flutter_plugin_android_lifecycle/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/google_maps_flutter/google_maps_flutter_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/google_sign_in/google_sign_in_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/image_picker/image_picker_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/in_app_purchase/in_app_purchase_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/local_auth/local_auth_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/pigeon/platform_tests/alternate_language_test_plugin/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/quick_actions/quick_actions_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/url_launcher/url_launcher_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/video_player/video_player_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Bumps the test-dependencies group with 1 update in the /packages/webview_flutter/webview_flutter_android/android directory: [org.mockito:mockito-core](https://github.com/mockito/mockito). Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Updates `org.mockito:mockito-core` from 5.22.0 to 5.23.0
Release notes

Sourced from org.mockito:mockito-core's releases.

v5.23.0

NOTE: Breaking change for Android

The mockito-android artifact has a breaking change: tests now require a device or emulator based on API 28+ (Android P). This is to enable new support for mocking Kotlin classes. See #3788 for more details.


5.23.0

Commits
  • a231205 Fix StackOverflowError with AbstractList after using mockSingleton (#3790)
  • f6a91a6 Replace mockito-android mock maker implementation with dexmaker-mockito-inlin...
  • aa2298a fix: make spotless happy
  • a6729d6 chore: update BDDMockito with jspecify annotation
  • bb83c92 chore: move jspecify as a compile only dependency
  • 47a4695 chore: add jspecify with minimal change. Fixes #3503
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
--- packages/camera/camera_android/android/build.gradle | 2 +- packages/camera/camera_android_camerax/android/build.gradle | 2 +- .../file_selector/file_selector_android/android/build.gradle | 2 +- packages/flutter_plugin_android_lifecycle/android/build.gradle | 2 +- .../google_maps_flutter_android/android/build.gradle | 2 +- .../google_sign_in/google_sign_in_android/android/build.gradle | 2 +- packages/image_picker/image_picker_android/android/build.gradle | 2 +- .../in_app_purchase_android/android/build.gradle | 2 +- packages/local_auth/local_auth_android/android/build.gradle | 2 +- .../alternate_language_test_plugin/android/build.gradle | 2 +- .../quick_actions/quick_actions_android/android/build.gradle | 2 +- packages/url_launcher/url_launcher_android/android/build.gradle | 2 +- packages/video_player/video_player_android/android/build.gradle | 2 +- .../webview_flutter_android/android/build.gradle | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index 85af8446ba3f..6236cce21649 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -70,7 +70,7 @@ android { dependencies { implementation("androidx.annotation:annotation:1.9.1") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("androidx.test:core:1.7.0") testImplementation("org.robolectric:robolectric:4.16") } diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index 484ed57ff3d2..065738fc7ba2 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -79,7 +79,7 @@ dependencies { implementation("androidx.camera:camera-video:${camerax_version}") implementation("com.google.guava:guava:33.5.0-android") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("org.mockito:mockito-inline:5.2.0") testImplementation("androidx.test:core:1.7.0") testImplementation("org.robolectric:robolectric:4.16") diff --git a/packages/file_selector/file_selector_android/android/build.gradle b/packages/file_selector/file_selector_android/android/build.gradle index f39b8d10285f..99f31fe552b9 100644 --- a/packages/file_selector/file_selector_android/android/build.gradle +++ b/packages/file_selector/file_selector_android/android/build.gradle @@ -37,7 +37,7 @@ android { dependencies { implementation("androidx.annotation:annotation:1.9.1") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("androidx.test:core:1.7.0") testImplementation("org.robolectric:robolectric:4.16") } diff --git a/packages/flutter_plugin_android_lifecycle/android/build.gradle b/packages/flutter_plugin_android_lifecycle/android/build.gradle index 5d2f2fdde437..3e48512de64a 100644 --- a/packages/flutter_plugin_android_lifecycle/android/build.gradle +++ b/packages/flutter_plugin_android_lifecycle/android/build.gradle @@ -62,5 +62,5 @@ android { dependencies { testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle index 915ad7cdddc9..d65271558ea7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle @@ -44,7 +44,7 @@ android { androidTestImplementation("androidx.test:rules:1.7.0") androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("androidx.test:core:1.7.0") testImplementation("org.robolectric:robolectric:4.16") } diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle index 2a944e8846c3..cd786af0b9c8 100644 --- a/packages/google_sign_in/google_sign_in_android/android/build.gradle +++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle @@ -72,5 +72,5 @@ dependencies { implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") implementation("com.google.android.gms:play-services-auth:21.4.0") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") } diff --git a/packages/image_picker/image_picker_android/android/build.gradle b/packages/image_picker/image_picker_android/android/build.gradle index f7cb2564f46b..f92f828f1321 100644 --- a/packages/image_picker/image_picker_android/android/build.gradle +++ b/packages/image_picker/image_picker_android/android/build.gradle @@ -43,7 +43,7 @@ android { implementation("androidx.activity:activity:1.12.4") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("androidx.test:core:1.7.0") testImplementation("org.robolectric:robolectric:4.16") } diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle index 1ccc6339ef65..179938c5c3ad 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle @@ -64,7 +64,7 @@ dependencies { implementation("com.android.billingclient:billing:7.1.1") testImplementation("junit:junit:4.13.2") testImplementation("org.json:json:20251224") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("androidx.test:core:1.7.0") testImplementation("org.robolectric:robolectric:4.16") androidTestImplementation("androidx.test:runner:1.7.0") diff --git a/packages/local_auth/local_auth_android/android/build.gradle b/packages/local_auth/local_auth_android/android/build.gradle index 02f2f41c7dfb..04a30db5ebbf 100644 --- a/packages/local_auth/local_auth_android/android/build.gradle +++ b/packages/local_auth/local_auth_android/android/build.gradle @@ -60,7 +60,7 @@ dependencies { api("androidx.biometric:biometric:1.1.0") api("androidx.fragment:fragment:1.8.9") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("org.robolectric:robolectric:4.16") androidTestImplementation("androidx.test:runner:1.7.0") androidTestImplementation("androidx.test:rules:1.7.0") diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle index 94e831eab439..65fe42297512 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle @@ -54,6 +54,6 @@ android { dependencies { testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") } } diff --git a/packages/quick_actions/quick_actions_android/android/build.gradle b/packages/quick_actions/quick_actions_android/android/build.gradle index 65d9fee552f3..7b5ee57fec5d 100644 --- a/packages/quick_actions/quick_actions_android/android/build.gradle +++ b/packages/quick_actions/quick_actions_android/android/build.gradle @@ -39,7 +39,7 @@ android { dependencies { implementation("androidx.annotation:annotation:1.9.1") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") } compileOptions { diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle b/packages/url_launcher/url_launcher_android/android/build.gradle index 221e6292fb9b..e77948ab280e 100644 --- a/packages/url_launcher/url_launcher_android/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/android/build.gradle @@ -64,7 +64,7 @@ dependencies { implementation("androidx.annotation:annotation:1.9.1") implementation("androidx.browser:browser:1.9.0") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("androidx.test:core:1.7.0") testImplementation("org.robolectric:robolectric:4.16") } diff --git a/packages/video_player/video_player_android/android/build.gradle b/packages/video_player/video_player_android/android/build.gradle index 472d36727a96..36d91037969e 100644 --- a/packages/video_player/video_player_android/android/build.gradle +++ b/packages/video_player/video_player_android/android/build.gradle @@ -62,7 +62,7 @@ android { implementation("androidx.media3:media3-exoplayer-smoothstreaming:${exoplayer_version}") testImplementation("junit:junit:4.13.2") testImplementation("androidx.test:core:1.7.0") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("org.robolectric:robolectric:4.16") testImplementation("androidx.media3:media3-test-utils:${exoplayer_version}") } diff --git a/packages/webview_flutter/webview_flutter_android/android/build.gradle b/packages/webview_flutter/webview_flutter_android/android/build.gradle index 1187d314e8eb..9a14dfe32220 100644 --- a/packages/webview_flutter/webview_flutter_android/android/build.gradle +++ b/packages/webview_flutter/webview_flutter_android/android/build.gradle @@ -53,7 +53,7 @@ android { implementation("androidx.annotation:annotation:1.9.1") implementation("androidx.webkit:webkit:1.15.0") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito:mockito-core:5.22.0") + testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("org.mockito:mockito-inline:5.2.0") testImplementation("androidx.test:core:1.7.0") } From b2e421bc176c488730567e4edbdee6ed48d00473 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 17 Mar 2026 14:15:12 -0400 Subject: [PATCH 11/55] [web_benchmark] Fix tab connection for newer versions of Chrome (#11266) DevTools has been experiencing a [flake](https://github.com/flutter/flutter/issues/183335) with `package:web_benchmark`'s launching of Chrome. I've also noticed several times a similar failure when running web engines locally. Turns out (from trial and error) that newer versions of Chrome seem to establish the WIP connection before tabs have had a chance to open. It's a race between the two, and when the WIP connections is faster, we fail to find any tab to connect to, and therefore we fail. The fix in this PR is to allow a grace period of 5 seconds of retrying to find the tab. I made a [similar fix](https://github.com/flutter/flutter/pull/183737) in the flutter/flutter repo. --- packages/web_benchmarks/CHANGELOG.md | 3 ++- packages/web_benchmarks/lib/src/browser.dart | 13 +++++++------ packages/web_benchmarks/pubspec.yaml | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/web_benchmarks/CHANGELOG.md b/packages/web_benchmarks/CHANGELOG.md index d9b3d710c838..9af69a847d2c 100644 --- a/packages/web_benchmarks/CHANGELOG.md +++ b/packages/web_benchmarks/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 4.1.1 +* Makes connecting to Chrome more robust. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 4.1.0 diff --git a/packages/web_benchmarks/lib/src/browser.dart b/packages/web_benchmarks/lib/src/browser.dart index 9698b4b62fe2..8e3397fd75e8 100644 --- a/packages/web_benchmarks/lib/src/browser.dart +++ b/packages/web_benchmarks/lib/src/browser.dart @@ -312,12 +312,13 @@ Future _connectToChromeDebugPort( ); print('Connecting to DevTools: $devtoolsUri'); final chromeConnection = ChromeConnection('localhost', port); - final Iterable tabs = (await chromeConnection.getTabs()).where(( - ChromeTab tab, - ) { - return tab.url.startsWith('http://localhost'); - }); - final ChromeTab tab = tabs.single; + final ChromeTab? tab = await chromeConnection.getTab( + (ChromeTab tab) => tab.url.startsWith('http://localhost'), + retryFor: const Duration(seconds: 5), + ); + if (tab == null) { + throw Exception('Chrome failed to open a tab for http://localhost'); + } final WipConnection debugConnection = await tab.connect(); print('Connected to Chrome tab: ${tab.title} (${tab.url})'); return debugConnection; diff --git a/packages/web_benchmarks/pubspec.yaml b/packages/web_benchmarks/pubspec.yaml index 0c1d00056c51..4a687a973f86 100644 --- a/packages/web_benchmarks/pubspec.yaml +++ b/packages/web_benchmarks/pubspec.yaml @@ -2,7 +2,7 @@ name: web_benchmarks description: A benchmark harness for performance-testing Flutter apps in Chrome. repository: https://github.com/flutter/packages/tree/main/packages/web_benchmarks issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+web_benchmarks%22 -version: 4.1.0 +version: 4.1.1 environment: sdk: ^3.10.0 From 70049bdd9b88609b4485cc2cf71ccb60da57031c Mon Sep 17 00:00:00 2001 From: Christoph Deil Date: Tue, 17 Mar 2026 19:34:31 +0100 Subject: [PATCH 12/55] [camera_avfoundation] Remove outdated TODO comment in messages.dart (#11236) The PR removes an outdated `TODO` code comment in the Pigeon `messages.dart` in `camera_avfoundation`. @stuartmorgan-g - You already addressed it in 2024 here: https://github.com/flutter/packages/commit/3584ddb9edf85601e75656d114e571893a43c1e0#diff-ce4d13732a822cf36d7a1c574215e7974670567cd5667e2a1665c88ac5dc2615R163 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- packages/camera/camera_avfoundation/pigeons/messages.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/camera/camera_avfoundation/pigeons/messages.dart b/packages/camera/camera_avfoundation/pigeons/messages.dart index 29ed9ed4b6b9..b4976758cf47 100644 --- a/packages/camera/camera_avfoundation/pigeons/messages.dart +++ b/packages/camera/camera_avfoundation/pigeons/messages.dart @@ -190,9 +190,6 @@ class PlatformSize { @HostApi() abstract class CameraApi { /// Returns the list of available cameras. - // TODO(stuartmorgan): Make the generic type non-nullable once supported. - // https://github.com/flutter/flutter/issues/97848 - // The consuming code treats it as non-nullable. @async @ObjCSelector('availableCamerasWithCompletion') List getAvailableCameras(); From 90a2dc1245d7a3e370230bcd2f308a35da67851f Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Tue, 17 Mar 2026 14:54:39 -0400 Subject: [PATCH 13/55] [video_player] Regenerate iOS example with Swift (#11275) Updates the iOS example app for `video_player_avfoundation` to a Swift app. Rather than edit in place, this replaces the example app with a fresh copy to minimize drift from current template: - The existing ios/ directory was deleted - A new copy was created with `flutter create --platforms=ios --org=dev.flutter .` - The RunnerUITest target was re-added - The shared RunnerTest was adde, and the placeholder files removed - The RunnerUITest code was restored unchanged This is part of an overall modernization of the example apps; most packages have already been converted to Swift examples. ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../example/.metadata | 30 + .../example/ios/.gitignore | 34 ++ .../ios/Flutter/AppFrameworkInfo.plist | 4 - .../ios/Runner.xcodeproj/project.pbxproj | 563 ++++++++++-------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 14 +- .../contents.xcworkspacedata | 3 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.m | 17 - .../example/ios/Runner/AppDelegate.swift | 20 + .../AppIcon.appiconset/Contents.json | 117 ++-- .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 1418 bytes .../example/ios/Runner/Info.plist | 42 +- .../ios/Runner/Runner-Bridging-Header.h | 5 + .../{AppDelegate.h => SceneDelegate.swift} | 8 +- .../example/ios/Runner/main.m | 13 - .../example/ios/RunnerTests/Info.plist | 22 - .../example/ios/RunnerUITests/Info.plist | 22 - 33 files changed, 529 insertions(+), 409 deletions(-) create mode 100644 packages/video_player/video_player_avfoundation/example/.metadata create mode 100644 packages/video_player/video_player_avfoundation/example/ios/.gitignore create mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.m create mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.swift create mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner/Runner-Bridging-Header.h rename packages/video_player/video_player_avfoundation/example/ios/Runner/{AppDelegate.h => SceneDelegate.swift} (58%) delete mode 100644 packages/video_player/video_player_avfoundation/example/ios/Runner/main.m delete mode 100644 packages/video_player/video_player_avfoundation/example/ios/RunnerTests/Info.plist delete mode 100644 packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/Info.plist diff --git a/packages/video_player/video_player_avfoundation/example/.metadata b/packages/video_player/video_player_avfoundation/example/.metadata new file mode 100644 index 000000000000..3e79a8d8a334 --- /dev/null +++ b/packages/video_player/video_player_avfoundation/example/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "ff37bef603469fb030f2b72995ab929ccfc227f0" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + base_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + - platform: ios + create_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + base_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/video_player/video_player_avfoundation/example/ios/.gitignore b/packages/video_player/video_player_avfoundation/example/ios/.gitignore new file mode 100644 index 000000000000..7a7f9873ad7d --- /dev/null +++ b/packages/video_player/video_player_avfoundation/example/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/packages/video_player/video_player_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist b/packages/video_player/video_player_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist index 6fe4034356ac..391a902b2beb 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist +++ b/packages/video_player/video_player_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist @@ -20,9 +20,5 @@ ???? CFBundleVersion 1.0 - UIRequiredDeviceCapabilities - - arm64 - diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj index 43d08638e5ec..a17db2baa66b 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,32 +3,32 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 331585C52F36433100FACB51 /* VideoPlayerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331585C42F36433100FACB51 /* VideoPlayerUITests.swift */; }; - 335542AD2F364D080081D0DC /* VideoPlayerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335542AC2F364D080081D0DC /* VideoPlayerTests.swift */; }; - 335542B02F366B4F0081D0DC /* TestClasses.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335542AF2F366B4F0081D0DC /* TestClasses.swift */; }; + 3300E9FC2F69AA5200842B27 /* TestClasses.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3300E9FA2F69AA5200842B27 /* TestClasses.swift */; }; + 3300E9FD2F69AA5200842B27 /* VideoPlayerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3300E9FB2F69AA5200842B27 /* VideoPlayerTests.swift */; }; + 3300EA1A2F69AB0B00842B27 /* VideoPlayerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3300EA152F69AB0B00842B27 /* VideoPlayerUITests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 7884E8682EC3CC0700C636F2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; - 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - F7151F3126603EBD0028CB91 /* PBXContainerItemProxy */ = { + 3300EA082F69AA9500842B27 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 97C146E61CF9000F007C117D /* Project object */; proxyType = 1; remoteGlobalIDString = 97C146ED1CF9000F007C117D; remoteInfo = Runner; }; - F7151F3F26603ECA0028CB91 /* PBXContainerItemProxy */ = { + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 97C146E61CF9000F007C117D /* Project object */; proxyType = 1; @@ -53,61 +53,65 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 331585C42F36433100FACB51 /* VideoPlayerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayerUITests.swift; sourceTree = ""; }; - 335542AC2F364D080081D0DC /* VideoPlayerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = VideoPlayerTests.swift; path = ../../darwin/RunnerTests/VideoPlayerTests.swift; sourceTree = SOURCE_ROOT; }; - 335542AF2F366B4F0081D0DC /* TestClasses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestClasses.swift; path = ../../darwin/RunnerTests/TestClasses.swift; sourceTree = SOURCE_ROOT; }; + 3300E9FA2F69AA5200842B27 /* TestClasses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestClasses.swift; path = ../../../darwin/RunnerTests/TestClasses.swift; sourceTree = ""; }; + 3300E9FB2F69AA5200842B27 /* VideoPlayerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = VideoPlayerTests.swift; path = ../../../darwin/RunnerTests/VideoPlayerTests.swift; sourceTree = ""; }; + 3300EA022F69AA9500842B27 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3300EA152F69AB0B00842B27 /* VideoPlayerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayerUITests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* video_player_avfoundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = video_player_avfoundation; path = ../../darwin/video_player_avfoundation; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F7151F2C26603EBD0028CB91 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - F7151F3026603EBD0028CB91 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F7151F3A26603ECA0028CB91 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - F7151F3E26603ECA0028CB91 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { + 3300E9FF2F69AA9500842B27 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F7151F2926603EBD0028CB91 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F7151F3726603ECA0028CB91 /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 3300EA162F69AB0B00842B27 /* RunnerUITests */ = { + isa = PBXGroup; + children = ( + 3300EA152F69AB0B00842B27 /* VideoPlayerUITests.swift */, + ); + path = RunnerUITests; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 3300E9FA2F69AA5200842B27 /* TestClasses.swift */, + 3300E9FB2F69AA5200842B27 /* VideoPlayerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 78DABEA22ED26510000E7860 /* video_player_avfoundation */, - 784666492D4C4C64000A1A5F /* FlutterFramework */, 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, @@ -122,9 +126,9 @@ children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, - F7151F3B26603ECA0028CB91 /* RunnerTests */, - F7151F2D26603EBD0028CB91 /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 3300EA162F69AB0B00842B27 /* RunnerUITests */, ); sourceTree = ""; }; @@ -132,8 +136,8 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, - F7151F2C26603EBD0028CB91 /* RunnerUITests.xctest */, - F7151F3A26603ECA0028CB91 /* RunnerTests.xctest */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + 3300EA022F69AA9500842B27 /* RunnerUITests.xctest */, ); name = Products; sourceTree = ""; @@ -141,107 +145,81 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, ); path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 97C146F21CF9000F007C117D /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - F7151F2D26603EBD0028CB91 /* RunnerUITests */ = { - isa = PBXGroup; - children = ( - 331585C42F36433100FACB51 /* VideoPlayerUITests.swift */, - F7151F3026603EBD0028CB91 /* Info.plist */, - ); - path = RunnerUITests; - sourceTree = ""; - }; - F7151F3B26603ECA0028CB91 /* RunnerTests */ = { - isa = PBXGroup; - children = ( - 335542AC2F364D080081D0DC /* VideoPlayerTests.swift */, - 335542AF2F366B4F0081D0DC /* TestClasses.swift */, - F7151F3E26603ECA0028CB91 /* Info.plist */, - ); - path = RunnerTests; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { + 3300EA012F69AA9500842B27 /* RunnerUITests */ = { isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildConfigurationList = 3300EA0A2F69AA9500842B27 /* Build configuration list for PBXNativeTarget "RunnerUITests" */; buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 3300E9FE2F69AA9500842B27 /* Sources */, + 3300E9FF2F69AA9500842B27 /* Frameworks */, + 3300EA002F69AA9500842B27 /* Resources */, ); buildRules = ( ); dependencies = ( + 3300EA092F69AA9500842B27 /* PBXTargetDependency */, ); - name = Runner; + name = RunnerUITests; packageProductDependencies = ( - 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, ); - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; + productName = RunnerUITests; + productReference = 3300EA022F69AA9500842B27 /* RunnerUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; }; - F7151F2B26603EBD0028CB91 /* RunnerUITests */ = { + 331C8080294A63A400263BE5 /* RunnerTests */ = { isa = PBXNativeTarget; - buildConfigurationList = F7151F3526603EBD0028CB91 /* Build configuration list for PBXNativeTarget "RunnerUITests" */; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - F7151F2826603EBD0028CB91 /* Sources */, - F7151F2926603EBD0028CB91 /* Frameworks */, - F7151F2A26603EBD0028CB91 /* Resources */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, ); buildRules = ( ); dependencies = ( - F7151F3226603EBD0028CB91 /* PBXTargetDependency */, + 331C8086294A63A400263BE5 /* PBXTargetDependency */, ); - name = RunnerUITests; - productName = RunnerUITests; - productReference = F7151F2C26603EBD0028CB91 /* RunnerUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; - F7151F3926603ECA0028CB91 /* RunnerTests */ = { + 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; - buildConfigurationList = F7151F4126603ECB0028CB91 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F7151F3626603ECA0028CB91 /* Sources */, - F7151F3726603ECA0028CB91 /* Frameworks */, - F7151F3826603ECA0028CB91 /* Resources */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, ); buildRules = ( ); dependencies = ( - F7151F4026603ECA0028CB91 /* PBXTargetDependency */, ); - name = RunnerTests; - productName = RunnerTests; - productReference = F7151F3A26603ECA0028CB91 /* RunnerTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -249,28 +227,27 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 2620; LastUpgradeCheck = 1510; - ORGANIZATIONNAME = "The Flutter Authors"; + ORGANIZATIONNAME = ""; TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - }; - F7151F2B26603EBD0028CB91 = { - CreatedOnToolsVersion = 12.5; - LastSwiftMigration = 2620; - ProvisioningStyle = Automatic; + 3300EA012F69AA9500842B27 = { + CreatedOnToolsVersion = 26.2; TestTargetID = 97C146ED1CF9000F007C117D; }; - F7151F3926603ECA0028CB91 = { - CreatedOnToolsVersion = 12.5; - LastSwiftMigration = 2620; - ProvisioningStyle = Automatic; + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; TestTargetID = 97C146ED1CF9000F007C117D; }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -279,42 +256,42 @@ ); mainGroup = 97C146E51CF9000F007C117D; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, - F7151F3926603ECA0028CB91 /* RunnerTests */, - F7151F2B26603EBD0028CB91 /* RunnerUITests */, + 331C8080294A63A400263BE5 /* RunnerTests */, + 3300EA012F69AA9500842B27 /* RunnerUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { + 3300EA002F69AA9500842B27 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F7151F2A26603EBD0028CB91 /* Resources */ = { + 331C807F294A63A400263BE5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - F7151F3826603ECA0028CB91 /* Resources */ = { + 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -355,45 +332,45 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { + 3300E9FE2F69AA9500842B27 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, - 97C146F31CF9000F007C117D /* main.m in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + 3300EA1A2F69AB0B00842B27 /* VideoPlayerUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F7151F2826603EBD0028CB91 /* Sources */ = { + 331C807D294A63A400263BE5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 331585C52F36433100FACB51 /* VideoPlayerUITests.swift in Sources */, + 3300E9FC2F69AA5200842B27 /* TestClasses.swift in Sources */, + 3300E9FD2F69AA5200842B27 /* VideoPlayerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F7151F3626603ECA0028CB91 /* Sources */ = { + 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 335542AD2F364D080081D0DC /* VideoPlayerTests.swift in Sources */, - 335542B02F366B4F0081D0DC /* TestClasses.swift in Sources */, + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + 7884E8682EC3CC0700C636F2 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - F7151F3226603EBD0028CB91 /* PBXTargetDependency */ = { + 3300EA092F69AA9500842B27 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 97C146ED1CF9000F007C117D /* Runner */; - targetProxy = F7151F3126603EBD0028CB91 /* PBXContainerItemProxy */; + targetProxy = 3300EA082F69AA9500842B27 /* PBXContainerItemProxy */; }; - F7151F4026603ECA0028CB91 /* PBXTargetDependency */ = { + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 97C146ED1CF9000F007C117D /* Runner */; - targetProxy = F7151F3F26603ECA0028CB91 /* PBXContainerItemProxy */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -417,11 +394,181 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.videoPlayerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 3300EA0B2F69AA9500842B27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CURRENT_PROJECT_VERSION = 1; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Runner; + }; + name = Debug; + }; + 3300EA0C2F69AA9500842B27 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CURRENT_PROJECT_VERSION = 1; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Runner; + }; + name = Release; + }; + 3300EA0D2F69AA9500842B27 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CURRENT_PROJECT_VERSION = 1; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Runner; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.videoPlayerExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.videoPlayerExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.videoPlayerExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -451,6 +598,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -477,7 +625,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -507,6 +655,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -518,6 +667,9 @@ IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -528,22 +680,20 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.videoPlayerExample; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; }; @@ -552,140 +702,61 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.videoPlayerExample; PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - F7151F3326603EBD0028CB91 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = RunnerUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 6.0; - TEST_TARGET_NAME = Runner; - }; - name = Debug; - }; - F7151F3426603EBD0028CB91 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = RunnerUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 6.0; - TEST_TARGET_NAME = Runner; - }; - name = Release; - }; - F7151F4226603ECB0028CB91 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = RunnerTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 6.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; - }; - name = Debug; - }; - F7151F4326603ECB0028CB91 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = RunnerTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 6.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + 3300EA0A2F69AA9500842B27 /* Build configuration list for PBXNativeTarget "RunnerUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, + 3300EA0B2F69AA9500842B27 /* Debug */, + 3300EA0C2F69AA9500842B27 /* Release */, + 3300EA0D2F69AA9500842B27 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F7151F3526603EBD0028CB91 /* Build configuration list for PBXNativeTarget "RunnerUITests" */ = { + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( - F7151F3326603EBD0028CB91 /* Debug */, - F7151F3426603EBD0028CB91 /* Release */, + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F7151F4126603ECB0028CB91 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( - F7151F4226603ECB0028CB91 /* Debug */, - F7151F4326603ECB0028CB91 /* Release */, + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -693,7 +764,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000000..18d981003d68 --- /dev/null +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000000..f9b0d7c5ea15 --- /dev/null +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 6ef3fa75e7f3..ed9a888598f6 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,7 +1,7 @@ + version = "1.7"> @@ -57,20 +57,22 @@ + skipped = "NO" + parallelizable = "YES"> + skipped = "NO" + parallelizable = "YES"> @@ -102,7 +104,7 @@ - - diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000000..f9b0d7c5ea15 --- /dev/null +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.m b/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.m deleted file mode 100644 index fff9545d5055..000000000000 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.m +++ /dev/null @@ -1,17 +0,0 @@ -// 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. - -#include "AppDelegate.h" -#include "GeneratedPluginRegistrant.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [GeneratedPluginRegistrant registerWithRegistry:self]; - // Override point for customization after application launch. - return [super application:application didFinishLaunchingWithOptions:launchOptions]; -} - -@end diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.swift b/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000000..81eca8683601 --- /dev/null +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,20 @@ +// 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 Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } +} diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index 8122b0a0c2f2..d36b1fab2d9d 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,121 +1,122 @@ { "images" : [ { - "filename" : "Icon-App-20x20@2x.png", + "size" : "20x20", "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-20x20@3x.png", + "size" : "20x20", "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" }, { - "filename" : "Icon-App-29x29@1x.png", + "size" : "29x29", "idiom" : "iphone", - "scale" : "1x", - "size" : "29x29" + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" }, { - "filename" : "Icon-App-29x29@2x.png", + "size" : "29x29", "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-29x29@3x.png", + "size" : "29x29", "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" }, { - "filename" : "Icon-App-40x40@2x.png", + "size" : "40x40", "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-40x40@3x.png", + "size" : "40x40", "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" }, { - "filename" : "Icon-App-60x60@2x.png", + "size" : "60x60", "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-60x60@3x.png", + "size" : "60x60", "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" }, { - "filename" : "Icon-App-20x20@1x.png", + "size" : "20x20", "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" }, { - "filename" : "Icon-App-20x20@2x.png", + "size" : "20x20", "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-29x29@1x.png", + "size" : "29x29", "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" }, { - "filename" : "Icon-App-29x29@2x.png", + "size" : "29x29", "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-40x40@1x.png", + "size" : "40x40", "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" }, { - "filename" : "Icon-App-40x40@2x.png", + "size" : "40x40", "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-76x76@1x.png", + "size" : "76x76", "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" }, { - "filename" : "Icon-App-76x76@2x.png", + "size" : "76x76", "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" }, { - "filename" : "Icon-App-83.5x83.5@2x.png", + "size" : "83.5x83.5", "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" }, { + "size" : "1024x1024", "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { - "author" : "xcode", - "version" : 1 + "version" : 1, + "author" : "xcode" } } diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 zcmeHN2~<R zh`|8`A_PQ1nSu(UMFx?8j8PC!!VDphaL#`F42fd#7Vlc`zIE4n%Y~eiz4y1j|NDpi z?<@|pSJ-HM`qifhf@m%MamgwK83`XpBA<+azdF#2QsT{X@z0A9Bq>~TVErigKH1~P zRX-!h-f0NJ4Mh++{D}J+K>~~rq}d%o%+4dogzXp7RxX4C>Km5XEI|PAFDmo;DFm6G zzjVoB`@qW98Yl0Kvc-9w09^PrsobmG*Eju^=3f?0o-t$U)TL1B3;sZ^!++3&bGZ!o-*6w?;oOhf z=A+Qb$scV5!RbG+&2S}BQ6YH!FKb0``VVX~T$dzzeSZ$&9=X$3)_7Z{SspSYJ!lGE z7yig_41zpQ)%5dr4ff0rh$@ky3-JLRk&DK)NEIHecf9c*?Z1bUB4%pZjQ7hD!A0r-@NF(^WKdr(LXj|=UE7?gBYGgGQV zidf2`ZT@pzXf7}!NH4q(0IMcxsUGDih(0{kRSez&z?CFA0RVXsVFw3^u=^KMtt95q z43q$b*6#uQDLoiCAF_{RFc{!H^moH_cmll#Fc^KXi{9GDl{>%+3qyfOE5;Zq|6#Hb zp^#1G+z^AXfRKaa9HK;%b3Ux~U@q?xg<2DXP%6k!3E)PA<#4$ui8eDy5|9hA5&{?v z(-;*1%(1~-NTQ`Is1_MGdQ{+i*ccd96ab$R$T3=% zw_KuNF@vI!A>>Y_2pl9L{9h1-C6H8<)J4gKI6{WzGBi<@u3P6hNsXG=bRq5c+z;Gc3VUCe;LIIFDmQAGy+=mRyF++u=drBWV8-^>0yE9N&*05XHZpPlE zxu@?8(ZNy7rm?|<+UNe0Vs6&o?l`Pt>P&WaL~M&#Eh%`rg@Mbb)J&@DA-wheQ>hRV z<(XhigZAT z>=M;URcdCaiO3d^?H<^EiEMDV+7HsTiOhoaMX%P65E<(5xMPJKxf!0u>U~uVqnPN7T!X!o@_gs3Ct1 zlZ_$5QXP4{Aj645wG_SNT&6m|O6~Tsl$q?nK*)(`{J4b=(yb^nOATtF1_aS978$x3 zx>Q@s4i3~IT*+l{@dx~Hst21fR*+5}S1@cf>&8*uLw-0^zK(+OpW?cS-YG1QBZ5q! zgTAgivzoF#`cSz&HL>Ti!!v#?36I1*l^mkrx7Y|K6L#n!-~5=d3;K<;Zqi|gpNUn_ z_^GaQDEQ*jfzh;`j&KXb66fWEk1K7vxQIMQ_#Wu_%3 z4Oeb7FJ`8I>Px;^S?)}2+4D_83gHEq>8qSQY0PVP?o)zAv3K~;R$fnwTmI-=ZLK`= zTm+0h*e+Yfr(IlH3i7gUclNH^!MU>id$Jw>O?2i0Cila#v|twub21@e{S2v}8Z13( zNDrTXZVgris|qYm<0NU(tAPouG!QF4ZNpZPkX~{tVf8xY690JqY1NVdiTtW+NqyRP zZ&;T0ikb8V{wxmFhlLTQ&?OP7 z;(z*<+?J2~z*6asSe7h`$8~Se(@t(#%?BGLVs$p``;CyvcT?7Y!{tIPva$LxCQ&4W z6v#F*);|RXvI%qnoOY&i4S*EL&h%hP3O zLsrFZhv&Hu5tF$Lx!8(hs&?!Kx5&L(fdu}UI5d*wn~A`nPUhG&Rv z2#ixiJdhSF-K2tpVL=)5UkXRuPAFrEW}7mW=uAmtVQ&pGE-&az6@#-(Te^n*lrH^m@X-ftVcwO_#7{WI)5v(?>uC9GG{lcGXYJ~Q8q zbMFl7;t+kV;|;KkBW2!P_o%Czhw&Q(nXlxK9ak&6r5t_KH8#1Mr-*0}2h8R9XNkr zto5-b7P_auqTJb(TJlmJ9xreA=6d=d)CVbYP-r4$hDn5|TIhB>SReMfh&OVLkMk-T zYf%$taLF0OqYF?V{+6Xkn>iX@TuqQ?&cN6UjC9YF&%q{Ut3zv{U2)~$>-3;Dp)*(? zg*$mu8^i=-e#acaj*T$pNowo{xiGEk$%DusaQiS!KjJH96XZ-hXv+jk%ard#fu=@Q z$AM)YWvE^{%tDfK%nD49=PI|wYu}lYVbB#a7wtN^Nml@CE@{Gv7+jo{_V?I*jkdLD zJE|jfdrmVbkfS>rN*+`#l%ZUi5_bMS<>=MBDNlpiSb_tAF|Zy`K7kcp@|d?yaTmB^ zo?(vg;B$vxS|SszusORgDg-*Uitzdi{dUV+glA~R8V(?`3GZIl^egW{a919!j#>f` znL1o_^-b`}xnU0+~KIFLQ)$Q6#ym%)(GYC`^XM*{g zv3AM5$+TtDRs%`2TyR^$(hqE7Y1b&`Jd6dS6B#hDVbJlUXcG3y*439D8MrK!2D~6gn>UD4Imctb z+IvAt0iaW73Iq$K?4}H`7wq6YkTMm`tcktXgK0lKPmh=>h+l}Y+pDtvHnG>uqBA)l zAH6BV4F}v$(o$8Gfo*PB>IuaY1*^*`OTx4|hM8jZ?B6HY;F6p4{`OcZZ(us-RVwDx zUzJrCQlp@mz1ZFiSZ*$yX3c_#h9J;yBE$2g%xjmGF4ca z&yL`nGVs!Zxsh^j6i%$a*I3ZD2SoNT`{D%mU=LKaEwbN(_J5%i-6Va?@*>=3(dQy` zOv%$_9lcy9+(t>qohkuU4r_P=R^6ME+wFu&LA9tw9RA?azGhjrVJKy&8=*qZT5Dr8g--d+S8zAyJ$1HlW3Olryt`yE zFIph~Z6oF&o64rw{>lgZISC6p^CBer9C5G6yq%?8tC+)7*d+ib^?fU!JRFxynRLEZ zj;?PwtS}Ao#9whV@KEmwQgM0TVP{hs>dg(1*DiMUOKHdQGIqa0`yZnHk9mtbPfoLx zo;^V6pKUJ!5#n`w2D&381#5#_t}AlTGEgDz$^;u;-vxDN?^#5!zN9ngytY@oTv!nc zp1Xn8uR$1Z;7vY`-<*?DfPHB;x|GUi_fI9@I9SVRv1)qETbNU_8{5U|(>Du84qP#7 z*l9Y$SgA&wGbj>R1YeT9vYjZuC@|{rajTL0f%N@>3$DFU=`lSPl=Iv;EjuGjBa$Gw zHD-;%YOE@<-!7-Mn`0WuO3oWuL6tB2cpPw~Nvuj|KM@))ixuDK`9;jGMe2d)7gHin zS<>k@!x;!TJEc#HdL#RF(`|4W+H88d4V%zlh(7#{q2d0OQX9*FW^`^_<3r$kabWAB z$9BONo5}*(%kx zOXi-yM_cmB3>inPpI~)duvZykJ@^^aWzQ=eQ&STUa}2uT@lV&WoRzkUoE`rR0)`=l zFT%f|LA9fCw>`enm$p7W^E@U7RNBtsh{_-7vVz3DtB*y#*~(L9+x9*wn8VjWw|Q~q zKFsj1Yl>;}%MG3=PY`$g$_mnyhuV&~O~u~)968$0b2!Jkd;2MtAP#ZDYw9hmK_+M$ zb3pxyYC&|CuAbtiG8HZjj?MZJBFbt`ryf+c1dXFuC z0*ZQhBzNBd*}s6K_G}(|Z_9NDV162#y%WSNe|FTDDhx)K!c(mMJh@h87@8(^YdK$&d*^WQe8Z53 z(|@MRJ$Lk-&ii74MPIs80WsOFZ(NX23oR-?As+*aq6b?~62@fSVmM-_*cb1RzZ)`5$agEiL`-E9s7{GM2?(KNPgK1(+c*|-FKoy}X(D_b#etO|YR z(BGZ)0Ntfv-7R4GHoXp?l5g#*={S1{u-QzxCGng*oWr~@X-5f~RA14b8~B+pLKvr4 zfgL|7I>jlak9>D4=(i(cqYf7#318!OSR=^`xxvI!bBlS??`xxWeg?+|>MxaIdH1U~#1tHu zB{QMR?EGRmQ_l4p6YXJ{o(hh-7Tdm>TAX380TZZZyVkqHNzjUn*_|cb?T? zt;d2s-?B#Mc>T-gvBmQZx(y_cfkXZO~{N zT6rP7SD6g~n9QJ)8F*8uHxTLCAZ{l1Y&?6v)BOJZ)=R-pY=Y=&1}jE7fQ>USS}xP#exo57uND0i*rEk@$;nLvRB@u~s^dwRf?G?_enN@$t* zbL%JO=rV(3Ju8#GqUpeE3l_Wu1lN9Y{D4uaUe`g>zlj$1ER$6S6@{m1!~V|bYkhZA z%CvrDRTkHuajMU8;&RZ&itnC~iYLW4DVkP<$}>#&(`UO>!n)Po;Mt(SY8Yb`AS9lt znbX^i?Oe9r_o=?})IHKHoQGKXsps_SE{hwrg?6dMI|^+$CeC&z@*LuF+P`7LfZ*yr+KN8B4{Nzv<`A(wyR@!|gw{zB6Ha ziwPAYh)oJ(nlqSknu(8g9N&1hu0$vFK$W#mp%>X~AU1ay+EKWcFdif{% z#4!4aoVVJ;ULmkQf!ke2}3hqxLK>eq|-d7Ly7-J9zMpT`?dxo6HdfJA|t)?qPEVBDv z{y_b?4^|YA4%WW0VZd8C(ZgQzRI5(I^)=Ub`Y#MHc@nv0w-DaJAqsbEHDWG8Ia6ju zo-iyr*sq((gEwCC&^TYBWt4_@|81?=B-?#P6NMff(*^re zYqvDuO`K@`mjm_Jd;mW_tP`3$cS?R$jR1ZN09$YO%_iBqh5ftzSpMQQtxKFU=FYmP zeY^jph+g<4>YO;U^O>-NFLn~-RqlHvnZl2yd2A{Yc1G@Ga$d+Q&(f^tnPf+Z7serIU};17+2DU_f4Z z@GaPFut27d?!YiD+QP@)T=77cR9~MK@bd~pY%X(h%L={{OIb8IQmf-!xmZkm8A0Ga zQSWONI17_ru5wpHg3jI@i9D+_Y|pCqVuHJNdHUauTD=R$JcD2K_liQisqG$(sm=k9;L* z!L?*4B~ql7uioSX$zWJ?;q-SWXRFhz2Jt4%fOHA=Bwf|RzhwqdXGr78y$J)LR7&3T zE1WWz*>GPWKZ0%|@%6=fyx)5rzUpI;bCj>3RKzNG_1w$fIFCZ&UR0(7S?g}`&Pg$M zf`SLsz8wK82Vyj7;RyKmY{a8G{2BHG%w!^T|Njr!h9TO2LaP^_f22Q1=l$QiU84ao zHe_#{S6;qrC6w~7{y(hs-?-j?lbOfgH^E=XcSgnwW*eEz{_Z<_Gw7hsN~k)CYt4dQDFxbs5*_&e@Hj)wtt(&JE<3Eq*D z;_gQLvqXoKv=I*gWqM9C(Tvu0>=?hTbOp9!6k6AF;>f6|S5%jGEE}TA9h)e`Yuiu8 d7)l?o1NFcJg%EAfM$P~L002ovPDHLkV1g^Dnv?(l delta 550 zcmV+>0@?ki0<;8>8Gi-<0051N9Sr~g00DDSM?wIu&K&6g00HhvL_t(I5v`QFOB_)Y z#?QI;j_a;jjf#Z$YJ7mH(xecJU?W)A`9CN~KrBV85C}GDQ=|;GDFPNjtWty!L{u=? zh>8yo%^GE+J9o~_IZFoiamQVQXP7%LzTbT3F@uf+9x&7cvVV%GdjTaC;zf>@mq<=3 z!c<%*UT)@yJ|0BK6~d4Jx-*KV`ZQ(@VyUPupum=XhInNG#Z_k-X|hK{B}~9IfiWx} zLD5QY6Vm)p0NrWymdkrHPN5Vgwd>5>4HI1=@PA+e^rq~CEj|n2X`??)0mUI*D{KBn zjv{V=y5X9|X@3grkpcXC6oou4ML~ezCc2EtnsQTB4tWNg?4bkf;hG7IMfhgNI(FV5 zGs4|*GyMTIY0$B=_*mso9+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f<+$JJpcdz delta 1274 zcmV@pi1MCNO0zH7s z{8#}P0)7Ba8DqYf&QgSne>X__O83t$NZM4&R0{XJq|x}oAU?tcfC@|eNz$04T}34& z8DJf78R&>*Zz`k$q{`#gfGHnx7nlH^G{y`jfER)1<_fNi<9aM%_zrm1C`yPkKma(+ ztQ;y*CR2bbBYz>zG*SVsfpkGU(q>uHZf3iogk_%#9E|5SWeHrmAo>P;ejX7mwq#*} zW25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+X$F_KMdb6sRz!~7K zkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&IDi_4_D!s#MVXp|-XhH;H z#&@_;oApJVd}}5O@b=X_gJboD^-fM@6|#V@sA%X)Rlkd}3MLH0dGXGG&-HX|aD~|M zC)W#H7=H?AbtdaV#dGpubj_O^J-SlWpVNv-5(;wR%mvE9`Qaqo>03b&##eNNf=m#B z9@^lsd8tJ;BvI86kNV zc~0CY(7V{s+h%cWG|y=gt|q`z$l<(@qU=i?9q#uz`G?PgDMK!VMGidHZt*N+1L0ZI zFkH=mFtywc6rJ}C_?)=m)18V!ZQ`*-j(D`gCFK|nt#{bk*%%zuQ7o7kvJgA^=(^7b zzkm5GZ;jxRn{Wup8IOUx8D4uh&(=Ox-7$a;U><*5L^!% zxRlw)vAbh;sdlR||&e}8_8%)c2Fwy=F& zH|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}Jb#viX>Oi;kBKp1x_fc0#UIbIeSJ^EkWFox zijdim{ojmn@#7EC*aY;fC0W*WN+DmQtE06pNK3SfZ^#@2K`6RgEuU_KwJTQ>E?Yar zc_9e#I$F8%>kuy-JI6ocSsYvQGbsxUCx04(w1z-pMRz9`kH5smmF@WHEG?dcYkv){ zV?kn3XB$_3zr*h1Uow)(<5)w5;3Wh1jHI)`ZlXp&!yEV{Y_~@;?CLwq;4eeaGOe6( zEsSSbwSGD0-`dUUGM-ShrilfUZt{^9lhT*&z4_x{-O{Rv#2V9EI}xb^~1iQe@7)8g(7UZ4B@ z|4zgB>+<*9=;^^)>d)H7pzGjuM>Jnezy3`@G2r z?{~a!Fj;`+8Gq^x2Jl;?IEV8)=fG217*|@)CCYgFze-x?IFODUIA>nWKpE+bn~n7; z-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGrXPIdeRE&b2Thd#{MtDK$ zpx*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{HY|nMnXd&JOovdH8X7V5?1^Y=vK~!ko-J4%*6h$1z_l{zTu}>N$Y77dN z(jrej`JjnWDIm3fj{j>}J%k>VpVM zMunJ?rSR(^OuXDgm2)PP%Lw)()f=TG1B~ScNUFa-({vjDk;dweRiFe?w-6Qho(O1_ zv!(2WV2ZhFC1SqPt}wig>|5C zrh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)yRAZ>eDe#*r`yDAVgB_R* zLB*MAc8_?!g7#WjJA zNf*S~m|;6j!A4w$ko3-C-D?f3QiNoOywjDS!K#57`tfjzaqOr$8SWAG-j-YxSgf$JEO3s=FUciZf^T1|d zdlv{cAz-VWC8|7CEV-;Wb6Vzrt)AkMWOkTe+ZBtZc)X@JVej7(9Qa3q{qv~yUkR%F zgV1zYf*?t3UMs{3OLcKP1Z6m=c&$AQlc=-2K7W6gDCe$axhg&7qBi(Mc=7aOu!`S0t-8gf#ZQK=m_VkJUaO-56fxM&#U}>8ioQPQ~9Xan>71|{&AvQNWKoV z(G*V$cD|NEzl(OC?HDr#Cqt&AdqP30PY2p48uOaogm_>#S_o_EvD7yf32g)`v6|+S zX@6g&FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zmZQj(aA_HeBY&OC^ zjj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5KhX*|AU4QE#~SgPzO zXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&f`88QO)34l90xUaIcrN!i^H~!$VzZpscObr z3PVpq)=3d6{*YiK7;ZBp6>?f?;EtO_0nMBTIICp>R=3LV88-e@FYC%|E0}pO*gziiBLfe{%Kc@qo)p8GVT7N0* z4M_Lw1tG5n(zZ5$P*4jGZTlL!ZFJhUpIRgx=rAmS%;sT8&)W?`?kC{()PbwS3u#;G z5xOo6ZIjcs{+JdGz5K@sSo14D=FzK={`?LQo~r_Pel@s?4}xpcmx|K19GZo;!D-un zE}eyzVa=&&Sk`n2mb~yf2+vl6yMJIGxIEq&SWRe)op$60@i246YB3>oE(3e2L-^}4_|K@$pmRb!NBBQzlNb;zJF zMc&w;%{On(HbQ| z@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)yI9C9*oUga6 z=hxw6QasLPnee@3^pcqGR@o#L@+8nuG5suzgA#ZC&s z|EF-4U3#nH>r^ME@~U|CYWRjZ`yN=c=Fr}#_Mgg|JQ_F~MDJ{2FSyz9PS&T@VVxu? zJm1Eneyq~b<9m$74O-iHG@!Fk->^qks+0-Tx2T+XVGXw8twMc3$0rG>+mL)4wdl~R g1N9*XHQJT-A9HGq3eLdY0ssI207*qoM6N<$f)O(SQ~&?~ diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118dda48d71e01fcb589a74d069c5d7cb5..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmcY2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~g5kS`djJ3c delta 1014 zcmV*Z%cCe|Ky#N6OdYPD1DGfinGF##;07BPDy$fz({%k7zJV=01O#K z=|NTR39NyVgTVMzbvyw=V8BQ^20R3~6xvV{d46VD* zR9nhU01J#6NqMPrrB8cABapAFa= z`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#%Enr|^CWdVV!-4*Y_7rFv zlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br41c(0^;RmcE^tRgds9Z&8hKi= zcKAYL;9Lx6i;lps;xDq`;I4K{zDBEA0j=ca%(UaZ^JThn2CV|_Pl2;B96VFv)Rf2t z%PnxaEcWz-+|yxe=6OZ+TI0dnTP=HgLyBeJX=bZ{9ZiP$!~;)Hi_Rv<2T%y1?BKb+ zkiESjp?|HN*EQj_#)s*NZvW`;FEMwvTV79r(`E7ec!|kH=*oFeVBl&Qp6&^Fsyl30 z$u-+x<;Bl0CfwU;+0g8P&wgLx+sTA2EtZ>G3;|*)hG({h?CA-Ys=l7o?Y-5-F)=S* zIa%VwWI|`ou#mvIKy2;IvwM@+y~XFyn8tTw-G7c`@Zl5i^`8l&mlL{jhO&duh&h|% zw;xV1(6-=>lrmk$4clO3ePuq`9Wr=F#2*VHFb11%VdlH9IC*4@oo|fr*X$yJH6*TP z;Fg`qdbL$@eCS+>x6TV4ALi1JrwKQ0BQDN!_iY;)*|&?XLXO0VpiU)azS@j|*ol|7 zH-GVB^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy0um=e3$K3i6K{U_ z4K!EX-}iV`2<;=$?g5M=KQbZ z{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28t zr{Vje;QNTz`dG&Jz0~Ek&fGS;ewJk?q)Wl)*d4Shg})NFkk>!9ulk z7Sg|cp>aA3DSxs5c#&|SP7x(23km$G&R#YR$;LcN;wDeG6&iz}gG67Ou;4leX8ajON$s9Ws;MYKzN?jV6R f6TH`8dB5KcU62iO+lIoL00000NkvXXu0mjfm8xrB{?psZQs88ZaedDoagm^KF{a*>G|dJWRSe^I$DNW008I^+;Kjt z>9p3GNR^I;v>5_`+91i(*G;u5|L+Bu6M=(afLjtkya#yZ175|z$pU~>2#^Z_pCZ7o z1c6UNcv2B3?; zX%qdxCXQpdKRz=#b*q0P%b&o)5ZrNZt7$fiETSK_VaY=mb4GK`#~0K#~9^ zcY!`#Af+4h?UMR-gMKOmpuYeN5P*RKF!(tb`)oe0j2BH1l?=>y#S5pMqkx6i{*=V9JF%>N8`ewGhRE(|WohnD59R^$_36{4>S zDFlPC5|k?;SPsDo87!B{6*7eqmMdU|QZ84>6)Kd9wNfh90=y=TFQay-0__>=<4pk& zYDjgIhL-jQ9o>z32K)BgAH+HxamL{ZL~ozu)Qqe@a`FpH=oQRA8=L-m-1dam(Ix2V z?du;LdMO+ooBelr^_y4{|44tmgH^2hSzPFd;U^!1p>6d|o)(-01z{i&Kj@)z-yfWQ)V#3Uo!_U}q3u`(fOs`_f^ueFii1xBNUB z6MecwJN$CqV&vhc+)b(p4NzGGEgwWNs z@*lUV6LaduZH)4_g!cE<2G6#+hJrWd5(|p1Z;YJ7ifVHv+n49btR}dq?HHDjl{m$T z!jLZcGkb&XS2OG~u%&R$(X+Z`CWec%QKt>NGYvd5g20)PU(dOn^7%@6kQb}C(%=vr z{?RP(z~C9DPnL{q^@pVw@|Vx~@3v!9dCaBtbh2EdtoNHm4kGxp>i#ct)7p|$QJs+U z-a3qtcPvhihub?wnJqEt>zC@)2suY?%-96cYCm$Q8R%-8$PZYsx3~QOLMDf(piXMm zB=<63yQk1AdOz#-qsEDX>>c)EES%$owHKue;?B3)8aRd}m~_)>SL3h2(9X;|+2#7X z+#2)NpD%qJvCQ0a-uzZLmz*ms+l*N}w)3LRQ*6>|Ub-fyptY(keUxw+)jfwF5K{L9 z|Cl_w=`!l_o><384d&?)$6Nh(GAm=4p_;{qVn#hI8lqewW7~wUlyBM-4Z|)cZr?Rh z=xZ&Ol>4(CU85ea(CZ^aO@2N18K>ftl8>2MqetAR53_JA>Fal`^)1Y--Am~UDa4th zKfCYpcXky$XSFDWBMIl(q=Mxj$iMBX=|4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1i)CYaajr delta 1916 zcmV-?2ZQ*)1%MBb8Gi-<0042w*=zs+2S-UnK~#9!?cG~!6jc}p@R>r@2Yv8@p?G^R zA|eDZ7{rR#1}sop6nca3fIb-?ED*6VwIFJZ!6Hy8w-yO8C@}~_05Gdr_$c4kiU&u$4j+xhLc-+x@XJ4X;S3;@U>VSc^? zQ-oQ8>A;-DT*34?AXhQJV-8~KF(sHg2eU|P;DUxQ_a|dEVEzDijZ2tj%oNrIBN{~& z>4Wk1F-%L`6DpV>Mpo}D4uPcWBCG2czh1jBlh{hu3!B5d1(snX=85|q1gQs{g(mmw zFhk?t-J03}-hU3m?2B8tH)4^yF(WhqGZlM3=9Ibs$%U1wWzcss*_c0=v_+^bfb`kB zFsI`d;ElwiU%frgRB%qBjn@!0U2zZehBn|{%uNIKBA7n=zE`nnwTP85{g;8AkYxA6 z8>#muXa!G>xH22D1I*SiD~7C?7Za+9y7j1SHiuSkK7ajvv#C@#-AyB-fbF?o#FaMR zJDRHO-oJwI(P;@j{Y`?E22zh%eMW-!PD-%va?p$yjUHg_5SW97D|{EkK-iW`L3pv- z4~1!@=&&EA9Pq)SV*$7tP|P@nrw{)Za}U8S%a)eF!V;W0J$@*|lp087uOFr#^24%U zq{wnjs(&o%xPaiU&xXU>0kGeNGuuGQ5tmf`yC)E6~>g8M!1m77Jdtm6rS zdzt5cn`N-@5mj#acH657tGvPJ!hP*GaHk;W`bL8(b&Ca)IkqSle-( z3~MW{(_wAHbpxy|xNd>XIIf#uGm7gr*o@)25q~x#xNe2D9M{dTmf~6gTbo6&mf^a+ zVlBhOVG}?}yia48X#p0jM&V#m55h z>JI^E`!oE3BU#}Dmwv9b)dtvg=lWr4mmi7``{5;>DN=7szV*Yi2Ys;Wj0F8;T@+3# zmw&G0iEAwC?DK@aT)GHRLhnz2WCvf3Ba;o=aY72{Asu5MEjGOY4O# zGgz@@J;q*0`kd2n8I3BeNuMmYZf{}pg=jTdTCrIIYuW~luKecn+E-pHY%ohyj1YuzG;)ZUq^`O?8S;53Ckoo?tVMn}05B zGT>6qU~R)?+l5}(M8IV|KHPZupz$m}u(sinl_#h8mK+a2-Z%PTS>T7;ufv262{vDp zBPZ@%`$0U4OAyGe*$BiPV-R;#+kY^w3*gq;1F)dJExc@8xT3fim)*FL!`r-_`hf}T zm`;Gax^BpsUI#+qYM8gWQ+@FWuz%ui+@N9%I0E}YCkWG)gIKl^a_2UIFntXIALItu z){pJS0}s~#9D>DGkhi=8gcoW+oYRQ78$!9MG7ea_7ufbMoah0Lz%Jbl!qW>uoV5yZ z*MeBOUIpGb5LmIV2XpaNDJ?A`1ltWTyk;i|kG}@u%nv~uIJ^uvgD3GS^%*ikdW6-!VFUU?JVZc2)4cMs@z;op$113mAD>fO*E%TZ|nArgH8#-g2!+%8FHwf;15T1O3 z%f6cwxNr>!C5<2yuQisJ*MabSJ(PUB7y5jX85K+)O)e+)5WQGt3uMU^^;zI|wjF^d zm+XKkwXKj}(_$#kENzAHZ*GT%JtreABF(BL3)s(I;&le^eK!%ZnImYePe^V6%BS#_+}3{E!Zyy%yt6N zc_MCu=*%YGbTRt+EScu(c1Sd(7eueRKax2l_JFm)Uc-z{HH8dq4-*++uSFzp1^;03 zwN8FSfgg=)5whnQIg+Indk!;R^%|;o+Ah*Vw#K~;+&BY@!gZ`W9baLF>6#BM(F}EX ze-`F=f_@`A7+Q&|QaZ??Txp_dB#lg!NH=t3$G8&06MFhwR=Iu*Im0s_b2B@|nW>X} zsy~m#EW)&6E&!*0%}8UAS)wjt+A(io#wGI@Z2S+Ms1Cxl%YVE80000+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f<+$JJpcdz delta 1274 zcmV@pi1MCNO0zH7s z{8#}P0)7Ba8DqYf&QgSne>X__O83t$NZM4&R0{XJq|x}oAU?tcfC@|eNz$04T}34& z8DJf78R&>*Zz`k$q{`#gfGHnx7nlH^G{y`jfER)1<_fNi<9aM%_zrm1C`yPkKma(+ ztQ;y*CR2bbBYz>zG*SVsfpkGU(q>uHZf3iogk_%#9E|5SWeHrmAo>P;ejX7mwq#*} zW25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+X$F_KMdb6sRz!~7K zkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&IDi_4_D!s#MVXp|-XhH;H z#&@_;oApJVd}}5O@b=X_gJboD^-fM@6|#V@sA%X)Rlkd}3MLH0dGXGG&-HX|aD~|M zC)W#H7=H?AbtdaV#dGpubj_O^J-SlWpVNv-5(;wR%mvE9`Qaqo>03b&##eNNf=m#B z9@^lsd8tJ;BvI86kNV zc~0CY(7V{s+h%cWG|y=gt|q`z$l<(@qU=i?9q#uz`G?PgDMK!VMGidHZt*N+1L0ZI zFkH=mFtywc6rJ}C_?)=m)18V!ZQ`*-j(D`gCFK|nt#{bk*%%zuQ7o7kvJgA^=(^7b zzkm5GZ;jxRn{Wup8IOUx8D4uh&(=Ox-7$a;U><*5L^!% zxRlw)vAbh;sdlR||&e}8_8%)c2Fwy=F& zH|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}Jb#viX>Oi;kBKp1x_fc0#UIbIeSJ^EkWFox zijdim{ojmn@#7EC*aY;fC0W*WN+DmQtE06pNK3SfZ^#@2K`6RgEuU_KwJTQ>E?Yar zc_9e#I$F8%>kuy-JI6ocSsYvQGbsxUCx04(w1z-pMRz9`kH5smmF@WHEG?dcYkv){ zV?kn3XB$_3zr*h1Uow)(<5)w5;3Wh1jHI)`ZlXp&!yEV{Y_~@;?CLwq;4eeaGOe6( zEsSSbwSGD0-`dUUl014$1_O8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ1N;Pr- delta 1891 zcmV-p2b}oI1m_Nr8Gi-<0052=@~r>>2QEoOK~#9!?VW3E6jc<*XLh$yKNt;)Mial3 z7z%<>zxaV5DhMs*(b6YIW1=KP6Jj(m21QYbiJ}su&;o5EN=$%gptMj6p|(7#AOTUJ zlt8fsX(iGq?ZQ50=XmbU+~w|cmz~|6$KBbz$-g^IcV>Hk`+q<8%-p?uMi3G-0B~!5 ze-yPCwFPw?HGmpMc~K)7BCq;C528+>zC*o^8h^XKC)IFgkv#xzm!ewK7j|kRa9dFo zC>MoDSR@P2#cWSU{i1oH5K2-Xb3jRz>|h7VOh0K` zhq^--L3H}A0r)nr z;Tr|-kPjB1s=ItpnS`oT%|U=a4oK-ZFIE^YBLH{u2#~@%%D^K)$`9*Tg(~9M-B+Zj z;~H?4LVsEt0eFtN4&>H(DZ@KpI6RhBKLL21CxC`J&m4Gc^9wwMZU#7SR1+KtuhSZM z+yLY}Vekzw6T_ApfEkuB_yU;e&a)L@rX~z70A_N+upOXN!qygmPDmKG0d%7CECcAI zgkd>ArzH$a0XjKsO$X@IgkcH5Y;m3`0G*yNOn(KK4GF_EfL4aB5i1j9o&Z{vFk~k> z&?@K2jQcJO%W!cddG(_DyfSoO55bUMHtbDF8DPkwF^~Ql#Eq4w15k{h%ML5Ar&pzi zl-D7v8kQXQ!&RRgKCW#5DZB$$6?mjWm50rRw*ukK>P-GkA|k69h{NARc>e}uLx+U4 z0DqE>7pa}9Fez+Vc-3jb`%i^uulglFoMzAVR|2%rf= zf#;74FXF^Ku_4+G&-4$KVy%YP>%2rxu2VG_cdm?XRjEhF&wPXJ># z_Q2+jGs=l~Fyx#MmGn+PZ0`@kBfGp|fO;Vov<$;z`(+sSZ7;Y=zXaF(8rb@CuQDV^ zq3i(2LfqO%AS!Ss>V%j7%>{6mtbYQrtQK5V4InPq0NZSaXv+f2U=&2}Z6OvkBfNHi z{LSaVJ!d5dC2K*ft_L^DRk;boQhOoVw!~Kt#0b2vd%!(&DF|~u1F@nG#LA5zR&7Fv z4GKgXooMSKb1g)6Obo-rgpuEP20T;W0Aa>55KC4gtQrKkAq-Hgs@FigV1GG8+rQ=z z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRet3L_uNyQ*c zE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=kyx=~RKa4{iT zm{_>_vSCm?$Ej=i6@=m%@PE9t1zZaoM}@2|h!#1K02~31S_I<0ZV=|K0}n!RRX6Ac zXmMf*5P-dLW}WPVsCKq)-x(0*txpZ2xrv3cxJ%l=7lpoNCyG< zK92ySAcmb-3m&}s@VwXv9(0#p<>B-5$bMxT;rk;OmENa6eM4D&LVo~01soUL39?R{ zyFLt3m|v?rCK7#KNu9E9Q4KV-pEUv^{rrClE&X&9I4-e7%pu_31#zGTOfC=ab%w20R*zBP+uT#l2{a~~~0wuG%6 zco*tVxK&e>%SJj*K!2tq*_h&ES5S9@TKb8WzpK;`&b9dNdxh4S)z%Q)o`aYWUh}9L z(`p!#WO5IxI|nf?yz{90R93Ed6@2qim*}Zjj$H&Esd`?JsFJUnDfiAgF_eYiWR3GC z>M9SHDylEWrA(%mfm~;u7OU9!Wz^!7Z%jZF zi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i0WYBP d*#0Ks^FNSabJA*5${_#%002ovPDHLkV1gB0Vle;! diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih&6y64q8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f@rA97ytkO literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih&6y64q8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f@rA97ytkO literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CGU9f}Q*8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000jJBgitF5mAp-i>4+KS_oR{|13AP->1TD4=w)g|)JHOx|a2Wk1Va z!k)vP$UcQ#mdj%wNQoaJ!w>jv_6&JPyutpQps?s5dmDQ>`%?Bvj>o<%kYG!YW6H-z zu`g$@mp`;qDR!51QaS}|ZToSuAGcJ7$2HF0z`ln4t!#Yg46>;vGG9N9{V@9z#}6v* zfP?}r6b{*-C*)(S>NECI_E~{QYzN5SXRmVnP<=gzP+_Sp(Aza_hKlZ{C1D&l*(7IKXxQC1Z9#6wx}YrGcn~g%;icdw>T0Rf^w0{ z$_wn1J+C0@!jCV<%Go5LA45e{5gY9PvZp8uM$=1}XDI+9m7!A95L>q>>oe0$nC->i zeexUIvq%Uk<-$>DiDb?!In)lAmtuMWxvWlk`2>4lNuhSsjAf2*2tjT`y;@d}($o)S zn(+W&hJ1p0xy@oxP%AM15->wPLp{H!k)BdBD$toBpJh+crWdsNV)qsHaqLg2_s|Ih z`8E9z{E3sA!}5aKu?T!#enD(wLw?IT?k-yWVHZ8Akz4k5(TZJN^zZgm&zM28sfTD2BYJ|Fde3Xzh;;S` z=GXTnY4Xc)8nYoz6&vF;P7{xRF-{|2Xs5>a5)@BrnQ}I(_x7Cgpx#5&Td^4Q9_FnQ zX5so*;#8-J8#c$OlA&JyPp$LKUhC~-e~Ij!L%uSMu!-VZG7Hx-L{m2DVR2i=GR(_% zCVD!4N`I)&Q5S`?P&fQZ=4#Dgt_v2-DzkT}K(9gF0L(owe-Id$Rc2qZVLqI_M_DyO z9@LC#U28_LU{;wGZ&))}0R2P4MhajKCd^K#D+JJ&JIXZ_p#@+7J9A&P<0kdRujtQ_ zOy>3=C$kgi6$0pW06KaLz!21oOryKM3ZUOWqppndxfH}QpgjEJ`j7Tzn5bk6K&@RA?vl##y z$?V~1E(!wB5rH`>3nc&@)|#<1dN2cMzzm=PGhQ|Yppne(C-Vlt450IXc`J4R0W@I7 zd1e5uW6juvO%ni(WX7BsKx3MLngO7rHO;^R5I~0^nE^9^E_eYLgiR9&KnJ)pBbfno zSVnW$0R+&6jOOsZ82}nJ126+c|%svPo;TeUku<2G7%?$oft zyaO;tVo}(W)VsTUhq^XmFi#2z%-W9a{7mXn{uzivYQ_d6b7VJG{77naW(vHt-uhnY zVN#d!JTqVh(7r-lhtXVU6o})aZbDt_;&wJVGl2FKYFBFpU-#9U)z#(A%=IVnqytR$SY-sO( z($oNE09{D^@OuYPz&w~?9>Fl5`g9u&ecFGhqX=^#fmR=we0CJw+5xna*@oHnkahk+ z9aWeE3v|An+O5%?4fA&$Fgu~H_YmqR!yIU!bFCk4!#pAj%(lI(A5n)n@Id#M)O9Yx zJU9oKy{sRAIV3=5>(s8n{8ryJ!;ho}%pn6hZKTKbqk=&m=f*UnK$zW3YQP*)pw$O* zIfLA^!-bmBl6%d_n$#tP8Zd_(XdA*z*WH|E_yILwjtI~;jK#v-6jMl^?<%Y%`gvpwv&cFb$||^v4D&V=aNy?NGo620jL3VZnA%s zH~I|qPzB~e(;p;b^gJr7Ure#7?8%F0m4vzzPy^^(q4q1OdthF}Fi*RmVZN1OwTsAP zn9CZP`FazX3^kG(KodIZ=Kty8DLTy--UKfa1$6XugS zk%6v$Kmxt6U!YMx0JQ)0qX*{CXwZZk$vEROidEc7=J-1;peNat!vS<3P-FT5po>iE z!l3R+<`#x|+_hw!HjQGV=8!q|76y8L7N8gP3$%0kfush|u0uU^?dKBaeRSBUpOZ0c z62;D&Mdn2}N}xHRFTRI?zRv=>=AjHgH}`2k4WK=#AHB)UFrR-J87GgX*x5fL^W2#d z=(%K8-oZfMO=i{aWRDg=FX}UubM4eotRDcn;OR#{3q=*?3mE3_oJ-~prjhxh%PgQT zyn)Qozaq0@o&|LEgS{Ind4Swsr;b`u185hZPOBLL<`d2%^Yp1?oL)=jnLi;Zo0ZDliTtQ^b5SmfIMe{T==zZkbvn$KTQGlbG8w}s@M3TZnde;1Am46P3juKb zl9GU&3F=q`>j!`?SyH#r@O59%@aMX^rx}Nxe<>NqpUp5=lX1ojGDIR*-D^SDuvCKF z?3$xG(gVUsBERef_YjPFl^rU9EtD{pt z0CXwpN7BN3!8>hajGaTVk-wl=9rxmfWtIhC{mheHgStLi^+Nz12a?4r(fz)?3A%at zMlvQmL<2-R)-@G1wJ0^zQK%mR=r4d{Y3fHp){nWXUL#|CqXl(+v+qDh>FkF9`eWrW zfr^D%LNfOcTNvtx0JXR35J0~Jpi2#P3Q&80w+nqNfc}&G0A~*)lGHKv=^FE+b(37|)zL;KLF>oiGfb(?&1 zV3XRu!Sw>@quKiab%g6jun#oZ%!>V#A%+lNc?q>6+VvyAn=kf_6z^(TZUa4Eelh{{ zqFX-#dY(EV@7l$NE&kv9u9BR8&Ojd#ZGJ6l8_BW}^r?DIS_rU2(XaGOK z225E@kH5Opf+CgD^{y29jD4gHbGf{1MD6ggQ&%>UG4WyPh5q_tb`{@_34B?xfSO*| zZv8!)q;^o-bz`MuxXk*G^}(6)ACb@=Lfs`Hxoh>`Y0NE8QRQ!*p|SH@{r8=%RKd4p z+#Ty^-0kb=-H-O`nAA3_6>2z(D=~Tbs(n8LHxD0`R0_ATFqp-SdY3(bZ3;VUM?J=O zKCNsxsgt@|&nKMC=*+ZqmLHhX1KHbAJs{nGVMs6~TiF%Q)P@>!koa$%oS zjXa=!5>P`vC-a}ln!uH1ooeI&v?=?v7?1n~P(wZ~0>xWxd_Aw;+}9#eULM7M8&E?Y zC-ZLhi3RoM92SXUb-5i-Lmt5_rfjE{6y^+24`y$1lywLyHO!)Boa7438K4#iLe?rh z2O~YGSgFUBH?og*6=r9rme=peP~ah`(8Zt7V)j5!V0KPFf_mebo3z95U8(up$-+EA^9dTRLq>Yl)YMBuch9%=e5B`Vnb>o zt03=kq;k2TgGe4|lGne&zJa~h(UGutjP_zr?a7~#b)@15XNA>Dj(m=gg2Q5V4-$)D|Q9}R#002ovPDHLkV1o7DH3k3x diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/video_player/video_player_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfaGjYE delta 1884 zcmV-i2c!7<1>g>l8Gi-<0076AQ7Zrd2Pa8HK~#9!?VNjT6h$1z_m0EFf5bmb1dTDK zp;kdKV1h(V(8Sc1M<37!RE>znAk{x4#zX@eOeE1j3~!+nB5IL z<xS}u?#DBMB>w^b($1Z)`9G?eP95EKi& z$eOy@K%h;ryrR3la%;>|o*>CgB(s>dDcNOXg}CK9SPmD?Uu$P4(=PGA0ShFasNfcIHTL?9WjB9#(2xSLC z`0%$#9DW9F;B4mbU{BlaYx!SjF!QSeF~(msQRxwboh5B_O$BWOQja)GboJz$&!?mgB&3$ytsA zvns&b3Cl5Hx#%p%faR*Q906u&fbXy$maV`n?S>A)vJIH!F-vxCrY+rq5_JA(GcOgu7(Ky4X3ATR9z8*%k&<5qYeV&4Y`~}XYmK(j{)!g8d2UgHXIINM!Rvn zKtEq~Foe0s!U{kux~F6Y7Sp+2f|*Cc${S{@oh8D0=XhB8Ec-w9CflfL+te4ium2cU zoPTCj_m<3d#gjK=<*8R`HP^C$lOPM5d~UhKhRRmvv{LI za^|oavk1$QiEApSrP@~Jjbg`<*dW4TO@DPEEX$Tg$xh?Y>Qd}y@kaH~IT8!lLpS^J zR7(&wZSI6+>Eb)tX>9Z?GX#q$u z4I>7e#b7ojyJ1grOh!^}s8S#ubi^Jkd1?UK)3mp6rI^_zxRY zrx6_QmhoWoDR`fp4R7gu6@OBFGu7IDVR6~nJsB{^f5jHn<{WJ&&f^X?3f8TIk3#U& zu1*Q-e@;snJxNx8-PBnpI|uFTKN!+Lp;fPfZ+eqqU^Y1|#DJY~126?zOx-+d>%4*? z&o`TbrXSNXZW^!P0t2>@$6&aiBtUDh2wLXLD9&a(1J=k_FK|iGbAQ@x4Qmx}Ms+*; zze&q6bH(=wYuXHfz0H6<05!LkE4rl~v^!bj=^9d+vI5fN<;GP>*Pas=q2l9RxDkk` zPRk&EQI+t_0$Y%nKE)Ma)W?jaA@4Z{h zTk*7;;#lG?hvTN_On=Jaxp%bdE;mDq(q#dgdYF|-?wrMeI4h`$idZ6^VyXZVlaCd0 z;i)OYR3npf@9>00Gqn##Zb4HRurgaWFCzL9u6@J@sse>Z1XznxWvSy%Td32I3!#YN zXt9v0)RQtDDZRd?#WY?~KF7A0UcR{jt9 W+;fr}hV%pg0000&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfzK(<8 literal 3294 zcmV<43?cK0P)1^@s67{VYS000c7NklQEG_j zup^)eW&WUIApqy$=APz8jE@awGp)!bsTjDbrJO`$x^ZR^dr;>)LW>{ zs70vpsD38v)19rI=GNk1b(0?Js9~rjsQsu*K;@SD40RB-3^gKU-MYC7G!Bw{fZsqp zih4iIi;Hr_xZ033Iu{sQxLS=}yBXgLMn40d++>aQ0#%8D1EbGZp7+ z5=mK?t31BkVYbGOxE9`i748x`YgCMwL$qMsChbSGSE1`p{nSmadR zcQ#R)(?!~dmtD0+D2!K zR9%!Xp1oOJzm(vbLvT^$IKp@+W2=-}qTzTgVtQ!#Y7Gxz}stUIm<1;oBQ^Sh2X{F4ibaOOx;5ZGSNK z0maF^@(UtV$=p6DXLgRURwF95C=|U8?osGhgOED*b z7woJ_PWXBD>V-NjQAm{~T%sjyJ{5tn2f{G%?J!KRSrrGvQ1(^`YLA5B!~eycY(e5_ z*%aa{at13SxC(=7JT7$IQF~R3sy`Nn%EMv!$-8ZEAryB*yB1k&stni)=)8-ODo41g zkJu~roIgAih94tb=YsL%iH5@^b~kU9M-=aqgXIrbtxMpFy5mekFm#edF9z7RQ6V}R zBIhbXs~pMzt0VWy1Fi$^fh+1xxLDoK09&5&MJl(q#THjPm(0=z2H2Yfm^a&E)V+a5 zbi>08u;bJsDRUKR9(INSc7XyuWv(JsD+BB*0hS)FO&l&7MdViuur@-<-EHw>kHRGY zqoT}3fDv2-m{NhBG8X}+rgOEZ;amh*DqN?jEfQdqxdj08`Sr=C-KmT)qU1 z+9Cl)a1mgXxhQiHVB}l`m;-RpmKy?0*|yl?FXvJkFxuu!fKlcmz$kN(a}i*saM3nr z0!;a~_%Xqy24IxA2rz<+08=B-Q|2PT)O4;EaxP^6qixOv7-cRh?*T?zZU`{nIM-at zTKYWr9rJ=tppQ9I#Z#mLgINVB!pO-^FOcvFw6NhV0gztuO?g ztoA*C-52Q-Z-P#xB4HAY3KQVd%dz1S4PA3vHp0aa=zAO?FCt zC_GaTyVBg2F!bBr3U@Zy2iJgIAt>1sf$JWA9kh{;L+P*HfUBX1Zy{4MgNbDfBV_ly z!y#+753arsZUt@366jIC0klaC@ckuk!qu=pAyf7&QmiBUT^L1&tOHzsK)4n|pmrVT zs2($4=?s~VejTFHbFdDOwG;_58LkIj1Fh@{glkO#F1>a==ymJS$z;gdedT1zPx4Kj ztjS`y_C}%af-RtpehdQDt3a<=W5C4$)9W@QAse;WUry$WYmr51ml9lkeunUrE`-3e zmq1SgSOPNEE-Mf+AGJ$g0M;3@w!$Ej;hMh=v=I+Lpz^n%Pg^MgwyqOkNyu2c^of)C z1~ALor3}}+RiF*K4+4{(1%1j3pif1>sv0r^mTZ?5Jd-It!tfPfiG_p$AY*Vfak%FG z4z#;wLtw&E&?}w+eKG^=#jF7HQzr8rV0mY<1YAJ_uGz~$E13p?F^fPSzXSn$8UcI$ z8er9{5w5iv0qf8%70zV71T1IBB1N}R5Kp%NO0=5wJalZt8;xYp;b{1K) zHY>2wW-`Sl{=NpR%iu3(u6l&)rc%%cSA#aV7WCowfbFR4wcc{LQZv~o1u_`}EJA3>ki`?9CKYTA!rhO)if*zRdd}Kn zEPfYbhoVE~!FI_2YbC5qAj1kq;xP6%J8+?2PAs?`V3}nyFVD#sV3+uP`pi}{$l9U^ zSz}_M9f7RgnnRhaoIJgT8us!1aB&4!*vYF07Hp&}L zCRlop0oK4DL@ISz{2_BPlezc;xj2|I z23RlDNpi9LgTG_#(w%cMaS)%N`e>~1&a3<{Xy}>?WbF>OOLuO+j&hc^YohQ$4F&ze z+hwnro1puQjnKm;vFG~o>`kCeUIlkA-2tI?WBKCFLMBY=J{hpSsQ=PDtU$=duS_hq zHpymHt^uuV1q@uc4bFb{MdG*|VoW@15Osrqt2@8ll0qO=j*uOXn{M0UJX#SUztui9FN4)K3{9!y8PC-AHHvpVTU;x|-7P+taAtyglk#rjlH2 z5Gq8ik}BPaGiM{#Woyg;*&N9R2{J0V+WGB69cEtH7F?U~Kbi6ksi*`CFXsi931q7Y zGO82?whBhN%w1iDetv%~wM*Y;E^)@Vl?VDj-f*RX>{;o_=$fU!&KAXbuadYZ46Zbg z&6jMF=49$uL^73y;;N5jaHYv)BTyfh&`qVLYn?`o6BCA_z-0niZz=qPG!vonK3MW_ zo$V96zM!+kJRs{P-5-rQVse0VBH*n6A58)4uc&gfHMa{gIhV2fGf{st>E8sKyP-$8zp~wJX^A*@DI&-;8>gANXZj zU)R+Y)PB?=)a|Kj>8NXEu^S_h^7R`~Q&7*Kn!xyvzVv&^>?^iu;S~R2e-2fJx-oUb cX)(b1KSk$MOV07*qoM6N<$f&{Qds= z{r_0T`1}6fwc-8!#-TGX}_?g)CZq4{k!uZ_g@DrQdoW0kI zu+W69&uN^)W`CK&06mMNcYMVF00dG=L_t(|+U?wHQxh>12H+Dm+1+fh+IF>G0SjJM zkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJTkdTm&kdTm&kdTm&kdP`e zsgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>VI$fQI%^ugM`#6By?GeadWcu z0gy9!D`m!H>Bd!JW(@avE8`|5XX(0PN}!8K>`dkavs;rHL+wy96QGNT=S@#7%xtlm zIW!++@*2zm-Py#Zr`DzqsLm!b{iskFNULSqE9A>SqHem>o31A%XL>S_5?=;V_i_y+ z(xxXhnt#r-l1Y8_*h`r?8Tr|)(RAiO)4jQR`13X0mx07C&p@KBP_2s``KEhv^|*8c z$$_T(v6^1Ig=#R}sE{vjA?ErGDZGUsyoJuWdJMc7Nb1^KF)-u<7q zPy$=;)0>vuWuK2hQhswLf!9yg`88u&eBbR8uhod?Nw09AXH}-#qOLLxeT2%C;R)QQ$Za#qp~cM&YVmS4i-*Fpd!cC zBXc?(4wcg>sHmXGd^VdE<5QX{Kyz$;$sCPl(_*-P2Iw?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF34$0Z;QO!J zOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUCUoZo%k(yku QW&i*H07*qoM6N<$g47z!?*IS* literal 3612 zcmV+%4&(8OP)6$jw%VRuvdN2+38CZWny1cRtlsl+0_KtW)EU14Ei(F!UtWuj4IK+3{sK@>rh zs1Z;=(DD&U6+tlyL?UnHVN^&g6QhFi2#HS+*qz;(>63G(`|jRtW|nz$Pv7qTovP!^ zP_jES{mr@O-02w%!^a?^1ZP!_KmQiz0L~jZ=W@Qt`8wzOoclQsAS<5YdH;a(4bGLE zk8s}1If(PSIgVi!XE!5kA?~z*sobvNyohr;=Q_@h2@$6Flyej3J)D-6YfheRGl`HEcPk|~huT_2-U?PfL=4BPV)f1o!%rQ!NMt_MYw-5bUSwQ9Z&zC>u zOrl~UJglJNa%f50Ok}?WB{on`Ci`p^Y!xBA?m@rcJXLxtrE0FhRF3d*ir>yzO|BD$ z3V}HpFcCh6bTzY}Nt_(W%QYd3NG)jJ4<`F<1Od) zfQblTdC&h2lCz`>y?>|9o2CdvC8qZeIZt%jN;B7Hdn2l*k4M4MFEtq`q_#5?}c$b$pf_3y{Y!cRDafZBEj-*OD|gz#PBDeu3QoueOesLzB+O zxjf2wvf6Wwz>@AiOo2mO4=TkAV+g~%_n&R;)l#!cBxjuoD$aS-`IIJv7cdX%2{WT7 zOm%5rs(wqyPE^k5SIpUZ!&Lq4<~%{*>_Hu$2|~Xa;iX*tz8~G6O3uFOS?+)tWtdi| zV2b#;zRN!m@H&jd=!$7YY6_}|=!IU@=SjvGDFtL;aCtw06U;-v^0%k0FOyESt z1Wv$={b_H&8FiRV?MrzoHWd>%v6KTRU;-v^Miiz+@q`(BoT!+<37CKhoKb)|8!+RG z6BQFU^@fRW;s8!mOf2QViKQGk0TVER6EG1`#;Nm39Do^PoT!+<37AD!%oJe86(=et zZ~|sLzU>V-qYiU6V8$0GmU7_K8|Fd0B?+9Un1BhKAz#V~Fk^`mJtlCX#{^8^M8!me z8Yg;8-~>!e<-iG;h*0B1kBKm}hItVGY6WnjVpgnTTAC$rqQ^v)4KvOtpY|sIj@WYg zyw##ZZ5AC2IKNC;^hwg9BPk0wLStlmBr;E|$5GoAo$&Ui_;S9WY62n3)i49|T%C#i017z3J=$RF|KyZWnci*@lW4 z=AKhNN6+m`Q!V3Ye68|8y@%=am>YD0nG99M)NWc20%)gwO!96j7muR}Fr&54SxKP2 zP30S~lt=a*qDlbu3+Av57=9v&vr<6g0&`!8E2fq>I|EJGKs}t|{h7+KT@)LfIV-3K zK)r_fr2?}FFyn*MYoLC>oV-J~eavL2ho4a4^r{E-8m2hi>~hA?_vIG4a*KT;2eyl1 zh_hUvUJpNCFwBvRq5BI*srSle>c6%n`#VNsyC|MGa{(P&08p=C9+WUw9Hl<1o9T4M zdD=_C0F7#o8A_bRR?sFNmU0R6tW`ElnF8p53IdHo#S9(JoZCz}fHwJ6F<&?qrpVqE zte|m%89JQD+XwaPU#%#lVs-@-OL);|MdfINd6!XwP2h(eyafTUsoRkA%&@fe?9m@jw-v(yTTiV2(*fthQH9}SqmsRPVnwwbV$1E(_lkmo&S zF-truCU914_$jpqjr(>Ha4HkM4YMT>m~NosUu&UZ>zirfHo%N6PPs9^_o$WqPA0#5 z%tG>qFCL+b*0s?sZ;Sht0nE7Kl>OVXy=gjWxxK;OJ3yGd7-pZf7JYNcZo2*1SF`u6 zHJyRRxGw9mDlOiXqVMsNe#WX`fC`vrtjSQ%KmLcl(lC>ZOQzG^%iql2w-f_K@r?OE zwCICifM#L-HJyc7Gm>Ern?+Sk3&|Khmu4(~3qa$(m6Ub^U0E5RHq49za|XklN#?kP zl;EstdW?(_4D>kwjWy2f!LM)y?F94kyU3`W!6+AyId-89v}sXJpuic^NLL7GJItl~ zsiuB98AI-(#Mnm|=A-R6&2fwJ0JVSY#Q>&3$zFh|@;#%0qeF=j5Ajq@4i0tIIW z&}sk$&fGwoJpe&u-JeGLi^r?dO`m=y(QO{@h zQqAC7$rvz&5+mo3IqE?h=a~6m>%r5Quapvzq;{y~p zJpyXOBgD9VrW7@#p6l7O?o3feml(DtSL>D^R) zZUY%T2b0-vBAFN7VB;M88!~HuOXi4KcI6aRQ&h|XQ0A?m%j2=l1f0cGP}h(oVfJ`N zz#PpmFC*ieab)zJK<4?^k=g%OjPnkANzbAbmGZHoVRk*mTfm75s_cWVa`l*f$B@xu z5E*?&@seIo#*Y~1rBm!7sF9~~u6Wrj5oICUOuz}CS)jdNIznfzCA(stJ(7$c^e5wN z?lt>eYgbA!kvAR7zYSD&*r1$b|(@;9dcZ^67R0 zXAXJKa|5Sdmj!g578Nwt6d$sXuc&MWezA0Whd`94$h{{?1IwXP4)Tx4obDK%xoFZ_Z zjjHJ_P@R_e5blG@yEjnaJb`l;s%Lb2&=8$&Ct-fV`E^4CUs)=jTk!I}2d&n!f@)bm z@ z_4Dc86+3l2*p|~;o-Sb~oXb_RuLmoifDU^&Te$*FevycC0*nE3Xws8gsWp|Rj2>SM zns)qcYj?^2sd8?N!_w~4v+f-HCF|a$TNZDoNl$I1Uq87euoNgKb6&r26TNrfkUa@o zfdiFA@p{K&mH3b8i!lcoz)V{n8Q@g(vR4ns4r6w;K z>1~ecQR0-<^J|Ndg5fvVUM9g;lbu-){#ghGw(fg>L zh)T5Ljb%lWE;V9L!;Cqk>AV1(rULYF07ZBJbGb9qbSoLAd;in9{)95YqX$J43-dY7YU*k~vrM25 zxh5_IqO0LYZW%oxQ5HOzmk4x{atE*vipUk}sh88$b2tn?!ujEHn`tQLe&vo}nMb&{ zio`xzZ&GG6&ZyN3jnaQy#iVqXE9VT(3tWY$n-)uWDQ|tc{`?fq2F`oQ{;d3aWPg4Hp-(iE{ry>MIPWL> iW8 + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Video Player Example CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -15,26 +19,40 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $(FLUTTER_BUILD_NAME) CFBundleSignature ???? CFBundleVersion - 1 + $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS - NSAppTransportSecurity + UIApplicationSceneManifest - NSAllowsArbitraryLoads - + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneConfigurationName + flutter + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + UIApplicationSupportsIndirectInputEvents + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main - UIRequiredDeviceCapabilities - - arm64 - UISupportedInterfaceOrientations UIInterfaceOrientationPortrait @@ -48,9 +66,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/Runner-Bridging-Header.h b/packages/video_player/video_player_avfoundation/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000000..ba04211afd0a --- /dev/null +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +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 "GeneratedPluginRegistrant.h" diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.h b/packages/video_player/video_player_avfoundation/example/ios/Runner/SceneDelegate.swift similarity index 58% rename from packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.h rename to packages/video_player/video_player_avfoundation/example/ios/Runner/SceneDelegate.swift index 721cca1e11bb..8c7b10c639d1 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner/AppDelegate.h +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner/SceneDelegate.swift @@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import -#import +import Flutter +import UIKit -@interface AppDelegate : FlutterAppDelegate +class SceneDelegate: FlutterSceneDelegate { -@end +} diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner/main.m b/packages/video_player/video_player_avfoundation/example/ios/Runner/main.m deleted file mode 100644 index fc7b5903f185..000000000000 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner/main.m +++ /dev/null @@ -1,13 +0,0 @@ -// 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 -#import -#import "AppDelegate.h" - -int main(int argc, char *argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/Info.plist b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/Info.plist deleted file mode 100644 index 64d65ca49577..000000000000 --- a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/Info.plist b/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/Info.plist deleted file mode 100644 index 64d65ca49577..000000000000 --- a/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - From 2fbf78d1099c2ec04578c0db2737b81632f573da Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 18 Mar 2026 09:55:36 -0400 Subject: [PATCH 14/55] [google_maps_flutter] Add color scheme support to platform interface (#11278) Platform interface portion of https://github.com/flutter/packages/pull/10471 Part of https://github.com/flutter/flutter/issues/176445 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../CHANGELOG.md | 4 ++++ .../lib/src/types/map_color_scheme.dart | 15 +++++++++++++ .../lib/src/types/map_configuration.dart | 15 +++++++++++-- .../lib/src/types/types.dart | 1 + .../pubspec.yaml | 2 +- .../test/types/map_configuration_test.dart | 22 +++++++++++++++++++ 6 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_color_scheme.dart diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md index 1c192e498b60..6a6c637674a7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.15.0 + +* Adds support for `colorScheme` for cloud-based maps styling brightness in web. + ## 2.14.2 * Adds documentation about iOS rendering issue with `PinConfig`. diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_color_scheme.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_color_scheme.dart new file mode 100644 index 000000000000..743d3a104a73 --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_color_scheme.dart @@ -0,0 +1,15 @@ +// 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. + +/// The color scheme of the map to be used with cloud styles. +enum MapColorScheme { + /// The light color scheme for the map. + light, + + /// The dark color scheme for the map. + dark, + + /// The system default color scheme for the map. + followSystem, +} diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart index 235ec580b2e7..c8d178575484 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart @@ -42,6 +42,7 @@ class MapConfiguration { String? cloudMapId, this.style, this.markerType, + this.colorScheme, }) : mapId = mapId ?? cloudMapId; /// This setting controls how the API handles gestures on the map. Web only. @@ -143,6 +144,11 @@ class MapConfiguration { /// used. final MarkerType? markerType; + /// Preferred color scheme for the cloud-styled map. Web only. + /// + /// See https://developers.google.com/maps/documentation/javascript/mapcolorscheme for more details. + final MapColorScheme? colorScheme; + /// Identifier that's associated with a specific cloud-based map style. /// /// See https://developers.google.com/maps/documentation/get-map-id @@ -227,6 +233,7 @@ class MapConfiguration { mapId: mapId != other.mapId ? mapId : null, style: style != other.style ? style : null, markerType: markerType != other.markerType ? markerType : null, + colorScheme: colorScheme != other.colorScheme ? colorScheme : null, ); } @@ -265,6 +272,7 @@ class MapConfiguration { mapId: diff.mapId ?? mapId, style: diff.style ?? style, markerType: diff.markerType ?? markerType, + colorScheme: diff.colorScheme ?? colorScheme, ); } @@ -294,7 +302,8 @@ class MapConfiguration { buildingsEnabled == null && mapId == null && style == null && - markerType == null; + markerType == null && + colorScheme == null; @override bool operator ==(Object other) { @@ -329,7 +338,8 @@ class MapConfiguration { buildingsEnabled == other.buildingsEnabled && mapId == other.mapId && style == other.style && - markerType == other.markerType; + markerType == other.markerType && + colorScheme == other.colorScheme; } @override @@ -359,6 +369,7 @@ class MapConfiguration { mapId, style, markerType, + colorScheme, ]); } diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/types.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/types.dart index a2483a24c544..80e380674337 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/types.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/types.dart @@ -19,6 +19,7 @@ export 'heatmap.dart'; export 'heatmap_updates.dart'; export 'joint_type.dart'; export 'location.dart'; +export 'map_color_scheme.dart'; export 'map_configuration.dart'; export 'map_objects.dart'; export 'map_widget_configuration.dart'; diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml index 06c5b6b8834e..3f0790182d2e 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/google_maps_f issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.14.2 +version: 2.15.0 environment: sdk: ^3.9.0 diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart index 493f5cc13936..e8564565457f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart @@ -485,6 +485,22 @@ void main() { // The hash code should change. expect(empty.hashCode, isNot(diff.hashCode)); }); + + test('handle colorScheme', () async { + const diff = MapConfiguration(colorScheme: MapColorScheme.followSystem); + + const empty = MapConfiguration(); + final MapConfiguration updated = diffBase.applyDiff(diff); + + // A diff applied to empty options should be the diff itself. + expect(empty.applyDiff(diff), diff); + // The diff from empty options should be the diff itself. + expect(diff.diffFrom(empty), diff); + // A diff applied to non-empty options should update that field. + expect(updated.colorScheme, MapColorScheme.followSystem); + // The hash code should change. + expect(empty.hashCode, isNot(diff.hashCode)); + }); }); group('isEmpty', () { @@ -641,5 +657,11 @@ void main() { expect(diff.isEmpty, false); }); + + test('is false with colorScheme', () async { + const diff = MapConfiguration(colorScheme: MapColorScheme.followSystem); + + expect(diff.isEmpty, false); + }); }); } From afa1a1c3564e5be4795193600b1c2f0e58d80bee Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 18 Mar 2026 10:35:27 -0400 Subject: [PATCH 15/55] Roll Flutter from 732e05dd483c to d117642c18e0 (47 revisions) (#11276) Roll Flutter from 732e05dd483c to d117642c18e0 (47 revisions) https://github.com/flutter/flutter/compare/732e05dd483c...d117642c18e0 2026-03-17 engine-flutter-autoroll@skia.org Roll Skia from fa3bb1f60d99 to dba893a44d7a (1 revision) (flutter/flutter#183783) 2026-03-17 41930132+hellohuanlin@users.noreply.github.com [ios][pv]fix admob banner scrollable on ios 18.2 (flutter/flutter#183274) 2026-03-17 engine-flutter-autoroll@skia.org Roll Packages from 0f2eeaecde3f to a9d36fb7b902 (2 revisions) (flutter/flutter#183782) 2026-03-17 mdebbar@google.com Update goldctl version (flutter/flutter#183538) 2026-03-17 engine-flutter-autoroll@skia.org Roll Skia from 69be1087807b to fa3bb1f60d99 (1 revision) (flutter/flutter#183779) 2026-03-17 engine-flutter-autoroll@skia.org Roll Dart SDK from 38dedf00c2cd to 30cdd2634429 (1 revision) (flutter/flutter#183778) 2026-03-17 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from s7rq9m8tH2aZtX-kP... to zYBvfzIH95BY3cCzL... (flutter/flutter#183777) 2026-03-17 engine-flutter-autoroll@skia.org Roll Skia from 4ea039236580 to 69be1087807b (2 revisions) (flutter/flutter#183772) 2026-03-17 engine-flutter-autoroll@skia.org Roll Skia from fb402093cfb5 to 4ea039236580 (1 revision) (flutter/flutter#183770) 2026-03-17 engine-flutter-autoroll@skia.org Roll Skia from d6bc6d17d637 to fb402093cfb5 (8 revisions) (flutter/flutter#183765) 2026-03-17 engine-flutter-autoroll@skia.org Roll Dart SDK from ff50ab8ecea4 to 38dedf00c2cd (2 revisions) (flutter/flutter#183764) 2026-03-17 robert.ancell@canonical.com Wrap EGL image usage in a GObject (flutter/flutter#183539) 2026-03-17 30870216+gaaclarke@users.noreply.github.com Adds platform_view_test_macos_impeller (flutter/flutter#183760) 2026-03-17 30870216+gaaclarke@users.noreply.github.com Adds flush to metal screenshotter. (flutter/flutter#183758) 2026-03-16 robert.ancell@canonical.com Add a platform OpenGL context. (flutter/flutter#183715) 2026-03-16 123626410+sanketudaypatil@users.noreply.github.com Fix formatting, capitalization, and grammar in activation issue template (flutter/flutter#183061) 2026-03-16 engine-flutter-autoroll@skia.org Roll Dart SDK from 4a6febbf882e to ff50ab8ecea4 (2 revisions) (flutter/flutter#183739) 2026-03-16 kevin.lamenzo@gmail.com docs: add code review guidance to CONTRIBUTING.md (flutter/flutter#182778) 2026-03-16 737941+loic-sharma@users.noreply.github.com Filter 'waiting for customer response' issues from macOS triage (flutter/flutter#183552) 2026-03-16 30870216+gaaclarke@users.noreply.github.com Adds github action to reset cicd when new branches come (flutter/flutter#183675) 2026-03-16 30870216+gaaclarke@users.noreply.github.com Adds macos impeller complex layout performance test (flutter/flutter#183669) 2026-03-16 engine-flutter-autoroll@skia.org Roll Dart SDK from b74e5b537d71 to 4a6febbf882e (2 revisions) (flutter/flutter#183695) 2026-03-16 jason-simmons@users.noreply.github.com Use properties to configure leak_tracking and test_randomization_off in .ci.yaml (flutter/flutter#183605) 2026-03-16 srawlins@google.com [flutter_tools] Avoid File.exists and File.stat, as per enforced lint rule (flutter/flutter#183463) 2026-03-16 eyas.sharaiha@gmail.com Properly parse URIs for testPath when the host is running on Windows. (flutter/flutter#176881) 2026-03-16 engine-flutter-autoroll@skia.org Roll Packages from 91f7c339b29a to 0f2eeaecde3f (6 revisions) (flutter/flutter#183730) 2026-03-16 engine-flutter-autoroll@skia.org Roll Skia from a6ccaf95c6e0 to d6bc6d17d637 (5 revisions) (flutter/flutter#183726) 2026-03-16 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from WOfyEFkxf9JX26VS-... to s7rq9m8tH2aZtX-kP... (flutter/flutter#183723) 2026-03-15 engine-flutter-autoroll@skia.org Roll Skia from 34ace196b838 to a6ccaf95c6e0 (2 revisions) (flutter/flutter#183712) 2026-03-14 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from vAWG8mRvsQHblDBsy... to WOfyEFkxf9JX26VS-... (flutter/flutter#183694) 2026-03-14 engine-flutter-autoroll@skia.org Roll Skia from 06106120c6bf to 34ace196b838 (1 revision) (flutter/flutter#183677) 2026-03-14 engine-flutter-autoroll@skia.org Roll Dart SDK from 6a3dc9d4f881 to b74e5b537d71 (2 revisions) (flutter/flutter#183676) 2026-03-14 jacksongardner@google.com Add some quality of life improvements to the release GitHub workflows. (flutter/flutter#183658) 2026-03-14 ishaquehassan@gmail.com Fix RouteAware.didPushNext documentation inaccuracy (flutter/flutter#183097) 2026-03-13 30870216+gaaclarke@users.noreply.github.com Adds complex layout impeller startup benchmark (flutter/flutter#183655) 2026-03-13 30870216+gaaclarke@users.noreply.github.com Adds switch for sdf rendering plus golden tests (flutter/flutter#183543) 2026-03-13 30870216+gaaclarke@users.noreply.github.com Made complex_layout_scroll_perf explicitly skia (flutter/flutter#183663) 2026-03-13 47866232+chunhtai@users.noreply.github.com Update android integration test to match the current android semantics (flutter/flutter#183548) 2026-03-13 engine-flutter-autoroll@skia.org Roll Skia from 6c0346103c24 to 06106120c6bf (3 revisions) (flutter/flutter#183654) 2026-03-13 engine-flutter-autoroll@skia.org Roll Dart SDK from d5f6d3c17499 to 6a3dc9d4f881 (1 revision) (flutter/flutter#183652) 2026-03-13 108678139+manu-sncf@users.noreply.github.com Fix PinnedHeaderSliver semantics focus capture (flutter/flutter#179023) 2026-03-13 jhy03261997@gmail.com [a11y][android] In Android 16, sendWindowContentChangeEvent when check state changes (flutter/flutter#183606) 2026-03-13 1063596+reidbaker@users.noreply.github.com Update gradle utils to know about kgp 2.3.10 constraints (flutter/flutter#183416) 2026-03-13 engine-flutter-autoroll@skia.org Roll Skia from 029229d8be91 to 6c0346103c24 (5 revisions) (flutter/flutter#183648) 2026-03-13 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from jJbpv4J_tjW-wuKDq... to vAWG8mRvsQHblDBsy... (flutter/flutter#183646) 2026-03-13 mengyanshou@gmail.com [flutter_tools] Support flavors and transformers for shaders (flutter/flutter#181889) ... --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 745dc15e8f87..d9d23f301e6c 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -732e05dd483cf7f8ec68955e13fc9a5504d5f26a +d117642c18e0d5e3a96ae00d4340b1b0724de24c From b3280ae0d8ed70ec2e354e000354099b8abcc448 Mon Sep 17 00:00:00 2001 From: Eli Geller Date: Wed, 18 Mar 2026 11:35:04 -0400 Subject: [PATCH 16/55] [google_maps_flutter_android] Batch clustered marker operations (#10940) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Note: this PR attempts to use the same strategy from the Google Maps Flutter Web PR https://github.com/flutter/packages/pull/10562 and apply it to Google Maps Flutter Android. ## Summary - Adds batch `addItems()` and `removeItems()` methods to `ClusterManagersController` - Refactors `MarkersController` to batch add/remove/change operations for clustered markers - Reduces redundant re-clustering calls when multiple markers are added/removed/changed at once This improves performance when working with large numbers of clustered markers by calling `ClusterManager.cluster()` once per cluster manager instead of once per marker. ## Test plan - Added unit tests for batch add/remove operations - Added unit test for batch cluster manager changes - Existing tests pass Addresses https://github.com/flutter/flutter/issues/170573 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../google_maps_flutter_android/CHANGELOG.md | 7 +- .../googlemaps/ClusterManagersController.java | 18 ++ .../plugins/googlemaps/MarkersController.java | 149 +++++++++++- .../googlemaps/MarkersControllerTest.java | 223 +++++++++++++++++- .../google_maps_flutter_android/pubspec.yaml | 2 +- 5 files changed, 386 insertions(+), 13 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md index fed644c5be91..51d54ce382e3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.19.3 + +* Batches clustered marker add/remove operations to avoid redundant re-rendering. + ## 2.19.2 * Bump com.google.maps.android:android-maps-utils from 4.0.0 to 4.1.0. @@ -35,6 +39,7 @@ * Replaces internal use of deprecated methods. ## 2.18.6 + * Bumps com.android.tools.build:gradle from 8.12.1 to 8.13.1. ## 2.18.5 @@ -60,7 +65,7 @@ ## 2.18.0 -* Adds support for warming up the Google Maps SDK +* Adds support for warming up the Google Maps SDK via `GoogleMapsFlutterAndroid.warmup()`. ## 2.17.0 diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ClusterManagersController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ClusterManagersController.java index 272ae3b71b41..0b28e6a485ec 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ClusterManagersController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/ClusterManagersController.java @@ -160,6 +160,15 @@ public void addItem(MarkerBuilder item) { } } + /** Adds multiple items to the ClusterManager with the given ID. */ + public void addItems(String clusterManagerId, @NonNull List items) { + ClusterManager clusterManager = clusterManagerIdToManager.get(clusterManagerId); + if (clusterManager != null) { + clusterManager.addItems(items); + clusterManager.cluster(); + } + } + /** Removes item from the ClusterManager it belongs to. */ public void removeItem(MarkerBuilder item) { ClusterManager clusterManager = @@ -170,6 +179,15 @@ public void removeItem(MarkerBuilder item) { } } + /** Removes multiple items from the ClusterManager with the given ID. */ + public void removeItems(String clusterManagerId, @NonNull List items) { + ClusterManager clusterManager = clusterManagerIdToManager.get(clusterManagerId); + if (clusterManager != null) { + clusterManager.removeItems(items); + clusterManager.cluster(); + } + } + /** Called when ClusterRenderer has rendered new visible marker to the map. */ void onClusterItemRendered(@NonNull MarkerBuilder item, @NonNull Marker marker) { // If map is being disposed, clusterItemRenderedListener might have been cleared and diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java index 8d60d1fae226..7f95e5d44efe 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/MarkersController.java @@ -12,8 +12,10 @@ import com.google.maps.android.collections.MarkerManager; import io.flutter.plugins.googlemaps.Messages.MapsCallbackApi; import io.flutter.plugins.googlemaps.Messages.PlatformMarkerType; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; class MarkersController { @@ -51,20 +53,161 @@ void setCollection(MarkerManager.Collection markerCollection) { } void addMarkers(@NonNull List markersToAdd) { + // Group markers by cluster manager ID for batch operations + Map> markersByCluster = new HashMap<>(); + List nonClusteredMarkers = new ArrayList<>(); + for (Messages.PlatformMarker markerToAdd : markersToAdd) { - addMarker(markerToAdd); + String markerId = markerToAdd.getMarkerId(); + String clusterManagerId = markerToAdd.getClusterManagerId(); + MarkerBuilder markerBuilder = new MarkerBuilder(markerId, clusterManagerId, markerType); + Convert.interpretMarkerOptions( + markerToAdd, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper); + + // Store marker builder for future marker rebuilds when used under clusters. + markerIdToMarkerBuilder.put(markerId, markerBuilder); + + if (clusterManagerId == null) { + nonClusteredMarkers.add(markerBuilder); + } else { + markersByCluster + .computeIfAbsent(clusterManagerId, k -> new ArrayList<>()) + .add(markerBuilder); + } + } + + // Add non-clustered markers to the collection + for (MarkerBuilder markerBuilder : nonClusteredMarkers) { + addMarkerToCollection(markerBuilder.markerId(), markerBuilder); + } + + // Batch add clustered markers + for (Map.Entry> entry : markersByCluster.entrySet()) { + clusterManagersController.addItems(entry.getKey(), entry.getValue()); } } void changeMarkers(@NonNull List markersToChange) { + // Collect markers that need cluster manager changes for batch processing + Map> markersToAddByCluster = new HashMap<>(); + Map> markersToRemoveByCluster = new HashMap<>(); + for (Messages.PlatformMarker markerToChange : markersToChange) { - changeMarker(markerToChange); + String markerId = markerToChange.getMarkerId(); + MarkerBuilder markerBuilder = markerIdToMarkerBuilder.get(markerId); + if (markerBuilder == null) { + continue; + } + + String clusterManagerId = markerToChange.getClusterManagerId(); + String oldClusterManagerId = markerBuilder.clusterManagerId(); + + // If the cluster ID on the updated marker has changed, collect for batch processing + if (!(Objects.equals(clusterManagerId, oldClusterManagerId))) { + // Remove from old cluster manager + if (oldClusterManagerId != null) { + markersToRemoveByCluster + .computeIfAbsent(oldClusterManagerId, k -> new ArrayList<>()) + .add(markerBuilder); + } + + // Prepare new marker for addition + MarkerBuilder newMarkerBuilder = new MarkerBuilder(markerId, clusterManagerId, markerType); + Convert.interpretMarkerOptions( + markerToChange, + newMarkerBuilder, + assetManager, + density, + bitmapDescriptorFactoryWrapper); + markerIdToMarkerBuilder.put(markerId, newMarkerBuilder); + + if (clusterManagerId != null) { + markersToAddByCluster + .computeIfAbsent(clusterManagerId, k -> new ArrayList<>()) + .add(newMarkerBuilder); + } else { + // Add to map immediately if not clustered + addMarkerToCollection(markerId, newMarkerBuilder); + } + + // Clean up old marker controller if it's not clustered + if (oldClusterManagerId == null) { + MarkerController oldController = markerIdToController.remove(markerId); + if (oldController != null && markerCollection != null) { + oldController.removeFromCollection(markerCollection); + googleMapsMarkerIdToDartMarkerId.remove(oldController.getGoogleMapsMarkerId()); + } + } + } else { + // Update existing marker in place + Convert.interpretMarkerOptions( + markerToChange, markerBuilder, assetManager, density, bitmapDescriptorFactoryWrapper); + MarkerController markerController = markerIdToController.get(markerId); + if (markerController != null) { + Convert.interpretMarkerOptions( + markerToChange, + markerController, + assetManager, + density, + bitmapDescriptorFactoryWrapper); + } + } + } + + // Batch remove from cluster managers + for (Map.Entry> entry : markersToRemoveByCluster.entrySet()) { + clusterManagersController.removeItems(entry.getKey(), entry.getValue()); + } + + // Batch add to cluster managers + for (Map.Entry> entry : markersToAddByCluster.entrySet()) { + clusterManagersController.addItems(entry.getKey(), entry.getValue()); } } void removeMarkers(@NonNull List markerIdsToRemove) { + // Group markers by cluster manager ID for batch operations + Map> markersByCluster = new HashMap<>(); + List nonClusteredControllers = new ArrayList<>(); + for (String markerId : markerIdsToRemove) { - removeMarker(markerId); + final MarkerBuilder markerBuilder = markerIdToMarkerBuilder.get(markerId); + if (markerBuilder == null) { + continue; + } + + final String clusterManagerId = markerBuilder.clusterManagerId(); + if (clusterManagerId != null) { + markersByCluster + .computeIfAbsent(clusterManagerId, k -> new ArrayList<>()) + .add(markerBuilder); + } else { + final MarkerController markerController = markerIdToController.get(markerId); + if (markerController != null) { + nonClusteredControllers.add(markerController); + } + } + } + + // Batch remove clustered markers + for (Map.Entry> entry : markersByCluster.entrySet()) { + clusterManagersController.removeItems(entry.getKey(), entry.getValue()); + } + + // Remove non-clustered markers from the collection + for (MarkerController markerController : nonClusteredControllers) { + if (this.markerCollection != null) { + markerController.removeFromCollection(markerCollection); + } + } + + // Clean up all marker references + for (String markerId : markerIdsToRemove) { + markerIdToMarkerBuilder.remove(markerId); + final MarkerController markerController = markerIdToController.remove(markerId); + if (markerController != null) { + googleMapsMarkerIdToDartMarkerId.remove(markerController.getGoogleMapsMarkerId()); + } } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java index e407e61fd6d1..aba30f67ed02 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/MarkersControllerTest.java @@ -28,6 +28,7 @@ import io.flutter.plugins.googlemaps.Messages.PlatformMarkerCollisionBehavior; import io.flutter.plugins.googlemaps.Messages.PlatformMarkerType; import java.io.ByteArrayOutputStream; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.After; @@ -207,15 +208,27 @@ public void controller_AddChangeAndRemoveMarkerWithClusterManagerId() { when(marker.getId()).thenReturn(googleMarkerId); - // Add marker and capture the markerBuilder + // Store reference to verify later, since markerIdToMarkerBuilder is private + final MarkerBuilder[] addedMarkerBuilder = new MarkerBuilder[1]; + + // Add marker and verify addItems is called with correct parameters controller.addMarkers(Collections.singletonList(builder.build())); - ArgumentCaptor captor = ArgumentCaptor.forClass(MarkerBuilder.class); - Mockito.verify(clusterManagersController, times(1)).addItem(captor.capture()); - MarkerBuilder capturedMarkerBuilder = captor.getValue(); - assertEquals(clusterManagerId, capturedMarkerBuilder.clusterManagerId()); + Mockito.verify(clusterManagersController, times(1)) + .addItems( + eq(clusterManagerId), + Mockito.argThat( + markerBuilders -> { + if (markerBuilders.size() == 1 + && markerBuilders.get(0).clusterManagerId().equals(clusterManagerId)) { + // Store reference for later use in onClusterItemRendered + addedMarkerBuilder[0] = markerBuilders.get(0); + return true; + } + return false; + })); // clusterManagersController calls onClusterItemRendered with created marker. - controller.onClusterItemRendered(capturedMarkerBuilder, marker); + controller.onClusterItemRendered(addedMarkerBuilder[0], marker); // Change marker to test that markerController is created and the marker can be updated final LatLng latLng2 = new LatLng(3.3, 4.4); @@ -234,9 +247,12 @@ public void controller_AddChangeAndRemoveMarkerWithClusterManagerId() { controller.removeMarkers(Collections.singletonList(googleMarkerId)); Mockito.verify(clusterManagersController, times(1)) - .removeItem( + .removeItems( + eq(clusterManagerId), Mockito.argThat( - markerBuilder -> markerBuilder.clusterManagerId().equals(clusterManagerId))); + markerBuilders -> + markerBuilders.size() == 1 + && markerBuilders.get(0).clusterManagerId().equals(clusterManagerId))); } @Test @@ -310,4 +326,195 @@ public void markerBuilder_setCollisionBehavior() { markerOptions = markerBuilder.build(); Assert.assertEquals(MarkerOptions.class, markerOptions.getClass()); } + + @Test + public void controller_BatchAddMultipleMarkersWithClusterManagerId() { + final String clusterManagerId = "cm123"; + + // Create multiple markers with the same cluster manager + final List markers = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + final Messages.PlatformMarker.Builder builder = defaultMarkerBuilder(); + builder + .setMarkerId("marker" + i) + .setClusterManagerId(clusterManagerId) + .setPosition( + new Messages.PlatformLatLng.Builder() + .setLatitude(1.0 + i) + .setLongitude(2.0 + i) + .build()); + markers.add(builder.build()); + } + + // Add all markers in one batch + controller.addMarkers(markers); + + // Verify addItems is called exactly once with all 5 markers + Mockito.verify(clusterManagersController, times(1)) + .addItems( + eq(clusterManagerId), + Mockito.argThat( + markerBuilders -> + markerBuilders.size() == 5 + && markerBuilders + .stream() + .allMatch(mb -> mb.clusterManagerId().equals(clusterManagerId)))); + + // Verify addItem is never called (we're using batch operation) + Mockito.verify(clusterManagersController, times(0)).addItem(any()); + } + + @Test + public void controller_BatchRemoveMultipleMarkersWithClusterManagerId() { + final String clusterManagerId = "cm123"; + + // First add markers + final List markers = new ArrayList<>(); + final List markerIds = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + String markerId = "marker" + i; + markerIds.add(markerId); + final Messages.PlatformMarker.Builder builder = defaultMarkerBuilder(); + builder + .setMarkerId(markerId) + .setClusterManagerId(clusterManagerId) + .setPosition( + new Messages.PlatformLatLng.Builder() + .setLatitude(1.0 + i) + .setLongitude(2.0 + i) + .build()); + markers.add(builder.build()); + } + + controller.addMarkers(markers); + + // Remove all markers in one batch + controller.removeMarkers(markerIds); + + // Verify removeItems is called exactly once with all 5 markers + Mockito.verify(clusterManagersController, times(1)) + .removeItems( + eq(clusterManagerId), + Mockito.argThat( + markerBuilders -> + markerBuilders.size() == 5 + && markerBuilders + .stream() + .allMatch(mb -> mb.clusterManagerId().equals(clusterManagerId)))); + + // Verify removeItem is never called (we're using batch operation) + Mockito.verify(clusterManagersController, times(0)).removeItem(any()); + } + + @Test + public void controller_BatchChangeMarkersWithClusterManagerChange() { + final String clusterManagerId1 = "cm123"; + final String clusterManagerId2 = "cm456"; + + // First add markers to cluster manager 1 + final List initialMarkers = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + final Messages.PlatformMarker.Builder builder = defaultMarkerBuilder(); + builder + .setMarkerId("marker" + i) + .setClusterManagerId(clusterManagerId1) + .setPosition( + new Messages.PlatformLatLng.Builder() + .setLatitude(1.0 + i) + .setLongitude(2.0 + i) + .build()); + initialMarkers.add(builder.build()); + } + controller.addMarkers(initialMarkers); + + // Reset mock to clear invocation counts + Mockito.reset(clusterManagersController); + + // Now change all markers to cluster manager 2 + final List changedMarkers = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + final Messages.PlatformMarker.Builder builder = defaultMarkerBuilder(); + builder + .setMarkerId("marker" + i) + .setClusterManagerId(clusterManagerId2) // Different cluster manager + .setPosition( + new Messages.PlatformLatLng.Builder() + .setLatitude(3.0 + i) + .setLongitude(4.0 + i) + .build()); + changedMarkers.add(builder.build()); + } + controller.changeMarkers(changedMarkers); + + // Verify removeItems is called exactly once for cluster manager 1 with all 5 markers + Mockito.verify(clusterManagersController, times(1)) + .removeItems( + eq(clusterManagerId1), + Mockito.argThat( + markerBuilders -> + markerBuilders.size() == 5 + && markerBuilders + .stream() + .allMatch(mb -> mb.clusterManagerId().equals(clusterManagerId1)))); + + // Verify addItems is called exactly once for cluster manager 2 with all 5 markers + Mockito.verify(clusterManagersController, times(1)) + .addItems( + eq(clusterManagerId2), + Mockito.argThat( + markerBuilders -> + markerBuilders.size() == 5 + && markerBuilders + .stream() + .allMatch(mb -> mb.clusterManagerId().equals(clusterManagerId2)))); + + // Verify individual operations are never called (we're using batch operations) + Mockito.verify(clusterManagersController, times(0)).addItem(any()); + Mockito.verify(clusterManagersController, times(0)).removeItem(any()); + } + + @Test + public void controller_ChangeMarkerInPlace() { + final Marker marker = mock(Marker.class); + final String markerId = "marker1"; + final String clusterManagerId = "cm123"; + + when(marker.getId()).thenReturn(markerId); + + // Add a clustered marker + final Messages.PlatformMarker.Builder builder = defaultMarkerBuilder(); + builder + .setMarkerId(markerId) + .setClusterManagerId(clusterManagerId) + .setPosition( + new Messages.PlatformLatLng.Builder().setLatitude(1.0).setLongitude(2.0).build()); + controller.addMarkers(Collections.singletonList(builder.build())); + + // Capture the MarkerBuilder passed to addItems + @SuppressWarnings("unchecked") + ArgumentCaptor> captor = ArgumentCaptor.forClass(List.class); + Mockito.verify(clusterManagersController).addItems(eq(clusterManagerId), captor.capture()); + MarkerBuilder capturedMarkerBuilder = captor.getValue().get(0); + + // Simulate cluster render so markerController exists + controller.onClusterItemRendered(capturedMarkerBuilder, marker); + + // Reset to clear invocation counts + Mockito.reset(clusterManagersController); + + // Change marker in place (same clusterManagerId) + final LatLng newLatLng = new LatLng(3.0, 4.0); + builder.setPosition( + new Messages.PlatformLatLng.Builder() + .setLatitude(newLatLng.latitude) + .setLongitude(newLatLng.longitude) + .build()); + controller.changeMarkers(Collections.singletonList(builder.build())); + + // In-place update: marker position is updated directly + Mockito.verify(marker, times(1)).setPosition(newLatLng); + // No re-clustering needed + Mockito.verify(clusterManagersController, times(0)).addItems(any(), any()); + Mockito.verify(clusterManagersController, times(0)).removeItems(any(), any()); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 2caebe121cde..817e60a672ae 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.19.2 +version: 2.19.3 environment: sdk: ^3.9.0 From 3c0cdab2bbb0e98e5e5871f5949e38f21cff6385 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 18 Mar 2026 11:47:12 -0400 Subject: [PATCH 17/55] [google_maps_flutter] Add color scheme support to web implementation (#11279) Web portion of https://github.com/flutter/packages/pull/10471, incorporating review feedback and some other minor cleanup. Part of https://github.com/flutter/flutter/issues/176445 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../google_maps_flutter_web/CHANGELOG.md | 4 +++ .../lib/src/convert.dart | 29 +++++++++++++++++++ .../google_maps_flutter_web/pubspec.yaml | 4 +-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md index 13ea071ea8c4..07df4664dc2a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.2 + +* Adds `colorScheme` support for controlling cloud-based map brightness. + ## 0.6.1 * Batches clustered marker add/remove operations to avoid redundant re-rendering. diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart index ed963650792a..efbf2398ff49 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart @@ -131,6 +131,13 @@ gmaps.MapOptions _configurationAndStyleToGmapsOptions( options.mapId = configuration.mapId; + final gmaps.ColorScheme? jsColorScheme = _gmapTypeColorSchemeForPluginColor( + configuration.colorScheme, + ); + if (jsColorScheme != null) { + options.colorScheme = jsColorScheme; + } + return options; } @@ -155,6 +162,28 @@ gmaps.MapTypeId _gmapTypeIDForPluginType(MapType type) { return gmaps.MapTypeId.ROADMAP; } +gmaps.ColorScheme? _gmapTypeColorSchemeForPluginColor(MapColorScheme? scheme) { + if (scheme == null) { + return null; + } + + switch (scheme) { + case MapColorScheme.dark: + return gmaps.ColorScheme.DARK; + case MapColorScheme.light: + return gmaps.ColorScheme.LIGHT; + case MapColorScheme.followSystem: + return gmaps.ColorScheme.FOLLOW_SYSTEM; + } + // The enum comes from a different package, which could get a new value at + // any time, so provide a fallback that ensures this won't break when used + // with a version that contains new values. This is deliberately outside + // the switch rather than a `default` so that the linter will flag the + // switch as needing an update. + // ignore: dead_code + return null; +} + gmaps.MapOptions _applyInitialPosition( CameraPosition initialPosition, gmaps.MapOptions options, diff --git a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml index 79c431e2a569..423d547c4abe 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_web description: Web platform implementation of google_maps_flutter repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 0.6.1 +version: 0.6.2 environment: sdk: ^3.9.0 @@ -23,7 +23,7 @@ dependencies: flutter_web_plugins: sdk: flutter google_maps: ^8.1.0 - google_maps_flutter_platform_interface: ^2.14.0 + google_maps_flutter_platform_interface: ^2.15.0 sanitize_html: ^2.0.0 stream_transform: ^2.0.0 web: ^1.0.0 From 071ed5b454e05b071ffb9113c33e7a423ca344b0 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 18 Mar 2026 14:12:11 -0400 Subject: [PATCH 18/55] Roll Flutter (stable) from ff37bef60346 to 2c9eb20739df (6 revisions) (#11285) https://github.com/flutter/flutter/compare/ff37bef60346...2c9eb20739df If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-stable-packages Please CC boetger@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Flutter (stable): https://github.com/flutter/flutter/issues/new/choose To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index dfb2b11311b9..ad241bc2bef7 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -ff37bef603469fb030f2b72995ab929ccfc227f0 +2c9eb20739dfec95e2c74bd3dfa4601b0a8a36aa From 94b93d4cd52af75b3298c1966394759a9e611f61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 18:16:39 +0000 Subject: [PATCH 19/55] [dependabot]: Bump androidx.core:core-ktx from 1.13.0 to 1.18.0 in /packages/interactive_media_ads/android (#11255) Bumps androidx.core:core-ktx from 1.13.0 to 1.18.0. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=androidx.core:core-ktx&package-manager=gradle&previous-version=1.13.0&new-version=1.18.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- packages/interactive_media_ads/CHANGELOG.md | 4 ++++ packages/interactive_media_ads/android/build.gradle | 2 +- .../packages/interactive_media_ads/AdsRequestProxyApi.kt | 2 +- .../interactive_media_ads/AdsRequestProxyAPIDelegate.swift | 2 +- packages/interactive_media_ads/pubspec.yaml | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 9a5ffb9eafa8..96ae9a06e90f 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.0+12 + +* Bumps `androidx.core:core-ktx` from 1.13.0 to 1.18.0. + ## 0.3.0+11 * Updates `README` to recommend that a single `AdsLoader` should be used per page not for the entire diff --git a/packages/interactive_media_ads/android/build.gradle b/packages/interactive_media_ads/android/build.gradle index 1f27c4dcab07..605eae7dd14b 100644 --- a/packages/interactive_media_ads/android/build.gradle +++ b/packages/interactive_media_ads/android/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation("androidx.annotation:annotation:1.9.1") - implementation("androidx.core:core-ktx:1.13.0") + implementation("androidx.core:core-ktx:1.18.0") implementation("com.google.ads.interactivemedia.v3:interactivemedia:3.39.0") testImplementation("junit:junit:4.13.2") testImplementation("org.jetbrains.kotlin:kotlin-test") diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt index 7dd835ee8d5c..a9a6b4106656 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * * This must match the version in pubspec.yaml. */ - const val pluginVersion = "0.3.0+11" + const val pluginVersion = "0.3.0+12" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index 5ccb8e09070c..a0074f86e1c2 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.3.0+11" + static let pluginVersion = "0.3.0+12" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 7a886069f1f6..a9a6d0ea061a 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -2,7 +2,7 @@ name: interactive_media_ads description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22 -version: 0.3.0+11 # This must match the version in +version: 0.3.0+12 # This must match the version in # `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and # `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift` From 09ddfca4fe95c5aa90015ce4ecb31485eb7cf3d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 18:24:37 +0000 Subject: [PATCH 20/55] [dependabot]: Bump androidx.core:core from 1.17.0 to 1.18.0 in /packages/local_auth/local_auth_android/android (#11256) Bumps androidx.core:core from 1.17.0 to 1.18.0. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=androidx.core:core&package-manager=gradle&previous-version=1.17.0&new-version=1.18.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- packages/local_auth/local_auth_android/CHANGELOG.md | 4 ++++ packages/local_auth/local_auth_android/android/build.gradle | 2 +- packages/local_auth/local_auth_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md index f0c6a100b30d..75f65e534bf2 100644 --- a/packages/local_auth/local_auth_android/CHANGELOG.md +++ b/packages/local_auth/local_auth_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.6 + +* Bumps androidx.core:core from 1.17.0 to 1.18.0. + ## 2.0.5 * Adds platform-specific setup instructions to README. diff --git a/packages/local_auth/local_auth_android/android/build.gradle b/packages/local_auth/local_auth_android/android/build.gradle index 04a30db5ebbf..f09f0431b7ed 100644 --- a/packages/local_auth/local_auth_android/android/build.gradle +++ b/packages/local_auth/local_auth_android/android/build.gradle @@ -56,7 +56,7 @@ android { } dependencies { - api("androidx.core:core:1.17.0") + api("androidx.core:core:1.18.0") api("androidx.biometric:biometric:1.1.0") api("androidx.fragment:fragment:1.8.9") testImplementation("junit:junit:4.13.2") diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml index 627e6ed396fb..a9f3e4c08b43 100644 --- a/packages/local_auth/local_auth_android/pubspec.yaml +++ b/packages/local_auth/local_auth_android/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_android description: Android implementation of the local_auth plugin. repository: https://github.com/flutter/packages/tree/main/packages/local_auth/local_auth_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 2.0.5 +version: 2.0.6 environment: sdk: ^3.9.0 From ca60bd020f339b5538423b3e60463717a702ddc7 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:26:17 -0400 Subject: [PATCH 21/55] [webview_flutter_wkwebview] Updates platform views on iOS to only have a weak reference to the native view (#11175) Updates `PlatformViewImpl` to only store a weak reference to the native view. This [issue](https://github.com/flutter/flutter/issues/168535) seems to indicate the `PlatformViewsController` is keeping a reference to the native view even after it is removed from the `InstanceManager` in `webview_flutter_wkwebview`. This change should allow the pigeon call to happen when the reference to the Dart instance is deallocated. This should be safe because if the Dart instance is deallocated, then the Widget tree should no longer contain the PlatformView. And therefore the native UIView should no longer need to be used. Nor any callbacks that need the `UIView` since it is not on screen. Potential fix for https://github.com/flutter/flutter/issues/168535, but should still update engine to notify plugins that they are detached before setting `PlatformViewsController` to nil. ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../webview_flutter_wkwebview/CHANGELOG.md | 5 ++ .../darwin/Tests/PlatformViewImplTests.swift | 25 ++++++++++ .../FlutterViewFactory.swift | 48 +++++++++++-------- .../webview_flutter_wkwebview/pubspec.yaml | 2 +- 4 files changed, 59 insertions(+), 21 deletions(-) create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/PlatformViewImplTests.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 2f99c599beb5..5a4511008367 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,8 @@ +## 3.24.1 + +* Updates platform views on iOS to only have a weak reference to the native view. This is a + potential workaround to prevent a crash during the Flutter engine shutdown. See https://github.com/flutter/flutter/issues/168535 + ## 3.24.0 * Adds support for `WebKitWebViewControllerCreationParams.javaScriptCanOpenWindowsAutomatically` to allow JavaScript's diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/PlatformViewImplTests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/PlatformViewImplTests.swift new file mode 100644 index 000000000000..be9a9ff1b64e --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/PlatformViewImplTests.swift @@ -0,0 +1,25 @@ +// 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 XCTest + +@testable import webview_flutter_wkwebview + +#if os(iOS) + import UIKit +#endif + +class PlatformViewImplTests: XCTestCase { + #if os(iOS) + func testPlatformViewImplStoresViewWithAWeakReference() { + var view: UIView? = UIView() + let platformView = PlatformViewImpl(uiView: view!) + + XCTAssertNotNil(platformView.uiView) + + view = nil + XCTAssertNil(platformView.uiView) + } + #endif +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterViewFactory.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterViewFactory.swift index 757a329ea364..25192bab974d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterViewFactory.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterViewFactory.swift @@ -13,23 +13,36 @@ import Foundation #error("Unsupported platform.") #endif -/// Implementation of `FlutterPlatformViewFactory` that retrieves the view from the `WebKitLibraryPigeonInstanceManager`. -class FlutterViewFactory: NSObject, FlutterPlatformViewFactory { - unowned let instanceManager: WebKitLibraryPigeonInstanceManager - - #if os(iOS) - class PlatformViewImpl: NSObject, FlutterPlatformView { - let uiView: UIView +#if os(iOS) + class PlatformViewImpl: NSObject, FlutterPlatformView { + // TODO(bparrishMines): Change to strong reference once this issue is fixed in the engine and + // makes it to stable. See https://github.com/flutter/flutter/issues/168535. + // The InstanceManager used by pigeon adds an associated object to added instances that makes a message call when + // they are deallocated. This sets a weak reference to the underlying UIView to prevent a crash where the UIView is + // no longer referenced by the plugin, but the FlutterViewController still maintains a transitive reference to it + // when the BinaryMessenger becomes invalid. + weak var uiView: UIView? - init(uiView: UIView) { - self.uiView = uiView - } + init(uiView: UIView) { + self.uiView = uiView + } - func view() -> UIView { + func view() -> UIView { + if let uiView = uiView { return uiView } + + NSLog( + "WebViewFlutterPluginError: UIView has been deallocated, but is still being requested as a PlatformView." + ) + return UIView() } - #endif + } +#endif + +/// Implementation of `FlutterPlatformViewFactory` that retrieves the view from the `WebKitLibraryPigeonInstanceManager`. +class FlutterViewFactory: NSObject, FlutterPlatformViewFactory { + unowned let instanceManager: WebKitLibraryPigeonInstanceManager init(instanceManager: WebKitLibraryPigeonInstanceManager) { self.instanceManager = instanceManager @@ -42,14 +55,9 @@ class FlutterViewFactory: NSObject, FlutterPlatformViewFactory { let identifier: Int64 = args is Int64 ? args as! Int64 : Int64(args as! Int32) let instance: AnyObject? = instanceManager.instance(forIdentifier: identifier) - if let instance = instance as? FlutterPlatformView { - instance.view().frame = frame - return instance - } else { - let view = instance as! UIView - view.frame = frame - return PlatformViewImpl(uiView: view) - } + let view = instance as! UIView + view.frame = frame + return PlatformViewImpl(uiView: view) } #elseif os(macOS) func create( diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 7217c1c55043..d61c43b4012a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.24.0 +version: 3.24.1 environment: sdk: ^3.9.0 From 43de301d0901cac145b39a994fe3b58889e00b85 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 18 Mar 2026 15:08:08 -0400 Subject: [PATCH 22/55] [google_maps_flutter] Add color scheme support to app-facing package (#11280) App-facing portion of https://github.com/flutter/packages/pull/10471, incorporating review feedback and some other minor cleanup. Fixes https://github.com/flutter/flutter/issues/176445 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../google_maps_flutter/CHANGELOG.md | 4 +++ .../lib/google_maps_flutter.dart | 1 + .../lib/src/google_map.dart | 10 ++++++ .../google_maps_flutter/pubspec.yaml | 6 ++-- .../test/google_map_test.dart | 33 +++++++++++++++++++ 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md index dfc5bf9edd4a..3cdccf6d0f0e 100644 --- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.16.0 + +* Adds `colorScheme` support for web cloud-based maps styling brightness. + ## 2.15.0 * Adds support for advanced markers, and new example pages showing their usage. diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart index 7ca650dceb75..267b6cb9d77d 100644 --- a/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart @@ -41,6 +41,7 @@ export 'package:google_maps_flutter_platform_interface/google_maps_flutter_platf LatLng, LatLngBounds, MapBitmapScaling, + MapColorScheme, MapStyleException, MapType, Marker, diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart index 8a5e2e42936d..7d82dc7cc31e 100644 --- a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart +++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart @@ -144,6 +144,7 @@ class GoogleMap extends StatefulWidget { this.onTap, this.onLongPress, this.markerType = GoogleMapMarkerType.marker, + this.colorScheme, String? mapId, @Deprecated('cloudMapId is deprecated. Use mapId instead.') String? cloudMapId, @@ -411,6 +412,14 @@ class GoogleMap extends StatefulWidget { /// may result in unexpected behavior. final GoogleMapMarkerType markerType; + /// Color scheme for the cloud-style map. Web only. + /// + /// The colorScheme option can only be set when the map is initialized; + /// setting this option after the map is created will have no effect. + /// + /// See https://developers.google.com/maps/documentation/javascript/mapcolorscheme for more details. + final MapColorScheme? colorScheme; + /// Creates a [State] for this [GoogleMap]. @override State createState() => _GoogleMapState(); @@ -767,6 +776,7 @@ MapConfiguration _configurationFromMapWidget(GoogleMap map) { trafficEnabled: map.trafficEnabled, buildingsEnabled: map.buildingsEnabled, markerType: mapConfigurationMarkerType, + colorScheme: map.colorScheme, // A null mapId in the widget means no map ID, which is expressed as '' in // the configuration to distinguish from no change (null). mapId: map.mapId ?? '', diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index 2c82f88af681..39cf1dac0456 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter description: A Flutter plugin for integrating Google Maps in iOS and Android applications. repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.15.0 +version: 2.16.0 environment: sdk: ^3.10.0 @@ -23,8 +23,8 @@ dependencies: sdk: flutter google_maps_flutter_android: ^2.19.1 google_maps_flutter_ios: ^2.18.0 - google_maps_flutter_platform_interface: ^2.14.2 - google_maps_flutter_web: ^0.6.1 + google_maps_flutter_platform_interface: ^2.15.0 + google_maps_flutter_web: ^0.6.2 dev_dependencies: flutter_test: diff --git a/packages/google_maps_flutter/google_maps_flutter/test/google_map_test.dart b/packages/google_maps_flutter/google_maps_flutter/test/google_map_test.dart index 86e12c28c4f6..9d3167e86af5 100644 --- a/packages/google_maps_flutter/google_maps_flutter/test/google_map_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter/test/google_map_test.dart @@ -711,6 +711,39 @@ void main() { expect(map.mapConfiguration.markerType, MarkerType.marker); }); + testWidgets('Is default color scheme null', (WidgetTester tester) async { + await tester.pumpWidget( + const Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)), + ), + ), + ); + + final PlatformMapStateRecorder map = platform.lastCreatedMap; + + expect(map.mapConfiguration.colorScheme, null); + }); + + testWidgets('Can set color scheme to non-default', ( + WidgetTester tester, + ) async { + await tester.pumpWidget( + const Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)), + colorScheme: MapColorScheme.light, + ), + ), + ); + + final PlatformMapStateRecorder map = platform.lastCreatedMap; + + expect(map.mapConfiguration.colorScheme, MapColorScheme.light); + }); + testWidgets('Can update mapId', (WidgetTester tester) async { await tester.pumpWidget( const Directionality( From b3a69599c7b8d2f97dc7f601df59b09f6a47a8ed Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 18 Mar 2026 16:24:23 -0400 Subject: [PATCH 23/55] [local_auth] Convert to Kotlin gradle for the plugin build files (#11169) Following up from https://github.com/flutter/packages/pull/11127, this is the initial example of converting a plugin build, rather than an example app build, to Kotlin gradle. This conversion was done manually, but closely referencing the current plugin template files. It differs mostly in not having the parts that are specific to the use of Kotlin source files, since `local_auth` is still Java-only. Later (when we start adopting Kotlin Pigeon generation everywhere, for instance) some of the diffs relative to the template files will go away. Unlike https://github.com/flutter/packages/pull/11127 this did not require tool changes, as it turns out that the previous changes were enough to handle these files, but I did add more tests. As with https://github.com/flutter/packages/pull/11127 I did not attempt to comprehensively duplicate all Groovy tests, since we should be able to relatively quickly convert everything in the repo, and then pull out the Groovy support and update all the tests to Kotlin. Note that this does *not* convert the plugin's example app to Kotlin gradle, only the plugin itself. The example app for plugins are non-trivial enough (due to native tests) that they should be converted separately. This has the bonus effect of validating that the plugin migration didn't require any changes in the client app. Part of https://github.com/flutter/flutter/issues/176065 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../local_auth_android/CHANGELOG.md | 4 + .../{build.gradle => build.gradle.kts} | 35 +-- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../local_auth_android/pubspec.yaml | 2 +- .../tool/test/gradle_check_command_test.dart | 215 +++++++++++++++--- 6 files changed, 213 insertions(+), 45 deletions(-) rename packages/local_auth/local_auth_android/android/{build.gradle => build.gradle.kts} (58%) delete mode 100644 packages/local_auth/local_auth_android/android/settings.gradle create mode 100644 packages/local_auth/local_auth_android/android/settings.gradle.kts diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md index 75f65e534bf2..5e329a9a2d26 100644 --- a/packages/local_auth/local_auth_android/CHANGELOG.md +++ b/packages/local_auth/local_auth_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.7 + +* Updates build files from Groovy to Kotlin. + ## 2.0.6 * Bumps androidx.core:core from 1.17.0 to 1.18.0. diff --git a/packages/local_auth/local_auth_android/android/build.gradle b/packages/local_auth/local_auth_android/android/build.gradle.kts similarity index 58% rename from packages/local_auth/local_auth_android/android/build.gradle rename to packages/local_auth/local_auth_android/android/build.gradle.kts index f09f0431b7ed..11af0e4afa4e 100644 --- a/packages/local_auth/local_auth_android/android/build.gradle +++ b/packages/local_auth/local_auth_android/android/build.gradle.kts @@ -1,5 +1,5 @@ -group = 'io.flutter.plugins.localauth' -version = '1.0-SNAPSHOT' +group = "io.flutter.plugins.localauth" +version = "1.0-SNAPSHOT" buildscript { repositories { @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.13.1' + classpath("com.android.tools.build:gradle:8.13.1") } } @@ -19,15 +19,17 @@ rootProject.allprojects { } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "io.flutter.plugins.localauth" compileSdk = flutter.compileSdkVersion defaultConfig { - minSdkVersion 24 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + minSdk = 24 + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } compileOptions { @@ -35,21 +37,22 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - lintOptions { + lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } - testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/local_auth/local_auth_android/android/settings.gradle b/packages/local_auth/local_auth_android/android/settings.gradle deleted file mode 100644 index dca8c623fdf6..000000000000 --- a/packages/local_auth/local_auth_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'local_auth' diff --git a/packages/local_auth/local_auth_android/android/settings.gradle.kts b/packages/local_auth/local_auth_android/android/settings.gradle.kts new file mode 100644 index 000000000000..3d731a10b076 --- /dev/null +++ b/packages/local_auth/local_auth_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "local_auth" diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml index a9f3e4c08b43..a53ab31388ce 100644 --- a/packages/local_auth/local_auth_android/pubspec.yaml +++ b/packages/local_auth/local_auth_android/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_android description: Android implementation of the local_auth plugin. repository: https://github.com/flutter/packages/tree/main/packages/local_auth/local_auth_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 2.0.6 +version: 2.0.7 environment: sdk: ^3.9.0 diff --git a/script/tool/test/gradle_check_command_test.dart b/script/tool/test/gradle_check_command_test.dart index 7821995c0519..c4fe9345d007 100644 --- a/script/tool/test/gradle_check_command_test.dart +++ b/script/tool/test/gradle_check_command_test.dart @@ -19,6 +19,8 @@ void main() { late Directory packagesDir; const groovyJavaIncompatabilityIndicator = 'build.gradle must set an explicit Java compatibility version.'; + const kotlinJavaIncompatabilityIndicator = + 'build.gradle.kts must set an explicit Java compatibility version.'; setUp(() { final GitDir gitDir; @@ -128,6 +130,101 @@ dependencies { '''); } + /// Writes a fake android/build.gradle.kts file for plugin [package] with the + /// given options. + void writeFakeKotlinPluginBuildGradle( + RepositoryPackage package, { + bool includeLanguageVersion = false, + bool includeSourceCompat = false, + bool includeTargetCompat = false, + bool commentSourceLanguage = false, + bool includeNamespace = true, + bool commentNamespace = false, + bool warningsConfigured = true, + String compileSdk = '36', + bool includeKotlinOptions = true, + bool commentKotlinOptions = false, + bool useDeprecatedJvmTargetStyle = false, + int jvmTargetValue = 17, + int kotlinJvmValue = 17, + }) { + final File buildGradle = package + .platformDirectory(FlutterPlatform.android) + .childFile('build.gradle.kts'); + buildGradle.createSync(recursive: true); + + const warningConfig = ''' + lint { + checkAllWarnings = true + warningsAsErrors = true + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) + baseline = file("lint-baseline.xml") + } +'''; + final javaSection = + ''' +java { + toolchain { + ${commentSourceLanguage ? '// ' : ''}languageVersion = JavaLanguageVersion.of(8) + } +} + +'''; + final sourceCompat = + '${commentSourceLanguage ? '// ' : ''}sourceCompatibility = JavaVersion.VERSION_$jvmTargetValue'; + final targetCompat = + '${commentSourceLanguage ? '// ' : ''}targetCompatibility = JavaVersion.VERSION_$jvmTargetValue'; + final namespace = + ' ${commentNamespace ? '// ' : ''}namespace = "$_defaultFakeNamespace"'; + final kotlinJvmTarget = useDeprecatedJvmTargetStyle + ? '$jvmTargetValue' + : 'JavaVersion.VERSION_$kotlinJvmValue.toString()'; + final kotlinConfig = + ''' + ${commentKotlinOptions ? '//' : ''}kotlinOptions { + ${commentKotlinOptions ? '//' : ''}jvmTarget = $kotlinJvmTarget + ${commentKotlinOptions ? '//' : ''}}'''; + + buildGradle.writeAsStringSync(''' +group = "dev.flutter.plugins.fake" +version = "1.0-SNAPSHOT" + +buildscript { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' + +${includeLanguageVersion ? javaSection : ''} +android { +${includeNamespace ? namespace : ''} + compileSdk = $compileSdk + + defaultConfig { + minSdk = 30 + } +${warningsConfigured ? warningConfig : ''} + compileOptions { + ${includeSourceCompat ? sourceCompat : ''} + ${includeTargetCompat ? targetCompat : ''} + } + ${includeKotlinOptions ? kotlinConfig : ''} + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } +} + +dependencies { + implementation("fake.package:fake:1.0.0") +} +'''); + } + /// Writes a fake android/build.gradle file for an example [package] with the /// given options. // TODO(stuartmorgan): Once all packages are migrated to Kotlin, remove all @@ -542,32 +639,65 @@ flutter { ); }); - test('fails when build.gradle has no java compatibility version', () async { - final RepositoryPackage package = createFakePlugin( - 'a_plugin', - packagesDir, - examples: [], - ); - writeFakeGroovyPluginBuildGradle(package); - writeFakeManifest(package); + test( + 'fails when build.gradle has no java compatibility version - groovy', + () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakeGroovyPluginBuildGradle(package); + writeFakeManifest(package); - Error? commandError; - final List output = await runCapturingPrint( - runner, - ['gradle-check'], - errorHandler: (Error e) { - commandError = e; - }, - ); + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['gradle-check'], + errorHandler: (Error e) { + commandError = e; + }, + ); - expect(commandError, isA()); - expect( - output, - containsAllInOrder([ - contains(groovyJavaIncompatabilityIndicator), - ]), - ); - }); + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains(groovyJavaIncompatabilityIndicator), + ]), + ); + }, + ); + + test( + 'fails when build.gradle has no java compatibility version - kotlin', + () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakeKotlinPluginBuildGradle(package); + writeFakeManifest(package); + + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['gradle-check'], + errorHandler: (Error e) { + commandError = e; + }, + ); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains(kotlinJavaIncompatabilityIndicator), + ]), + ); + }, + ); test( 'fails when sourceCompatibility is provided with out targetCompatibility', @@ -774,7 +904,7 @@ flutter { test('does not require java version in examples - kotlin', () async { const pluginName = 'a_plugin'; final RepositoryPackage package = createFakePlugin(pluginName, packagesDir); - writeFakeGroovyPluginBuildGradle(package, includeLanguageVersion: true); + writeFakeKotlinPluginBuildGradle(package, includeLanguageVersion: true); writeFakeManifest(package); final RepositoryPackage example = package.getExamples().first; writeFakeKotlinExampleBuildGradles(example, pluginName: pluginName); @@ -888,7 +1018,7 @@ flutter { }, ); - test('fails when namespace is missing', () async { + test('fails when namespace is missing - groovy', () async { final RepositoryPackage package = createFakePlugin( 'a_plugin', packagesDir, @@ -919,6 +1049,37 @@ flutter { ); }); + test('fails when namespace is missing - kotlin', () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir, + examples: [], + ); + writeFakeKotlinPluginBuildGradle( + package, + includeLanguageVersion: true, + includeNamespace: false, + ); + writeFakeManifest(package); + + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['gradle-check'], + errorHandler: (Error e) { + commandError = e; + }, + ); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('build.gradle.kts must set a "namespace"'), + ]), + ); + }); + test('fails when namespace is missing from example - groovy', () async { const pluginName = 'a_plugin'; final RepositoryPackage package = createFakePlugin(pluginName, packagesDir); @@ -953,7 +1114,7 @@ flutter { test('fails when namespace is missing from example - kotlin', () async { const pluginName = 'a_plugin'; final RepositoryPackage package = createFakePlugin(pluginName, packagesDir); - writeFakeGroovyPluginBuildGradle(package, includeLanguageVersion: true); + writeFakeKotlinPluginBuildGradle(package, includeLanguageVersion: true); writeFakeManifest(package); final RepositoryPackage example = package.getExamples().first; writeFakeKotlinExampleBuildGradles( From 99155a84f372cef1c5fc2d03c54d6980fb9df808 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 19 Mar 2026 10:27:29 -0400 Subject: [PATCH 24/55] Roll Flutter from d117642c18e0 to dd64978dfae1 (24 revisions) (#11281) https://github.com/flutter/flutter/compare/d117642c18e0...dd64978dfae1 2026-03-18 engine-flutter-autoroll@skia.org Roll Skia from 2fb5fa71eb12 to f0a13e5efbad (2 revisions) (flutter/flutter#183830) 2026-03-18 engine-flutter-autoroll@skia.org Roll Skia from ae3d36cb9e29 to 2fb5fa71eb12 (3 revisions) (flutter/flutter#183823) 2026-03-18 94012149+richardexfo@users.noreply.github.com Linux reuse sibling (flutter/flutter#183653) 2026-03-18 engine-flutter-autoroll@skia.org Roll Skia from 84a180a1fa80 to ae3d36cb9e29 (4 revisions) (flutter/flutter#183812) 2026-03-18 1961493+harryterkelsen@users.noreply.github.com fix(web): handle asynchronously disposed platform views (flutter/flutter#183666) 2026-03-17 87018443+mayanksharma9@users.noreply.github.com (Test cross-imports) Remove legacy Material import from sliver_constraints_test (flutter/flutter#183351) 2026-03-17 74057391+jhonathanqz@users.noreply.github.com Fix Android Studio pluginsPath when version is unknown (do not use 0.0) (flutter/flutter#182681) 2026-03-17 50643541+Mairramer@users.noreply.github.com Fixes animation glitch into bottom sheet (flutter/flutter#183303) 2026-03-17 ahmedsameha1@gmail.com Handle#6537 second grouped test (flutter/flutter#182529) 2026-03-17 ahmedsameha1@gmail.com Add a Clarification for the docs of suggestionsBuilder of SearchAnchor (flutter/flutter#183106) 2026-03-17 nate.w5687@gmail.com Remove obsolete null checks from style guide (flutter/flutter#181703) 2026-03-17 jason-simmons@users.noreply.github.com [Impeller] Do not delete the GL object in a HandleGLES if the handle has a cleanup callback (flutter/flutter#183561) 2026-03-17 jason-simmons@users.noreply.github.com Encode source file patches as UTF-8 in the code formatter script (flutter/flutter#183761) 2026-03-17 82673815+gktirkha@users.noreply.github.com Fix widget inspector control layout and add safe area regression test (flutter/flutter#180789) 2026-03-17 43054281+camsim99@users.noreply.github.com Reland "[Android] Add mechanism for setting Android engine flags via Android manifest (take 2)" (flutter/flutter#182522) 2026-03-17 1961493+harryterkelsen@users.noreply.github.com fix(web): fix crash in Skwasm when transferring non-transferable texture sources (flutter/flutter#183799) 2026-03-17 engine-flutter-autoroll@skia.org Roll Skia from dba893a44d7a to 84a180a1fa80 (7 revisions) (flutter/flutter#183803) 2026-03-17 brunocorona.alcantar@gmail.com Framework: Improve DropdownButton selectedItemBuilder assertion (flutter/flutter#183732) 2026-03-17 brunocorona.alcantar@gmail.com Add mainAxisAlignment to NavigationRail (flutter/flutter#183514) 2026-03-17 34871572+gmackall@users.noreply.github.com Update android triage process to not look at unassigned p1s every week (flutter/flutter#183805) 2026-03-17 30870216+gaaclarke@users.noreply.github.com Adds macos impeller new gallery transition perf test. (flutter/flutter#183802) 2026-03-17 1961493+harryterkelsen@users.noreply.github.com fix(web_ui): move prepareToDraw after raster to improve concurrency and stability (flutter/flutter#183791) 2026-03-17 rmacnak@google.com [build] Generate debug info for assembly. (flutter/flutter#183425) 2026-03-17 mdebbar@google.com [web] Fix occasional failure to find Chrome tab (flutter/flutter#183737) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC boetger@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index d9d23f301e6c..70f45c991e52 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -d117642c18e0d5e3a96ae00d4340b1b0724de24c +dd64978dfae115cdac5f77e8f47030082902eaf5 From c1f116788a9c0187ac566517eecaf31a49c2bbf7 Mon Sep 17 00:00:00 2001 From: Christoph Deil Date: Thu, 19 Mar 2026 16:06:43 +0100 Subject: [PATCH 25/55] [camera] Make Optional.of constructor const (#11247) Resolves old TODO from 2023 ( https://github.com/flutter/packages/commit/6e09f5b0d26f77bf70ab27d6ab4c7f8b46968c34 committed by @camsim99 ) by making the `Optional.of` constructor `const` and removing the obsolete runtime `ArgumentError.checkNotNull` guard that was only needed during Dart 2's mixed-mode (unsound null safety) era. Mixed-mode execution was removed in Dart 3.0, so this is dead code. Not a breaking change. Note that the entire `Optional` class (and surrounding `CameraController`) is copy-pasted across 4 files in the camera packages. Would you prefer to move `Optional` into `camera_platform_interface` to share it, or replace it entirely e.g. with a private sentinel pattern in `copyWith` (as the Flutter framework does for `ThemeData`)? ## Pre-Review Checklist --- packages/camera/camera/CHANGELOG.md | 6 +++++- packages/camera/camera/lib/src/camera_controller.dart | 8 +------- packages/camera/camera/pubspec.yaml | 2 +- packages/camera/camera/test/camera_test.dart | 2 +- .../camera_android/example/lib/camera_controller.dart | 8 +------- .../example/lib/camera_controller.dart | 8 +------- .../example/lib/camera_controller.dart | 8 +------- 7 files changed, 11 insertions(+), 31 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 397973454698..557e16ea59e4 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.12.0+1 + +* Makes `Optional.of` constructor `const`. + ## 0.12.0 * Adds support for video stabilization. @@ -838,4 +842,4 @@ Method changes: ## 0.0.1 -* Initial release \ No newline at end of file +* Initial release diff --git a/packages/camera/camera/lib/src/camera_controller.dart b/packages/camera/camera/lib/src/camera_controller.dart index 53e029b0faad..d941c2e85f66 100644 --- a/packages/camera/camera/lib/src/camera_controller.dart +++ b/packages/camera/camera/lib/src/camera_controller.dart @@ -1049,13 +1049,7 @@ class Optional extends IterableBase { const Optional.absent() : _value = null; /// Constructs an Optional of the given [value]. - /// - /// Throws [ArgumentError] if [value] is null. - Optional.of(T value) : _value = value { - // TODO(cbracken): Delete and make this ctor const once mixed-mode - // execution is no longer around. - ArgumentError.checkNotNull(value); - } + const Optional.of(T value) : _value = value; /// Constructs an Optional of the given [value]. /// diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 1c9e8bb0b145..2d5967181c32 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing 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.12.0 +version: 0.12.0+1 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera/test/camera_test.dart b/packages/camera/camera/test/camera_test.dart index 97f4f2b424a9..913d3391cd9e 100644 --- a/packages/camera/camera/test/camera_test.dart +++ b/packages/camera/camera/test/camera_test.dart @@ -3664,7 +3664,7 @@ void main() { cameraController.value = cameraController.value.copyWith( isPreviewPaused: false, deviceOrientation: DeviceOrientation.portraitUp, - lockedCaptureOrientation: Optional.of( + lockedCaptureOrientation: const Optional.of( DeviceOrientation.landscapeRight, ), ); diff --git a/packages/camera/camera_android/example/lib/camera_controller.dart b/packages/camera/camera_android/example/lib/camera_controller.dart index 8215ef8fed54..33cafe13e447 100644 --- a/packages/camera/camera_android/example/lib/camera_controller.dart +++ b/packages/camera/camera_android/example/lib/camera_controller.dart @@ -478,13 +478,7 @@ class Optional extends IterableBase { const Optional.absent() : _value = null; /// Constructs an Optional of the given [value]. - /// - /// Throws [ArgumentError] if [value] is null. - Optional.of(T value) : _value = value { - // TODO(cbracken): Delete and make this ctor const once mixed-mode - // execution is no longer around. - ArgumentError.checkNotNull(value); - } + const Optional.of(T value) : _value = value; /// Constructs an Optional of the given [value]. /// diff --git a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart index ae95d306d52a..7d456043fa4a 100644 --- a/packages/camera/camera_android_camerax/example/lib/camera_controller.dart +++ b/packages/camera/camera_android_camerax/example/lib/camera_controller.dart @@ -898,13 +898,7 @@ class Optional extends IterableBase { const Optional.absent() : _value = null; /// Constructs an Optional of the given [value]. - /// - /// Throws [ArgumentError] if [value] is null. - Optional.of(T value) : _value = value { - // TODO(cbracken): Delete and make this ctor const once mixed-mode - // execution is no longer around. - ArgumentError.checkNotNull(value); - } + const Optional.of(T value) : _value = value; /// Constructs an Optional of the given [value]. /// diff --git a/packages/camera/camera_avfoundation/example/lib/camera_controller.dart b/packages/camera/camera_avfoundation/example/lib/camera_controller.dart index 84850b8d928f..ed3a8e5a953d 100644 --- a/packages/camera/camera_avfoundation/example/lib/camera_controller.dart +++ b/packages/camera/camera_avfoundation/example/lib/camera_controller.dart @@ -502,13 +502,7 @@ class Optional extends IterableBase { const Optional.absent() : _value = null; /// Constructs an Optional of the given [value]. - /// - /// Throws [ArgumentError] if [value] is null. - Optional.of(T value) : _value = value { - // TODO(cbracken): Delete and make this ctor const once mixed-mode - // execution is no longer around. - ArgumentError.checkNotNull(value); - } + const Optional.of(T value) : _value = value; /// Constructs an Optional of the given [value]. /// From 8dcfd1186ef968be1398f80432f94bb0a36e6d9e Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Thu, 19 Mar 2026 11:19:22 -0700 Subject: [PATCH 26/55] [ci] grants write permission to create branch in remote (#11269) The branch release workflow failed with ``` Parsing package "packages/packages/go_router"... Creating new branch "go_router-23134404669-1"... Pushing branch go_router-23134404669-1 to remote origin... Unhandled exception: ProcessException: remote: Permission to flutter/packages.git denied to github-actions[bot]. fatal: unable to access 'https://github.com/flutter/packages/': The requested URL returned error: 403 Command: git push origin go_router-23134404669-1 ``` https://github.com/flutter/packages/actions/runs/23134404669/job/67194648551 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .github/workflows/batch_release_pr.yml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/batch_release_pr.yml b/.github/workflows/batch_release_pr.yml index 12e0278fb96c..43d84564242c 100644 --- a/.github/workflows/batch_release_pr.yml +++ b/.github/workflows/batch_release_pr.yml @@ -5,10 +5,14 @@ on: types: [batch-release-pr] jobs: - create_release_pr: + create_batch_release_branch: runs-on: ubuntu-latest + permissions: + contents: write # Grants write permission to create a branch. env: BRANCH_NAME: ${{ github.event.client_payload.package }}-${{ github.run_id }}-${{ github.run_attempt }} + outputs: + branch_created: ${{ steps.check-branch-exists.outputs.exists }} steps: - name: checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd @@ -36,8 +40,20 @@ jobs: echo "exists=false" >> $GITHUB_OUTPUT fi + create_release_pr: + needs: create_batch_release_branch + if: needs.create_batch_release_branch.outputs.branch_created == 'true' + runs-on: ubuntu-latest + permissions: + pull-requests: write # Grants write permission to create a PR. + env: + BRANCH_NAME: ${{ github.event.client_payload.package }}-${{ github.run_id }}-${{ github.run_attempt }} + steps: + - name: checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + with: + ref: ${{ env.BRANCH_NAME }} - name: Create batch release PR - if: steps.check-branch-exists.outputs.exists == 'true' uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 with: token: ${{ secrets.GITHUB_TOKEN }} From 5a5192458205f7628743bb4a7f5e47f55feebfb1 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Wed, 25 Mar 2026 06:23:25 -0500 Subject: [PATCH 27/55] [two_dimensional_scrollables] Fix span border decorations in flipped cross axes (#11334) Fixes https://github.com/flutter/flutter/issues/177117 Fixes an issue in two_dimensional_scrollables where TableSpan vertical borders were incorrectly flipped when ScrollableDetails.horizontal was reversed. The SpanBorder.paint method previously used its own axisDirection to determine leading and trailing edge flipping for a cross-axis border component. This works in natural scrolling directions, but creates an inverted orientation assumption when the perpendicular axis is reversed. Does not affect TreeView, since that widget does not allow for reversed axes. ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../two_dimensional_scrollables/CHANGELOG.md | 4 + .../lib/src/common/span.dart | 22 ++- .../lib/src/table_view/table.dart | 127 +++++++++------ .../lib/src/tree_view/render_tree.dart | 16 +- .../lib/src/tree_view/tree_span.dart | 10 +- .../two_dimensional_scrollables/pubspec.yaml | 2 +- .../test/table_view/table_span_test.dart | 151 +++++++++++++++++- 7 files changed, 274 insertions(+), 58 deletions(-) diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index a201be420b1f..c9332dcb13ac 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.9 + +* Fixes TableSpan borders being flipped when one or both axis directions are reversed. + ## 0.3.8 * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. diff --git a/packages/two_dimensional_scrollables/lib/src/common/span.dart b/packages/two_dimensional_scrollables/lib/src/common/span.dart index 27e40b4ae7e4..84d6f64da9ed 100644 --- a/packages/two_dimensional_scrollables/lib/src/common/span.dart +++ b/packages/two_dimensional_scrollables/lib/src/common/span.dart @@ -439,17 +439,24 @@ class SpanBorder { /// cells. void paint(SpanDecorationPaintDetails details, BorderRadius? borderRadius) { final AxisDirection axisDirection = details.axisDirection; + final AxisDirection? crossAxisDirection = details.crossAxisDirection; switch (axisDirectionToAxis(axisDirection)) { case Axis.horizontal: + final bool isLeadingTop = + crossAxisDirection == null || + crossAxisDirection == AxisDirection.down; final border = Border( - top: axisDirection == AxisDirection.right ? leading : trailing, - bottom: axisDirection == AxisDirection.right ? trailing : leading, + top: isLeadingTop ? leading : trailing, + bottom: isLeadingTop ? trailing : leading, ); border.paint(details.canvas, details.rect, borderRadius: borderRadius); case Axis.vertical: + final bool isLeadingLeft = + crossAxisDirection == null || + crossAxisDirection == AxisDirection.right; final border = Border( - left: axisDirection == AxisDirection.down ? leading : trailing, - right: axisDirection == AxisDirection.down ? trailing : leading, + left: isLeadingLeft ? leading : trailing, + right: isLeadingLeft ? trailing : leading, ); border.paint(details.canvas, details.rect, borderRadius: borderRadius); } @@ -468,6 +475,7 @@ class SpanDecorationPaintDetails { required this.canvas, required this.rect, required this.axisDirection, + this.crossAxisDirection, }); /// The [Canvas] that the [SpanDecoration] will be painted to. @@ -487,4 +495,10 @@ class SpanDecorationPaintDetails { /// [AxisDirection.right], which would be [Axis.horizontal], a row is being /// painted. final AxisDirection axisDirection; + + /// The [AxisDirection] of the [Axis] perpendicular to the [Span]. + /// + /// Used to determine the correct leading/trailing edge when deciding how to + /// paint borders or apply padding. + final AxisDirection? crossAxisDirection; } diff --git a/packages/two_dimensional_scrollables/lib/src/table_view/table.dart b/packages/two_dimensional_scrollables/lib/src/table_view/table.dart index 3f26dd00dfd3..e0dd64e9e0b0 100644 --- a/packages/two_dimensional_scrollables/lib/src/table_view/table.dart +++ b/packages/two_dimensional_scrollables/lib/src/table_view/table.dart @@ -1336,7 +1336,6 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { final foregroundColumns = {}; final backgroundColumns = {}; - final TableSpan rowSpan = _rowMetrics[leadingVicinity.row]!.configuration; for ( int column = leadingVicinity.column; column <= trailingVicinity.column; @@ -1415,27 +1414,45 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { required RenderBox trailingCell, required bool consumePadding, }) { - final ({double leading, double trailing}) offsetCorrection = - axisDirectionIsReversed(verticalAxisDirection) - ? ( - leading: leadingCell.size.height, - trailing: trailingCell.size.height, - ) - : (leading: 0.0, trailing: 0.0); - return Rect.fromPoints( - parentDataOf(leadingCell).paintOffset! + - offset - - Offset( - consumePadding ? columnSpan.padding.leading : 0.0, - rowSpan.padding.leading - offsetCorrection.leading, - ), - parentDataOf(trailingCell).paintOffset! + - offset + - Offset(trailingCell.size.width, trailingCell.size.height) + - Offset( - consumePadding ? columnSpan.padding.trailing : 0.0, - rowSpan.padding.trailing - offsetCorrection.trailing, - ), + final bool reversedH = axisDirectionIsReversed( + horizontalAxisDirection, + ); + final bool reversedV = axisDirectionIsReversed(verticalAxisDirection); + final TableSpan leadingRowSpan = + _rowMetrics[parentDataOf(leadingCell).tableVicinity.row]! + .configuration; + final TableSpan trailingRowSpan = + _rowMetrics[parentDataOf(trailingCell).tableVicinity.row]! + .configuration; + + final double leftExpansion = consumePadding + ? (reversedH + ? columnSpan.padding.trailing + : columnSpan.padding.leading) + : 0.0; + final double rightExpansion = consumePadding + ? (reversedH + ? columnSpan.padding.leading + : columnSpan.padding.trailing) + : 0.0; + final double topExpansion = reversedV + ? trailingRowSpan.padding.trailing + : leadingRowSpan.padding.leading; + final double bottomExpansion = reversedV + ? leadingRowSpan.padding.leading + : trailingRowSpan.padding.trailing; + + final Offset p1 = parentDataOf(leadingCell).paintOffset! + offset; + final Offset p2 = + parentDataOf(trailingCell).paintOffset! + + offset + + Offset(trailingCell.size.width, trailingCell.size.height); + + return Rect.fromLTRB( + math.min(p1.dx, p2.dx - trailingCell.size.width) - leftExpansion, + math.min(p1.dy, p2.dy - trailingCell.size.height) - topExpansion, + math.max(p1.dx + leadingCell.size.width, p2.dx) + rightExpansion, + math.max(p1.dy + leadingCell.size.height, p2.dy) + bottomExpansion, ); } @@ -1471,8 +1488,6 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { // Row decorations final foregroundRows = {}; final backgroundRows = {}; - final TableSpan columnSpan = - _columnMetrics[leadingVicinity.column]!.configuration; for (int row = leadingVicinity.row; row <= trailingVicinity.row; row++) { TableSpan rowSpan = _rowMetrics[row]!.configuration; if (rowSpan.backgroundDecoration != null || @@ -1547,27 +1562,41 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { required RenderBox trailingCell, required bool consumePadding, }) { - final ({double leading, double trailing}) offsetCorrection = - axisDirectionIsReversed(horizontalAxisDirection) - ? ( - leading: leadingCell.size.width, - trailing: trailingCell.size.width, - ) - : (leading: 0.0, trailing: 0.0); - return Rect.fromPoints( - parentDataOf(leadingCell).paintOffset! + - offset - - Offset( - columnSpan.padding.leading - offsetCorrection.leading, - consumePadding ? rowSpan.padding.leading : 0.0, - ), - parentDataOf(trailingCell).paintOffset! + - offset + - Offset(trailingCell.size.width, trailingCell.size.height) + - Offset( - columnSpan.padding.leading - offsetCorrection.trailing, - consumePadding ? rowSpan.padding.trailing : 0.0, - ), + final bool reversedH = axisDirectionIsReversed( + horizontalAxisDirection, + ); + final bool reversedV = axisDirectionIsReversed(verticalAxisDirection); + final TableSpan leadingColSpan = + _columnMetrics[parentDataOf(leadingCell).tableVicinity.column]! + .configuration; + final TableSpan trailingColSpan = + _columnMetrics[parentDataOf(trailingCell).tableVicinity.column]! + .configuration; + + final double leftExpansion = reversedH + ? trailingColSpan.padding.trailing + : leadingColSpan.padding.leading; + final double rightExpansion = reversedH + ? leadingColSpan.padding.leading + : trailingColSpan.padding.trailing; + final double topExpansion = consumePadding + ? (reversedV ? rowSpan.padding.trailing : rowSpan.padding.leading) + : 0.0; + final double bottomExpansion = consumePadding + ? (reversedV ? rowSpan.padding.leading : rowSpan.padding.trailing) + : 0.0; + + final Offset p1 = parentDataOf(leadingCell).paintOffset! + offset; + final Offset p2 = + parentDataOf(trailingCell).paintOffset! + + offset + + Offset(trailingCell.size.width, trailingCell.size.height); + + return Rect.fromLTRB( + math.min(p1.dx, p2.dx - trailingCell.size.width) - leftExpansion, + math.min(p1.dy, p2.dy - trailingCell.size.height) - topExpansion, + math.max(p1.dx + leadingCell.size.width, p2.dx) + rightExpansion, + math.max(p1.dy + leadingCell.size.height, p2.dy) + bottomExpansion, ); } @@ -1612,6 +1641,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: horizontalAxisDirection, + crossAxisDirection: verticalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -1620,6 +1650,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: verticalAxisDirection, + crossAxisDirection: horizontalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -1630,6 +1661,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: verticalAxisDirection, + crossAxisDirection: horizontalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -1638,6 +1670,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: horizontalAxisDirection, + crossAxisDirection: verticalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -1682,6 +1715,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: horizontalAxisDirection, + crossAxisDirection: verticalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -1690,6 +1724,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: verticalAxisDirection, + crossAxisDirection: horizontalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -1700,6 +1735,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: verticalAxisDirection, + crossAxisDirection: horizontalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -1708,6 +1744,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: horizontalAxisDirection, + crossAxisDirection: verticalAxisDirection, ); decoration.paint(paintingDetails); }); diff --git a/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart b/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart index 1c077c63f2a3..f10c147a50db 100644 --- a/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart +++ b/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart @@ -545,12 +545,14 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { ); // Decoration rects cover the whole row from the left and right // edge of the viewport. - return Rect.fromPoints( - Offset(0.0, parentData.layoutOffset!.dy), - Offset( - viewportDimension.width, - rowSpan.trailingOffset - verticalOffset.pixels, - ), + return Rect.fromLTRB( + 0.0, + parentData.paintOffset!.dy - + (consumePadding ? rowSpan.configuration.padding.leading : 0.0), + viewportDimension.width, + parentData.paintOffset!.dy + + child.size.height + + (consumePadding ? rowSpan.configuration.padding.trailing : 0.0), ); } @@ -577,6 +579,7 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: horizontalAxisDirection, + crossAxisDirection: verticalAxisDirection, ); decoration.paint(paintingDetails); }); @@ -598,6 +601,7 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { canvas: context.canvas, rect: rect, axisDirection: horizontalAxisDirection, + crossAxisDirection: verticalAxisDirection, ); decoration.paint(paintingDetails); }); diff --git a/packages/two_dimensional_scrollables/lib/src/tree_view/tree_span.dart b/packages/two_dimensional_scrollables/lib/src/tree_view/tree_span.dart index 3c6f8dd65fec..d64f989f07fc 100644 --- a/packages/two_dimensional_scrollables/lib/src/tree_view/tree_span.dart +++ b/packages/two_dimensional_scrollables/lib/src/tree_view/tree_span.dart @@ -103,7 +103,15 @@ class TreeRowBorder extends SpanBorder { @override void paint(SpanDecorationPaintDetails details, BorderRadius? borderRadius) { - final border = Border(top: top, bottom: bottom, left: left, right: right); + final AxisDirection? crossAxisDirection = details.crossAxisDirection; + final bool isLeadingTop = + crossAxisDirection == null || crossAxisDirection == AxisDirection.down; + final border = Border( + top: isLeadingTop ? top : bottom, + bottom: isLeadingTop ? bottom : top, + left: left, + right: right, + ); border.paint(details.canvas, details.rect, borderRadius: borderRadius); } } diff --git a/packages/two_dimensional_scrollables/pubspec.yaml b/packages/two_dimensional_scrollables/pubspec.yaml index c17706a2af68..9d16a900d995 100644 --- a/packages/two_dimensional_scrollables/pubspec.yaml +++ b/packages/two_dimensional_scrollables/pubspec.yaml @@ -1,6 +1,6 @@ name: two_dimensional_scrollables description: Widgets that scroll using the two dimensional scrolling foundation. -version: 0.3.8 +version: 0.3.9 repository: https://github.com/flutter/packages/tree/main/packages/two_dimensional_scrollables issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+two_dimensional_scrollables%22+ diff --git a/packages/two_dimensional_scrollables/test/table_view/table_span_test.dart b/packages/two_dimensional_scrollables/test/table_view/table_span_test.dart index 4e546e8a9957..ad3a9b8dca44 100644 --- a/packages/two_dimensional_scrollables/test/table_view/table_span_test.dart +++ b/packages/two_dimensional_scrollables/test/table_view/table_span_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:two_dimensional_scrollables/two_dimensional_scrollables.dart'; @@ -850,6 +849,156 @@ void main() { ), ); }); + + testWidgets( + 'paints borders correctly when cross axis is reversed (TableView)', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/177117 + final tableView = TableView.builder( + horizontalDetails: const ScrollableDetails.horizontal(reverse: true), + rowCount: 1, + columnCount: 1, + columnBuilder: (int index) => const TableSpan( + extent: FixedTableSpanExtent(200.0), + foregroundDecoration: TableSpanDecoration( + border: TableSpanBorder( + leading: BorderSide(color: Colors.orange, width: 3), + ), + ), + ), + rowBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(200.0)), + cellBuilder: (_, TableVicinity vicinity) { + return TableViewCell( + child: Container( + height: 200, + width: 200, + color: Colors.grey.withValues(alpha: 0.5), + ), + ); + }, + ); + + tester.view.physicalSize = const Size(400, 400); + tester.view.devicePixelRatio = 1.0; + addTearDown(() { + tester.view.resetPhysicalSize(); + tester.view.resetDevicePixelRatio(); + }); + + await tester.pumpWidget(MaterialApp(home: Scaffold(body: tableView))); + await tester.pumpAndSettle(); + + expect( + find.byType(TableViewport), + paints..path( + includes: [ + const Offset(400.0, 0.0), + const Offset(400.0, 200.0), + ], + color: const Color(0xffff9800), + ), + ); + }, + ); + + testWidgets( + 'paints borders correctly when vertical scrolling is reversed (TableView)', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/177117 + final tableView = TableView.builder( + verticalDetails: const ScrollableDetails.vertical(reverse: true), + rowCount: 1, + columnCount: 1, + columnBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(200.0)), + rowBuilder: (int index) => const TableSpan( + extent: FixedTableSpanExtent(200.0), + foregroundDecoration: TableSpanDecoration( + border: TableSpanBorder( + leading: BorderSide(color: Colors.orange, width: 3), + ), + ), + ), + cellBuilder: (_, TableVicinity vicinity) { + return TableViewCell( + child: Container( + height: 200, + width: 200, + color: Colors.grey.withValues(alpha: 0.5), + ), + ); + }, + ); + + tester.view.physicalSize = const Size(400, 400); + tester.view.devicePixelRatio = 1.0; + addTearDown(() { + tester.view.resetPhysicalSize(); + tester.view.resetDevicePixelRatio(); + }); + + await tester.pumpWidget(MaterialApp(home: Scaffold(body: tableView))); + await tester.pumpAndSettle(); + + expect( + find.byType(TableViewport), + paints..path( + includes: [ + const Offset(0.0, 400.0), + const Offset(200.0, 400.0), + ], + color: const Color(0xffff9800), + ), + ); + }, + ); + + testWidgets( + 'TableView row decoration rect is correct when vertical axis is reversed and padding is used', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/177117 + final tableView = TableView.builder( + verticalDetails: const ScrollableDetails.vertical(reverse: true), + rowCount: 1, + columnCount: 1, + columnBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(200.0)), + rowBuilder: (int index) => const TableSpan( + extent: FixedTableSpanExtent(200.0), + padding: TableSpanPadding(leading: 10.0, trailing: 20.0), + backgroundDecoration: TableSpanDecoration(color: Colors.red), + ), + cellBuilder: (_, TableVicinity vicinity) { + return TableViewCell( + child: Container(width: 200, height: 200, color: Colors.blue), + ); + }, + ); + + tester.view.physicalSize = const Size(400, 400); + tester.view.devicePixelRatio = 1.0; + addTearDown(() { + tester.view.resetPhysicalSize(); + tester.view.resetDevicePixelRatio(); + }); + + await tester.pumpWidget(MaterialApp(home: Scaffold(body: tableView))); + await tester.pumpAndSettle(); + + // Since vertical is reversed, row 0 is at the bottom (y=400). + // Leading padding covers from y=390 to y=400. + // Trailing padding covers from y=170 to y=190. + // Content covers from y=190 to y=390. + expect( + find.byType(TableViewport), + paints..rect( + rect: const Rect.fromLTRB(0.0, 170.0, 200.0, 400.0), + color: Colors.red, + ), + ); + }, + ); }); group('merged cell decorations', () { From 3e15247b25c2dcf54f9d54dfd430b734dbf1f856 Mon Sep 17 00:00:00 2001 From: Tarrin Neal Date: Wed, 25 Mar 2026 04:35:07 -0700 Subject: [PATCH 28/55] [pigeon] Optimize data class equality and hashing in Dart, Kotlin, java, and Swift, adds equality in other languages (#11140) This PR optimizes the generated equality (==) and hashing (hashCode/hash) logic for data classes across All languages. These have been bothering me for a while, and I wanted to break out a new pr before the NI code is in review. --- packages/pigeon/CHANGELOG.md | 6 + .../java/io/flutter/plugins/Messages.java | 170 +- .../EventChannelMessages.g.kt | 150 +- .../flutter/pigeon_example_app/Messages.g.kt | 145 +- .../ios/Runner/EventChannelMessages.g.swift | 123 +- .../example/app/ios/Runner/Messages.g.swift | 121 +- .../app/lib/src/event_channel_messages.g.dart | 65 +- .../example/app/lib/src/messages.g.dart | 64 +- .../pigeon/example/app/linux/messages.g.cc | 226 +++ .../pigeon/example/app/linux/messages.g.h | 23 + .../example/app/macos/Runner/messages.g.m | 112 ++ .../example/app/windows/runner/messages.g.cpp | 274 +++- .../example/app/windows/runner/messages.g.h | 55 +- .../pigeon/lib/src/cpp/cpp_generator.dart | 370 ++++- .../pigeon/lib/src/dart/dart_generator.dart | 86 +- packages/pigeon/lib/src/generator_tools.dart | 2 +- .../lib/src/gobject/gobject_generator.dart | 586 ++++++- .../pigeon/lib/src/java/java_generator.dart | 300 +++- .../lib/src/kotlin/kotlin_generator.dart | 190 ++- .../pigeon/lib/src/objc/objc_generator.dart | 166 ++ .../pigeon/lib/src/swift/swift_generator.dart | 155 +- packages/pigeon/pigeons/core_tests.dart | 11 + .../AlternateLanguageTestPlugin.java | 17 + .../CoreTests.java | 661 +++++--- .../AllDatatypesTest.java | 82 + .../AlternateLanguageTestPlugin.m | 17 + .../CoreTests.gen.m | 448 ++++++ .../CoreTests.gen.h | 17 + .../ios/RunnerTests/AllDatatypesTest.m | 121 +- .../ios/RunnerTests/NonNullFieldsTest.m | 10 + .../lib/integration_tests.dart | 165 ++ .../lib/src/generated/core_tests.gen.dart | 245 ++- .../lib/src/generated/enum.gen.dart | 61 +- .../generated/event_channel_tests.gen.dart | 119 +- .../src/generated/flutter_unittests.gen.dart | 73 +- .../lib/src/generated/message.gen.dart | 73 +- .../src/generated/non_null_fields.gen.dart | 74 +- .../lib/src/generated/null_fields.gen.dart | 70 +- .../test/equality_test.dart | 240 +++ .../test/generated_dart_test_code_test.dart | 143 -- .../com/example/test_plugin/CoreTests.gen.kt | 448 +++++- .../test_plugin/EventChannelTests.gen.kt | 284 +++- .../com/example/test_plugin/TestPlugin.kt | 14 + .../example/test_plugin/AllDatatypesTest.kt | 65 + .../example/test_plugin/NonNullFieldsTests.kt | 11 + .../Sources/test_plugin/CoreTests.gen.swift | 404 ++++- .../test_plugin/EventChannelTests.gen.swift | 237 ++- .../test_plugin/ProxyApiTests.gen.swift | 2 +- .../Sources/test_plugin/TestPlugin.swift | 16 + .../ios/RunnerTests/AllDatatypesTests.swift | 137 ++ .../ios/RunnerTests/MultipleArityTests.swift | 2 +- .../ios/RunnerTests/NonNullFieldsTest.swift | 11 + .../RunnerTests/NullableReturnsTests.swift | 2 +- .../ios/RunnerTests/PrimitiveTests.swift | 2 +- .../test_plugin/linux/CMakeLists.txt | 1 + .../linux/pigeon/core_tests.gen.cc | 1371 +++++++++++++++++ .../test_plugin/linux/pigeon/core_tests.gen.h | 258 ++++ .../test_plugin/linux/test/equality_test.cc | 238 +++ .../test_plugin/linux/test_plugin.cc | 27 + .../test_plugin/windows/CMakeLists.txt | 6 + .../windows/pigeon/core_tests.gen.cpp | 1016 +++++++++--- .../windows/pigeon/core_tests.gen.h | 1138 +++++++------- .../windows/test/equality_test.cpp | 104 ++ .../windows/test/non_null_fields_test.cpp | 9 + .../windows/test/null_fields_test.cpp | 30 + .../test_plugin/windows/test_plugin.cpp | 15 + .../test_plugin/windows/test_plugin.h | 9 + packages/pigeon/pubspec.yaml | 2 +- packages/pigeon/test/cpp_generator_test.dart | 208 ++- packages/pigeon/test/dart_generator_test.dart | 60 + .../pigeon/test/gobject_generator_test.dart | 46 + packages/pigeon/test/java_generator_test.dart | 29 + .../pigeon/test/kotlin_generator_test.dart | 62 + packages/pigeon/test/objc_generator_test.dart | 59 + .../pigeon/test/swift_generator_test.dart | 68 + 75 files changed, 10792 insertions(+), 1635 deletions(-) create mode 100644 packages/pigeon/platform_tests/shared_test_plugin_code/test/equality_test.dart create mode 100644 packages/pigeon/platform_tests/test_plugin/linux/test/equality_test.cc create mode 100644 packages/pigeon/platform_tests/test_plugin/windows/test/equality_test.cpp diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 7286aedf68c2..a0066e2b1c3b 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,9 @@ +## 26.3.0 + +* Optimizes and improves data class equality and hashing. +* Changes hashing and equality methods to behave consistently across platforms. +* Adds equality methods to previously unsupported languages. + ## 26.2.3 * Produces a helpful error message when a method return type is missing or an diff --git a/packages/pigeon/example/app/android/app/src/main/java/io/flutter/plugins/Messages.java b/packages/pigeon/example/app/android/app/src/main/java/io/flutter/plugins/Messages.java index 799d468cfb1e..751c1f5dc3b0 100644 --- a/packages/pigeon/example/app/android/app/src/main/java/io/flutter/plugins/Messages.java +++ b/packages/pigeon/example/app/android/app/src/main/java/io/flutter/plugins/Messages.java @@ -19,14 +19,171 @@ import java.lang.annotation.Target; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Objects; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) public class Messages { + static boolean pigeonDoubleEquals(double a, double b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0 ? 0.0 : a) == (b == 0.0 ? 0.0 : b) || (Double.isNaN(a) && Double.isNaN(b)); + } + + static boolean pigeonFloatEquals(float a, float b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0f ? 0.0f : a) == (b == 0.0f ? 0.0f : b) || (Float.isNaN(a) && Float.isNaN(b)); + } + + static int pigeonDoubleHashCode(double d) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (d == 0.0) { + d = 0.0; + } + long bits = Double.doubleToLongBits(d); + return (int) (bits ^ (bits >>> 32)); + } + + static int pigeonFloatHashCode(float f) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (f == 0.0f) { + f = 0.0f; + } + return Float.floatToIntBits(f); + } + + static boolean pigeonDeepEquals(Object a, Object b) { + if (a == b) { + return true; + } + if (a == null || b == null) { + return false; + } + if (a instanceof byte[] && b instanceof byte[]) { + return Arrays.equals((byte[]) a, (byte[]) b); + } + if (a instanceof int[] && b instanceof int[]) { + return Arrays.equals((int[]) a, (int[]) b); + } + if (a instanceof long[] && b instanceof long[]) { + return Arrays.equals((long[]) a, (long[]) b); + } + if (a instanceof double[] && b instanceof double[]) { + double[] da = (double[]) a; + double[] db = (double[]) b; + if (da.length != db.length) { + return false; + } + for (int i = 0; i < da.length; i++) { + if (!pigeonDoubleEquals(da[i], db[i])) { + return false; + } + } + return true; + } + if (a instanceof List && b instanceof List) { + List listA = (List) a; + List listB = (List) b; + if (listA.size() != listB.size()) { + return false; + } + for (int i = 0; i < listA.size(); i++) { + if (!pigeonDeepEquals(listA.get(i), listB.get(i))) { + return false; + } + } + return true; + } + if (a instanceof Map && b instanceof Map) { + Map mapA = (Map) a; + Map mapB = (Map) b; + if (mapA.size() != mapB.size()) { + return false; + } + for (Map.Entry entryA : mapA.entrySet()) { + Object keyA = entryA.getKey(); + Object valueA = entryA.getValue(); + boolean found = false; + for (Map.Entry entryB : mapB.entrySet()) { + Object keyB = entryB.getKey(); + if (pigeonDeepEquals(keyA, keyB)) { + Object valueB = entryB.getValue(); + if (pigeonDeepEquals(valueA, valueB)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; + } + if (a instanceof Double && b instanceof Double) { + return pigeonDoubleEquals((double) a, (double) b); + } + if (a instanceof Float && b instanceof Float) { + return pigeonFloatEquals((float) a, (float) b); + } + return a.equals(b); + } + + static int pigeonDeepHashCode(Object value) { + if (value == null) { + return 0; + } + if (value instanceof byte[]) { + return Arrays.hashCode((byte[]) value); + } + if (value instanceof int[]) { + return Arrays.hashCode((int[]) value); + } + if (value instanceof long[]) { + return Arrays.hashCode((long[]) value); + } + if (value instanceof double[]) { + double[] da = (double[]) value; + int result = 1; + for (double d : da) { + result = 31 * result + pigeonDoubleHashCode(d); + } + return result; + } + if (value instanceof List) { + int result = 1; + for (Object item : (List) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Map) { + int result = 0; + for (Map.Entry entry : ((Map) value).entrySet()) { + result += + ((pigeonDeepHashCode(entry.getKey()) * 31) ^ pigeonDeepHashCode(entry.getValue())); + } + return result; + } + if (value instanceof Object[]) { + int result = 1; + for (Object item : (Object[]) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Double) { + return pigeonDoubleHashCode((double) value); + } + if (value instanceof Float) { + return pigeonFloatHashCode((float) value); + } + return value.hashCode(); + } /** Error class for passing custom error details to Flutter via a thrown PlatformException. */ public static class FlutterError extends RuntimeException { @@ -142,15 +299,16 @@ public boolean equals(Object o) { return false; } MessageData that = (MessageData) o; - return Objects.equals(name, that.name) - && Objects.equals(description, that.description) - && code.equals(that.code) - && data.equals(that.data); + return pigeonDeepEquals(name, that.name) + && pigeonDeepEquals(description, that.description) + && pigeonDeepEquals(code, that.code) + && pigeonDeepEquals(data, that.data); } @Override public int hashCode() { - return Objects.hash(name, description, code, data); + Object[] fields = new Object[] {getClass(), name, description, code, data}; + return pigeonDeepHashCode(fields); } public static final class Builder { diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt index e524f5d5b0cf..9029c9425018 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/EventChannelMessages.g.kt @@ -13,7 +13,36 @@ import java.io.ByteArrayOutputStream import java.nio.ByteBuffer private object EventChannelMessagesPigeonUtils { + fun doubleEquals(a: Double, b: Double): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0) 0.0 else a) == (if (b == 0.0) 0.0 else b) || (a.isNaN() && b.isNaN()) + } + + fun floatEquals(a: Float, b: Float): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0f) 0.0f else a) == (if (b == 0.0f) 0.0f else b) || (a.isNaN() && b.isNaN()) + } + + fun doubleHash(d: Double): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (d == 0.0) 0.0 else d + val bits = java.lang.Double.doubleToLongBits(normalized) + return (bits xor (bits ushr 32)).toInt() + } + + fun floatHash(f: Float): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (f == 0.0f) 0.0f else f + return java.lang.Float.floatToIntBits(normalized) + } + fun deepEquals(a: Any?, b: Any?): Boolean { + if (a === b) { + return true + } + if (a == null || b == null) { + return false + } if (a is ByteArray && b is ByteArray) { return a.contentEquals(b) } @@ -24,20 +53,109 @@ private object EventChannelMessagesPigeonUtils { return a.contentEquals(b) } if (a is DoubleArray && b is DoubleArray) { - return a.contentEquals(b) + if (a.size != b.size) return false + for (i in a.indices) { + if (!doubleEquals(a[i], b[i])) return false + } + return true + } + if (a is FloatArray && b is FloatArray) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!floatEquals(a[i], b[i])) return false + } + return true } if (a is Array<*> && b is Array<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + for (i in a.indices) { + if (!deepEquals(a[i], b[i])) return false + } + return true } if (a is List<*> && b is List<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + val iterA = a.iterator() + val iterB = b.iterator() + while (iterA.hasNext() && iterB.hasNext()) { + if (!deepEquals(iterA.next(), iterB.next())) return false + } + return true } if (a is Map<*, *> && b is Map<*, *>) { - return a.size == b.size && - a.all { (b as Map).contains(it.key) && deepEquals(it.value, b[it.key]) } + if (a.size != b.size) return false + for (entry in a) { + val key = entry.key + var found = false + for (bEntry in b) { + if (deepEquals(key, bEntry.key)) { + if (deepEquals(entry.value, bEntry.value)) { + found = true + break + } else { + return false + } + } + } + if (!found) return false + } + return true + } + if (a is Double && b is Double) { + return doubleEquals(a, b) + } + if (a is Float && b is Float) { + return floatEquals(a, b) } return a == b } + + fun deepHash(value: Any?): Int { + return when (value) { + null -> 0 + is ByteArray -> value.contentHashCode() + is IntArray -> value.contentHashCode() + is LongArray -> value.contentHashCode() + is DoubleArray -> { + var result = 1 + for (item in value) { + result = 31 * result + doubleHash(item) + } + result + } + is FloatArray -> { + var result = 1 + for (item in value) { + result = 31 * result + floatHash(item) + } + result + } + is Array<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is List<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is Map<*, *> -> { + var result = 0 + for (entry in value) { + result += ((deepHash(entry.key) * 31) xor deepHash(entry.value)) + } + result + } + is Double -> doubleHash(value) + is Float -> floatHash(value) + else -> value.hashCode() + } + } } /** @@ -61,16 +179,21 @@ data class IntEvent(val data: Long) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is IntEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelMessagesPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as IntEvent + return EventChannelMessagesPigeonUtils.deepEquals(this.data, other.data) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelMessagesPigeonUtils.deepHash(this.data) + return result + } } /** Generated class from Pigeon that represents data sent in messages. */ @@ -89,16 +212,21 @@ data class StringEvent(val data: String) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is StringEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelMessagesPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as StringEvent + return EventChannelMessagesPigeonUtils.deepEquals(this.data, other.data) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelMessagesPigeonUtils.deepHash(this.data) + return result + } } private open class EventChannelMessagesPigeonCodec : StandardMessageCodec() { diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/Messages.g.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/Messages.g.kt index 87f4ef1acf12..f82200d46f0d 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/Messages.g.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/Messages.g.kt @@ -35,7 +35,36 @@ private object MessagesPigeonUtils { } } + fun doubleEquals(a: Double, b: Double): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0) 0.0 else a) == (if (b == 0.0) 0.0 else b) || (a.isNaN() && b.isNaN()) + } + + fun floatEquals(a: Float, b: Float): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0f) 0.0f else a) == (if (b == 0.0f) 0.0f else b) || (a.isNaN() && b.isNaN()) + } + + fun doubleHash(d: Double): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (d == 0.0) 0.0 else d + val bits = java.lang.Double.doubleToLongBits(normalized) + return (bits xor (bits ushr 32)).toInt() + } + + fun floatHash(f: Float): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (f == 0.0f) 0.0f else f + return java.lang.Float.floatToIntBits(normalized) + } + fun deepEquals(a: Any?, b: Any?): Boolean { + if (a === b) { + return true + } + if (a == null || b == null) { + return false + } if (a is ByteArray && b is ByteArray) { return a.contentEquals(b) } @@ -46,20 +75,109 @@ private object MessagesPigeonUtils { return a.contentEquals(b) } if (a is DoubleArray && b is DoubleArray) { - return a.contentEquals(b) + if (a.size != b.size) return false + for (i in a.indices) { + if (!doubleEquals(a[i], b[i])) return false + } + return true + } + if (a is FloatArray && b is FloatArray) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!floatEquals(a[i], b[i])) return false + } + return true } if (a is Array<*> && b is Array<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + for (i in a.indices) { + if (!deepEquals(a[i], b[i])) return false + } + return true } if (a is List<*> && b is List<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + val iterA = a.iterator() + val iterB = b.iterator() + while (iterA.hasNext() && iterB.hasNext()) { + if (!deepEquals(iterA.next(), iterB.next())) return false + } + return true } if (a is Map<*, *> && b is Map<*, *>) { - return a.size == b.size && - a.all { (b as Map).contains(it.key) && deepEquals(it.value, b[it.key]) } + if (a.size != b.size) return false + for (entry in a) { + val key = entry.key + var found = false + for (bEntry in b) { + if (deepEquals(key, bEntry.key)) { + if (deepEquals(entry.value, bEntry.value)) { + found = true + break + } else { + return false + } + } + } + if (!found) return false + } + return true + } + if (a is Double && b is Double) { + return doubleEquals(a, b) + } + if (a is Float && b is Float) { + return floatEquals(a, b) } return a == b } + + fun deepHash(value: Any?): Int { + return when (value) { + null -> 0 + is ByteArray -> value.contentHashCode() + is IntArray -> value.contentHashCode() + is LongArray -> value.contentHashCode() + is DoubleArray -> { + var result = 1 + for (item in value) { + result = 31 * result + doubleHash(item) + } + result + } + is FloatArray -> { + var result = 1 + for (item in value) { + result = 31 * result + floatHash(item) + } + result + } + is Array<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is List<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is Map<*, *> -> { + var result = 0 + for (entry in value) { + result += ((deepHash(entry.key) * 31) xor deepHash(entry.value)) + } + result + } + is Double -> doubleHash(value) + is Float -> floatHash(value) + else -> value.hashCode() + } + } } /** @@ -113,16 +231,27 @@ data class MessageData( } override fun equals(other: Any?): Boolean { - if (other !is MessageData) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return MessagesPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as MessageData + return MessagesPigeonUtils.deepEquals(this.name, other.name) && + MessagesPigeonUtils.deepEquals(this.description, other.description) && + MessagesPigeonUtils.deepEquals(this.code, other.code) && + MessagesPigeonUtils.deepEquals(this.data, other.data) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + MessagesPigeonUtils.deepHash(this.name) + result = 31 * result + MessagesPigeonUtils.deepHash(this.description) + result = 31 * result + MessagesPigeonUtils.deepHash(this.code) + result = 31 * result + MessagesPigeonUtils.deepHash(this.data) + return result + } } private open class MessagesPigeonCodec : StandardMessageCodec() { diff --git a/packages/pigeon/example/app/ios/Runner/EventChannelMessages.g.swift b/packages/pigeon/example/app/ios/Runner/EventChannelMessages.g.swift index 027453c3951e..70cab0a27bec 100644 --- a/packages/pigeon/example/app/ios/Runner/EventChannelMessages.g.swift +++ b/packages/pigeon/example/app/ios/Runner/EventChannelMessages.g.swift @@ -23,6 +23,19 @@ private func nilOrValue(_ value: Any?) -> T? { return value as! T? } +private func doubleEqualsEventChannelMessages(_ lhs: Double, _ rhs: Double) -> Bool { + return (lhs.isNaN && rhs.isNaN) || lhs == rhs +} + +private func doubleHashEventChannelMessages(_ value: Double, _ hasher: inout Hasher) { + if value.isNaN { + hasher.combine(0x7FF8_0000_0000_0000) + } else { + // Normalize -0.0 to 0.0 + hasher.combine(value == 0 ? 0 : value) + } +} + func deepEqualsEventChannelMessages(_ lhs: Any?, _ rhs: Any?) -> Bool { let cleanLhs = nilOrValue(lhs) as Any? let cleanRhs = nilOrValue(rhs) as Any? @@ -33,56 +46,90 @@ func deepEqualsEventChannelMessages(_ lhs: Any?, _ rhs: Any?) -> Bool { case (nil, _), (_, nil): return false - case is (Void, Void): + case (let lhs as AnyObject, let rhs as AnyObject) where lhs === rhs: return true - case let (cleanLhsHashable, cleanRhsHashable) as (AnyHashable, AnyHashable): - return cleanLhsHashable == cleanRhsHashable + case is (Void, Void): + return true - case let (cleanLhsArray, cleanRhsArray) as ([Any?], [Any?]): - guard cleanLhsArray.count == cleanRhsArray.count else { return false } - for (index, element) in cleanLhsArray.enumerated() { - if !deepEqualsEventChannelMessages(element, cleanRhsArray[index]) { + case (let lhsArray, let rhsArray) as ([Any?], [Any?]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !deepEqualsEventChannelMessages(element, rhsArray[index]) { return false } } return true - case let (cleanLhsDictionary, cleanRhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): - guard cleanLhsDictionary.count == cleanRhsDictionary.count else { return false } - for (key, cleanLhsValue) in cleanLhsDictionary { - guard cleanRhsDictionary.index(forKey: key) != nil else { return false } - if !deepEqualsEventChannelMessages(cleanLhsValue, cleanRhsDictionary[key]!) { + case (let lhsArray, let rhsArray) as ([Double], [Double]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !doubleEqualsEventChannelMessages(element, rhsArray[index]) { return false } } return true + case (let lhsDictionary, let rhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): + guard lhsDictionary.count == rhsDictionary.count else { return false } + for (lhsKey, lhsValue) in lhsDictionary { + var found = false + for (rhsKey, rhsValue) in rhsDictionary { + if deepEqualsEventChannelMessages(lhsKey, rhsKey) { + if deepEqualsEventChannelMessages(lhsValue, rhsValue) { + found = true + break + } else { + return false + } + } + } + if !found { return false } + } + return true + + case (let lhs as Double, let rhs as Double): + return doubleEqualsEventChannelMessages(lhs, rhs) + + case (let lhsHashable, let rhsHashable) as (AnyHashable, AnyHashable): + return lhsHashable == rhsHashable + default: - // Any other type shouldn't be able to be used with pigeon. File an issue if you find this to be untrue. return false } } func deepHashEventChannelMessages(value: Any?, hasher: inout Hasher) { - if let valueList = value as? [AnyHashable] { - for item in valueList { deepHashEventChannelMessages(value: item, hasher: &hasher) } - return - } - - if let valueDict = value as? [AnyHashable: AnyHashable] { - for key in valueDict.keys { - hasher.combine(key) - deepHashEventChannelMessages(value: valueDict[key]!, hasher: &hasher) + let cleanValue = nilOrValue(value) as Any? + if let cleanValue = cleanValue { + if let doubleValue = cleanValue as? Double { + doubleHashEventChannelMessages(doubleValue, &hasher) + } else if let valueList = cleanValue as? [Any?] { + for item in valueList { + deepHashEventChannelMessages(value: item, hasher: &hasher) + } + } else if let valueList = cleanValue as? [Double] { + for item in valueList { + doubleHashEventChannelMessages(item, &hasher) + } + } else if let valueDict = cleanValue as? [AnyHashable: Any?] { + var result = 0 + for (key, value) in valueDict { + var entryKeyHasher = Hasher() + deepHashEventChannelMessages(value: key, hasher: &entryKeyHasher) + var entryValueHasher = Hasher() + deepHashEventChannelMessages(value: value, hasher: &entryValueHasher) + result = result &+ ((entryKeyHasher.finalize() &* 31) ^ entryValueHasher.finalize()) + } + hasher.combine(result) + } else if let hashableValue = cleanValue as? AnyHashable { + hasher.combine(hashableValue) + } else { + hasher.combine(String(describing: cleanValue)) } - return + } else { + hasher.combine(0) } - - if let hashableValue = value as? AnyHashable { - hasher.combine(hashableValue.hashValue) - } - - return hasher.combine(String(describing: value)) } /// Generated class from Pigeon that represents data sent in messages. @@ -109,10 +156,15 @@ struct IntEvent: PlatformEvent { ] } static func == (lhs: IntEvent, rhs: IntEvent) -> Bool { - return deepEqualsEventChannelMessages(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelMessages(lhs.data, rhs.data) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelMessages(value: toList(), hasher: &hasher) + hasher.combine("IntEvent") + deepHashEventChannelMessages(value: data, hasher: &hasher) } } @@ -134,10 +186,15 @@ struct StringEvent: PlatformEvent { ] } static func == (lhs: StringEvent, rhs: StringEvent) -> Bool { - return deepEqualsEventChannelMessages(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelMessages(lhs.data, rhs.data) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelMessages(value: toList(), hasher: &hasher) + hasher.combine("StringEvent") + deepHashEventChannelMessages(value: data, hasher: &hasher) } } diff --git a/packages/pigeon/example/app/ios/Runner/Messages.g.swift b/packages/pigeon/example/app/ios/Runner/Messages.g.swift index 46c3e23598ef..f8b12f846c22 100644 --- a/packages/pigeon/example/app/ios/Runner/Messages.g.swift +++ b/packages/pigeon/example/app/ios/Runner/Messages.g.swift @@ -53,7 +53,7 @@ private func wrapError(_ error: Any) -> [Any?] { } return [ "\(error)", - "\(type(of: error))", + "\(Swift.type(of: error))", "Stacktrace: \(Thread.callStackSymbols)", ] } @@ -73,6 +73,19 @@ private func nilOrValue(_ value: Any?) -> T? { return value as! T? } +private func doubleEqualsMessages(_ lhs: Double, _ rhs: Double) -> Bool { + return (lhs.isNaN && rhs.isNaN) || lhs == rhs +} + +private func doubleHashMessages(_ value: Double, _ hasher: inout Hasher) { + if value.isNaN { + hasher.combine(0x7FF8_0000_0000_0000) + } else { + // Normalize -0.0 to 0.0 + hasher.combine(value == 0 ? 0 : value) + } +} + func deepEqualsMessages(_ lhs: Any?, _ rhs: Any?) -> Bool { let cleanLhs = nilOrValue(lhs) as Any? let cleanRhs = nilOrValue(rhs) as Any? @@ -83,56 +96,90 @@ func deepEqualsMessages(_ lhs: Any?, _ rhs: Any?) -> Bool { case (nil, _), (_, nil): return false - case is (Void, Void): + case (let lhs as AnyObject, let rhs as AnyObject) where lhs === rhs: return true - case let (cleanLhsHashable, cleanRhsHashable) as (AnyHashable, AnyHashable): - return cleanLhsHashable == cleanRhsHashable + case is (Void, Void): + return true - case let (cleanLhsArray, cleanRhsArray) as ([Any?], [Any?]): - guard cleanLhsArray.count == cleanRhsArray.count else { return false } - for (index, element) in cleanLhsArray.enumerated() { - if !deepEqualsMessages(element, cleanRhsArray[index]) { + case (let lhsArray, let rhsArray) as ([Any?], [Any?]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !deepEqualsMessages(element, rhsArray[index]) { return false } } return true - case let (cleanLhsDictionary, cleanRhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): - guard cleanLhsDictionary.count == cleanRhsDictionary.count else { return false } - for (key, cleanLhsValue) in cleanLhsDictionary { - guard cleanRhsDictionary.index(forKey: key) != nil else { return false } - if !deepEqualsMessages(cleanLhsValue, cleanRhsDictionary[key]!) { + case (let lhsArray, let rhsArray) as ([Double], [Double]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !doubleEqualsMessages(element, rhsArray[index]) { return false } } return true + case (let lhsDictionary, let rhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): + guard lhsDictionary.count == rhsDictionary.count else { return false } + for (lhsKey, lhsValue) in lhsDictionary { + var found = false + for (rhsKey, rhsValue) in rhsDictionary { + if deepEqualsMessages(lhsKey, rhsKey) { + if deepEqualsMessages(lhsValue, rhsValue) { + found = true + break + } else { + return false + } + } + } + if !found { return false } + } + return true + + case (let lhs as Double, let rhs as Double): + return doubleEqualsMessages(lhs, rhs) + + case (let lhsHashable, let rhsHashable) as (AnyHashable, AnyHashable): + return lhsHashable == rhsHashable + default: - // Any other type shouldn't be able to be used with pigeon. File an issue if you find this to be untrue. return false } } func deepHashMessages(value: Any?, hasher: inout Hasher) { - if let valueList = value as? [AnyHashable] { - for item in valueList { deepHashMessages(value: item, hasher: &hasher) } - return - } - - if let valueDict = value as? [AnyHashable: AnyHashable] { - for key in valueDict.keys { - hasher.combine(key) - deepHashMessages(value: valueDict[key]!, hasher: &hasher) + let cleanValue = nilOrValue(value) as Any? + if let cleanValue = cleanValue { + if let doubleValue = cleanValue as? Double { + doubleHashMessages(doubleValue, &hasher) + } else if let valueList = cleanValue as? [Any?] { + for item in valueList { + deepHashMessages(value: item, hasher: &hasher) + } + } else if let valueList = cleanValue as? [Double] { + for item in valueList { + doubleHashMessages(item, &hasher) + } + } else if let valueDict = cleanValue as? [AnyHashable: Any?] { + var result = 0 + for (key, value) in valueDict { + var entryKeyHasher = Hasher() + deepHashMessages(value: key, hasher: &entryKeyHasher) + var entryValueHasher = Hasher() + deepHashMessages(value: value, hasher: &entryValueHasher) + result = result &+ ((entryKeyHasher.finalize() &* 31) ^ entryValueHasher.finalize()) + } + hasher.combine(result) + } else if let hashableValue = cleanValue as? AnyHashable { + hasher.combine(hashableValue) + } else { + hasher.combine(String(describing: cleanValue)) } - return - } - - if let hashableValue = value as? AnyHashable { - hasher.combine(hashableValue.hashValue) + } else { + hasher.combine(0) } - - return hasher.combine(String(describing: value)) } enum Code: Int { @@ -170,10 +217,20 @@ struct MessageData: Hashable { ] } static func == (lhs: MessageData, rhs: MessageData) -> Bool { - return deepEqualsMessages(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsMessages(lhs.name, rhs.name) + && deepEqualsMessages(lhs.description, rhs.description) + && deepEqualsMessages(lhs.code, rhs.code) && deepEqualsMessages(lhs.data, rhs.data) } + func hash(into hasher: inout Hasher) { - deepHashMessages(value: toList(), hasher: &hasher) + hasher.combine("MessageData") + deepHashMessages(value: name, hasher: &hasher) + deepHashMessages(value: description, hasher: &hasher) + deepHashMessages(value: code, hasher: &hasher) + deepHashMessages(value: data, hasher: &hasher) } } diff --git a/packages/pigeon/example/app/lib/src/event_channel_messages.g.dart b/packages/pigeon/example/app/lib/src/event_channel_messages.g.dart index 456b3629f7df..0a31f7b13d7c 100644 --- a/packages/pigeon/example/app/lib/src/event_channel_messages.g.dart +++ b/packages/pigeon/example/app/lib/src/event_channel_messages.g.dart @@ -13,6 +13,15 @@ import 'package:flutter/services.dart'; import 'package:meta/meta.dart' show immutable, protected, visibleForTesting; bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -20,16 +29,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + sealed class PlatformEvent {} class IntEvent extends PlatformEvent { @@ -59,12 +104,12 @@ class IntEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(data, other.data); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class StringEvent extends PlatformEvent { @@ -94,12 +139,12 @@ class StringEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(data, other.data); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/example/app/lib/src/messages.g.dart b/packages/pigeon/example/app/lib/src/messages.g.dart index c876dd35f20a..9efe3e125b07 100644 --- a/packages/pigeon/example/app/lib/src/messages.g.dart +++ b/packages/pigeon/example/app/lib/src/messages.g.dart @@ -52,6 +52,15 @@ List wrapResponse({ } bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -59,16 +68,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + enum Code { one, two } class MessageData { @@ -114,12 +159,15 @@ class MessageData { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(name, other.name) && + _deepEquals(description, other.description) && + _deepEquals(code, other.code) && + _deepEquals(data, other.data); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/example/app/linux/messages.g.cc b/packages/pigeon/example/app/linux/messages.g.cc index 5dc179e4203a..f1b0e818d11f 100644 --- a/packages/pigeon/example/app/linux/messages.g.cc +++ b/packages/pigeon/example/app/linux/messages.g.cc @@ -6,6 +6,197 @@ #include "messages.g.h" +#include + +#include +static guint G_GNUC_UNUSED flpigeon_hash_double(double v) { + if (std::isnan(v)) { + return static_cast(0x7FF80000); + } + if (v == 0.0) { + v = 0.0; + } + union { + double d; + uint64_t u; + } u; + u.d = v; + return static_cast(u.u ^ (u.u >> 32)); +} +static gboolean G_GNUC_UNUSED flpigeon_equals_double(double a, double b) { + return (a == b) || (std::isnan(a) && std::isnan(b)); +} +static gboolean G_GNUC_UNUSED flpigeon_deep_equals(FlValue* a, FlValue* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if (fl_value_get_type(a) != fl_value_get_type(b)) { + return FALSE; + } + switch (fl_value_get_type(a)) { + case FL_VALUE_TYPE_NULL: + return TRUE; + case FL_VALUE_TYPE_BOOL: + return fl_value_get_bool(a) == fl_value_get_bool(b); + case FL_VALUE_TYPE_INT: + return fl_value_get_int(a) == fl_value_get_int(b); + case FL_VALUE_TYPE_FLOAT: { + return flpigeon_equals_double(fl_value_get_float(a), + fl_value_get_float(b)); + } + case FL_VALUE_TYPE_STRING: + return g_strcmp0(fl_value_get_string(a), fl_value_get_string(b)) == 0; + case FL_VALUE_TYPE_UINT8_LIST: + return fl_value_get_length(a) == fl_value_get_length(b) && + memcmp(fl_value_get_uint8_list(a), fl_value_get_uint8_list(b), + fl_value_get_length(a)) == 0; + case FL_VALUE_TYPE_INT32_LIST: + return fl_value_get_length(a) == fl_value_get_length(b) && + memcmp(fl_value_get_int32_list(a), fl_value_get_int32_list(b), + fl_value_get_length(a) * sizeof(int32_t)) == 0; + case FL_VALUE_TYPE_INT64_LIST: + return fl_value_get_length(a) == fl_value_get_length(b) && + memcmp(fl_value_get_int64_list(a), fl_value_get_int64_list(b), + fl_value_get_length(a) * sizeof(int64_t)) == 0; + case FL_VALUE_TYPE_FLOAT_LIST: { + size_t len = fl_value_get_length(a); + if (len != fl_value_get_length(b)) { + return FALSE; + } + const double* a_data = fl_value_get_float_list(a); + const double* b_data = fl_value_get_float_list(b); + for (size_t i = 0; i < len; i++) { + if (!flpigeon_equals_double(a_data[i], b_data[i])) { + return FALSE; + } + } + return TRUE; + } + case FL_VALUE_TYPE_LIST: { + size_t len = fl_value_get_length(a); + if (len != fl_value_get_length(b)) { + return FALSE; + } + for (size_t i = 0; i < len; i++) { + if (!flpigeon_deep_equals(fl_value_get_list_value(a, i), + fl_value_get_list_value(b, i))) { + return FALSE; + } + } + return TRUE; + } + case FL_VALUE_TYPE_MAP: { + size_t len = fl_value_get_length(a); + if (len != fl_value_get_length(b)) { + return FALSE; + } + for (size_t i = 0; i < len; i++) { + FlValue* key = fl_value_get_map_key(a, i); + FlValue* val = fl_value_get_map_value(a, i); + gboolean found = FALSE; + for (size_t j = 0; j < len; j++) { + FlValue* b_key = fl_value_get_map_key(b, j); + if (flpigeon_deep_equals(key, b_key)) { + FlValue* b_val = fl_value_get_map_value(b, j); + if (flpigeon_deep_equals(val, b_val)) { + found = TRUE; + break; + } else { + return FALSE; + } + } + } + if (!found) { + return FALSE; + } + } + return TRUE; + } + default: + return FALSE; + } + return FALSE; +} +static guint G_GNUC_UNUSED flpigeon_deep_hash(FlValue* value) { + if (value == nullptr) { + return 0; + } + switch (fl_value_get_type(value)) { + case FL_VALUE_TYPE_NULL: + return 0; + case FL_VALUE_TYPE_BOOL: + return fl_value_get_bool(value) ? 1231 : 1237; + case FL_VALUE_TYPE_INT: { + int64_t v = fl_value_get_int(value); + return static_cast(v ^ (v >> 32)); + } + case FL_VALUE_TYPE_FLOAT: + return flpigeon_hash_double(fl_value_get_float(value)); + case FL_VALUE_TYPE_STRING: + return g_str_hash(fl_value_get_string(value)); + case FL_VALUE_TYPE_UINT8_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const uint8_t* data = fl_value_get_uint8_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + data[i]; + } + return result; + } + case FL_VALUE_TYPE_INT32_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const int32_t* data = fl_value_get_int32_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + return result; + } + case FL_VALUE_TYPE_INT64_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const int64_t* data = fl_value_get_int64_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i] ^ (data[i] >> 32)); + } + return result; + } + case FL_VALUE_TYPE_FLOAT_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const double* data = fl_value_get_float_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + flpigeon_hash_double(data[i]); + } + return result; + } + case FL_VALUE_TYPE_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + for (size_t i = 0; i < len; i++) { + result = + result * 31 + flpigeon_deep_hash(fl_value_get_list_value(value, i)); + } + return result; + } + case FL_VALUE_TYPE_MAP: { + guint result = 0; + size_t len = fl_value_get_length(value); + for (size_t i = 0; i < len; i++) { + result += ((flpigeon_deep_hash(fl_value_get_map_key(value, i)) * 31) ^ + flpigeon_deep_hash(fl_value_get_map_value(value, i))); + } + return result; + } + default: + return static_cast(fl_value_get_type(value)); + } + return 0; +} + struct _PigeonExamplePackageMessageData { GObject parent_instance; @@ -119,6 +310,41 @@ pigeon_example_package_message_data_new_from_list(FlValue* values) { return pigeon_example_package_message_data_new(name, description, code, data); } +gboolean pigeon_example_package_message_data_equals( + PigeonExamplePackageMessageData* a, PigeonExamplePackageMessageData* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if (g_strcmp0(a->name, b->name) != 0) { + return FALSE; + } + if (g_strcmp0(a->description, b->description) != 0) { + return FALSE; + } + if (a->code != b->code) { + return FALSE; + } + if (!flpigeon_deep_equals(a->data, b->data)) { + return FALSE; + } + return TRUE; +} + +guint pigeon_example_package_message_data_hash( + PigeonExamplePackageMessageData* self) { + g_return_val_if_fail(PIGEON_EXAMPLE_PACKAGE_IS_MESSAGE_DATA(self), 0); + guint result = 0; + result = result * 31 + (self->name != nullptr ? g_str_hash(self->name) : 0); + result = result * 31 + + (self->description != nullptr ? g_str_hash(self->description) : 0); + result = result * 31 + static_cast(self->code); + result = result * 31 + flpigeon_deep_hash(self->data); + return result; +} + struct _PigeonExamplePackageMessageCodec { FlStandardMessageCodec parent_instance; }; diff --git a/packages/pigeon/example/app/linux/messages.g.h b/packages/pigeon/example/app/linux/messages.g.h index 6fb44cc93516..c03ecb20a01d 100644 --- a/packages/pigeon/example/app/linux/messages.g.h +++ b/packages/pigeon/example/app/linux/messages.g.h @@ -90,6 +90,29 @@ PigeonExamplePackageCode pigeon_example_package_message_data_get_code( FlValue* pigeon_example_package_message_data_get_data( PigeonExamplePackageMessageData* object); +/** + * pigeon_example_package_message_data_equals: + * @a: a #PigeonExamplePackageMessageData. + * @b: another #PigeonExamplePackageMessageData. + * + * Checks if two #PigeonExamplePackageMessageData objects are equal. + * + * Returns: TRUE if @a and @b are equal. + */ +gboolean pigeon_example_package_message_data_equals( + PigeonExamplePackageMessageData* a, PigeonExamplePackageMessageData* b); + +/** + * pigeon_example_package_message_data_hash: + * @object: a #PigeonExamplePackageMessageData. + * + * Calculates a hash code for a #PigeonExamplePackageMessageData object. + * + * Returns: the hash code. + */ +guint pigeon_example_package_message_data_hash( + PigeonExamplePackageMessageData* object); + G_DECLARE_FINAL_TYPE(PigeonExamplePackageMessageCodec, pigeon_example_package_message_codec, PIGEON_EXAMPLE_PACKAGE, MESSAGE_CODEC, diff --git a/packages/pigeon/example/app/macos/Runner/messages.g.m b/packages/pigeon/example/app/macos/Runner/messages.g.m index 3e3bc65265ae..ed7655039d25 100644 --- a/packages/pigeon/example/app/macos/Runner/messages.g.m +++ b/packages/pigeon/example/app/macos/Runner/messages.g.m @@ -12,6 +12,97 @@ @import Flutter; #endif +static BOOL __attribute__((unused)) FLTPigeonDeepEquals(id _Nullable a, id _Nullable b) { + if (a == b) { + return YES; + } + if (a == nil) { + return b == [NSNull null]; + } + if (b == nil) { + return a == [NSNull null]; + } + if ([a isKindOfClass:[NSNumber class]] && [b isKindOfClass:[NSNumber class]]) { + return + [a isEqual:b] || (isnan([(NSNumber *)a doubleValue]) && isnan([(NSNumber *)b doubleValue])); + } + if ([a isKindOfClass:[NSArray class]] && [b isKindOfClass:[NSArray class]]) { + NSArray *arrayA = (NSArray *)a; + NSArray *arrayB = (NSArray *)b; + if (arrayA.count != arrayB.count) { + return NO; + } + for (NSUInteger i = 0; i < arrayA.count; i++) { + if (!FLTPigeonDeepEquals(arrayA[i], arrayB[i])) { + return NO; + } + } + return YES; + } + if ([a isKindOfClass:[NSDictionary class]] && [b isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictA = (NSDictionary *)a; + NSDictionary *dictB = (NSDictionary *)b; + if (dictA.count != dictB.count) { + return NO; + } + for (id keyA in dictA) { + id valueA = dictA[keyA]; + BOOL found = NO; + for (id keyB in dictB) { + if (FLTPigeonDeepEquals(keyA, keyB)) { + id valueB = dictB[keyB]; + if (FLTPigeonDeepEquals(valueA, valueB)) { + found = YES; + break; + } else { + return NO; + } + } + } + if (!found) { + return NO; + } + } + return YES; + } + return [a isEqual:b]; +} + +static NSUInteger __attribute__((unused)) FLTPigeonDeepHash(id _Nullable value) { + if (value == nil || value == (id)[NSNull null]) { + return 0; + } + if ([value isKindOfClass:[NSNumber class]]) { + NSNumber *n = (NSNumber *)value; + double d = n.doubleValue; + if (isnan(d)) { + // Normalize NaN to a consistent hash. + return (NSUInteger)0x7FF8000000000000; + } + if (d == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + d = 0.0; + } + return @(d).hash; + } + if ([value isKindOfClass:[NSArray class]]) { + NSUInteger result = 1; + for (id item in (NSArray *)value) { + result = result * 31 + FLTPigeonDeepHash(item); + } + return result; + } + if ([value isKindOfClass:[NSDictionary class]]) { + NSUInteger result = 0; + NSDictionary *dict = (NSDictionary *)value; + for (id key in dict) { + result += ((FLTPigeonDeepHash(key) * 31) ^ FLTPigeonDeepHash(dict[key])); + } + return result; + } + return [value hash]; +} + static NSArray *wrapResult(id result, FlutterError *error) { if (error) { return @[ @@ -83,6 +174,27 @@ + (nullable PGNMessageData *)nullableFromList:(NSArray *)list { self.data ?: [NSNull null], ]; } +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + PGNMessageData *other = (PGNMessageData *)object; + return FLTPigeonDeepEquals(self.name, other.name) && + FLTPigeonDeepEquals(self.description, other.description) && self.code == other.code && + FLTPigeonDeepEquals(self.data, other.data); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.name); + result = result * 31 + FLTPigeonDeepHash(self.description); + result = result * 31 + @(self.code).hash; + result = result * 31 + FLTPigeonDeepHash(self.data); + return result; +} @end @interface PGNMessagesPigeonCodecReader : FlutterStandardReader diff --git a/packages/pigeon/example/app/windows/runner/messages.g.cpp b/packages/pigeon/example/app/windows/runner/messages.g.cpp index 755efbc8570b..11453da4e053 100644 --- a/packages/pigeon/example/app/windows/runner/messages.g.cpp +++ b/packages/pigeon/example/app/windows/runner/messages.g.cpp @@ -13,16 +13,18 @@ #include #include +#include +#include #include #include #include namespace pigeon_example { -using flutter::BasicMessageChannel; -using flutter::CustomEncodableValue; -using flutter::EncodableList; -using flutter::EncodableMap; -using flutter::EncodableValue; +using ::flutter::BasicMessageChannel; +using ::flutter::CustomEncodableValue; +using ::flutter::EncodableList; +using ::flutter::EncodableMap; +using ::flutter::EncodableValue; FlutterError CreateConnectionError(const std::string channel_name) { return FlutterError( @@ -31,6 +33,212 @@ FlutterError CreateConnectionError(const std::string channel_name) { EncodableValue("")); } +namespace { +template +bool PigeonInternalDeepEquals(const T& a, const T& b); + +bool PigeonInternalDeepEquals(const double& a, const double& b); + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b); + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b); + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b); + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b); + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b); + +template +bool PigeonInternalDeepEquals(const T& a, const T& b) { + return a == b; +} + +template +bool PigeonInternalDeepEquals(const std::vector& a, + const std::vector& b) { + if (a.size() != b.size()) { + return false; + } + for (size_t i = 0; i < a.size(); ++i) { + if (!PigeonInternalDeepEquals(a[i], b[i])) { + return false; + } + } + return true; +} + +template +bool PigeonInternalDeepEquals(const std::map& a, + const std::map& b) { + if (a.size() != b.size()) { + return false; + } + for (const auto& kv : a) { + bool found = false; + for (const auto& b_kv : b) { + if (PigeonInternalDeepEquals(kv.first, b_kv.first)) { + if (PigeonInternalDeepEquals(kv.second, b_kv.second)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; +} + +bool PigeonInternalDeepEquals(const double& a, const double& b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == b) || (std::isnan(a) && std::isnan(b)); +} + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b) { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b) { + if (a.get() == b.get()) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b) { + if (a.index() != b.index()) { + return false; + } + if (const double* da = std::get_if(&a)) { + return PigeonInternalDeepEquals(*da, std::get(b)); + } else if (const ::flutter::EncodableList* la = + std::get_if<::flutter::EncodableList>(&a)) { + return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b)); + } else if (const ::flutter::EncodableMap* ma = + std::get_if<::flutter::EncodableMap>(&a)) { + return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b)); + } + return a == b; +} + +template +size_t PigeonInternalDeepHash(const T& v); + +size_t PigeonInternalDeepHash(const double& v); + +template +size_t PigeonInternalDeepHash(const std::vector& v); + +template +size_t PigeonInternalDeepHash(const std::map& v); + +template +size_t PigeonInternalDeepHash(const std::optional& v); + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v); + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v); + +template +size_t PigeonInternalDeepHash(const T& v) { + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::vector& v) { + size_t result = 1; + for (const auto& item : v) { + result = result * 31 + PigeonInternalDeepHash(item); + } + return result; +} + +template +size_t PigeonInternalDeepHash(const std::map& v) { + size_t result = 0; + for (const auto& kv : v) { + result += ((PigeonInternalDeepHash(kv.first) * 31) ^ + PigeonInternalDeepHash(kv.second)); + } + return result; +} + +size_t PigeonInternalDeepHash(const double& v) { + if (std::isnan(v)) { + // Normalize NaN to a consistent hash. + return std::hash()(std::numeric_limits::quiet_NaN()); + } + if (v == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return std::hash()(0.0); + } + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::optional& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) { + size_t result = v.index(); + if (const double* dv = std::get_if(&v)) { + result = result * 31 + PigeonInternalDeepHash(*dv); + } else if (const ::flutter::EncodableList* lv = + std::get_if<::flutter::EncodableList>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*lv); + } else if (const ::flutter::EncodableMap* mv = + std::get_if<::flutter::EncodableMap>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*mv); + } else { + std::visit( + [&result](const auto& val) { + using T = std::decay_t; + if constexpr (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v) { + result = result * 31 + PigeonInternalDeepHash(val); + } + }, + v); + } + return result; +} + +} // namespace // MessageData MessageData::MessageData(const Code& code, const EncodableMap& data) @@ -102,10 +310,32 @@ MessageData MessageData::FromEncodableList(const EncodableList& list) { return decoded; } +bool MessageData::operator==(const MessageData& other) const { + return PigeonInternalDeepEquals(name_, other.name_) && + PigeonInternalDeepEquals(description_, other.description_) && + PigeonInternalDeepEquals(code_, other.code_) && + PigeonInternalDeepEquals(data_, other.data_); +} + +bool MessageData::operator!=(const MessageData& other) const { + return !(*this == other); +} + +size_t MessageData::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(name_); + result = result * 31 + PigeonInternalDeepHash(description_); + result = result * 31 + PigeonInternalDeepHash(code_); + result = result * 31 + PigeonInternalDeepHash(data_); + return result; +} + +size_t PigeonInternalDeepHash(const MessageData& v) { return v.Hash(); } + PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {} EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( - uint8_t type, flutter::ByteStreamReader* stream) const { + uint8_t type, ::flutter::ByteStreamReader* stream) const { switch (type) { case 129: { const auto& encodable_enum_arg = ReadValue(stream); @@ -120,12 +350,12 @@ EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( std::get(ReadValue(stream)))); } default: - return flutter::StandardCodecSerializer::ReadValueOfType(type, stream); + return ::flutter::StandardCodecSerializer::ReadValueOfType(type, stream); } } void PigeonInternalCodecSerializer::WriteValue( - const EncodableValue& value, flutter::ByteStreamWriter* stream) const { + const EncodableValue& value, ::flutter::ByteStreamWriter* stream) const { if (const CustomEncodableValue* custom_value = std::get_if(&value)) { if (custom_value->type() == typeid(Code)) { @@ -144,23 +374,23 @@ void PigeonInternalCodecSerializer::WriteValue( return; } } - flutter::StandardCodecSerializer::WriteValue(value, stream); + ::flutter::StandardCodecSerializer::WriteValue(value, stream); } /// The codec used by ExampleHostApi. -const flutter::StandardMessageCodec& ExampleHostApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( +const ::flutter::StandardMessageCodec& ExampleHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( &PigeonInternalCodecSerializer::GetInstance()); } // Sets up an instance of `ExampleHostApi` to handle messages through the // `binary_messenger`. -void ExampleHostApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void ExampleHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, ExampleHostApi* api) { ExampleHostApi::SetUp(binary_messenger, api, ""); } -void ExampleHostApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void ExampleHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, ExampleHostApi* api, const std::string& message_channel_suffix) { const std::string prepended_suffix = @@ -176,7 +406,7 @@ void ExampleHostApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { ErrorOr output = api->GetHostLanguage(); if (output.has_error()) { @@ -203,7 +433,7 @@ void ExampleHostApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_arg = args.at(0); @@ -243,7 +473,7 @@ void ExampleHostApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_message_arg = args.at(0); @@ -287,18 +517,20 @@ EncodableValue ExampleHostApi::WrapError(const FlutterError& error) { // Generated class from Pigeon that represents Flutter messages that can be // called from C++. -MessageFlutterApi::MessageFlutterApi(flutter::BinaryMessenger* binary_messenger) +MessageFlutterApi::MessageFlutterApi( + ::flutter::BinaryMessenger* binary_messenger) : binary_messenger_(binary_messenger), message_channel_suffix_("") {} -MessageFlutterApi::MessageFlutterApi(flutter::BinaryMessenger* binary_messenger, - const std::string& message_channel_suffix) +MessageFlutterApi::MessageFlutterApi( + ::flutter::BinaryMessenger* binary_messenger, + const std::string& message_channel_suffix) : binary_messenger_(binary_messenger), message_channel_suffix_(message_channel_suffix.length() > 0 ? std::string(".") + message_channel_suffix : "") {} -const flutter::StandardMessageCodec& MessageFlutterApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( +const ::flutter::StandardMessageCodec& MessageFlutterApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( &PigeonInternalCodecSerializer::GetInstance()); } diff --git a/packages/pigeon/example/app/windows/runner/messages.g.h b/packages/pigeon/example/app/windows/runner/messages.g.h index c56c0d1cf171..b23312baccff 100644 --- a/packages/pigeon/example/app/windows/runner/messages.g.h +++ b/packages/pigeon/example/app/windows/runner/messages.g.h @@ -25,17 +25,17 @@ class FlutterError { explicit FlutterError(const std::string& code, const std::string& message) : code_(code), message_(message) {} explicit FlutterError(const std::string& code, const std::string& message, - const flutter::EncodableValue& details) + const ::flutter::EncodableValue& details) : code_(code), message_(message), details_(details) {} const std::string& code() const { return code_; } const std::string& message() const { return message_; } - const flutter::EncodableValue& details() const { return details_; } + const ::flutter::EncodableValue& details() const { return details_; } private: std::string code_; std::string message_; - flutter::EncodableValue details_; + ::flutter::EncodableValue details_; }; template @@ -65,11 +65,11 @@ enum class Code { kOne = 0, kTwo = 1 }; class MessageData { public: // Constructs an object setting all non-nullable fields. - explicit MessageData(const Code& code, const flutter::EncodableMap& data); + explicit MessageData(const Code& code, const ::flutter::EncodableMap& data); // Constructs an object setting all fields. explicit MessageData(const std::string* name, const std::string* description, - const Code& code, const flutter::EncodableMap& data); + const Code& code, const ::flutter::EncodableMap& data); const std::string* name() const; void set_name(const std::string_view* value_arg); @@ -82,22 +82,29 @@ class MessageData { const Code& code() const; void set_code(const Code& value_arg); - const flutter::EncodableMap& data() const; - void set_data(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap& data() const; + void set_data(const ::flutter::EncodableMap& value_arg); + + bool operator==(const MessageData& other) const; + bool operator!=(const MessageData& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; private: - static MessageData FromEncodableList(const flutter::EncodableList& list); - flutter::EncodableList ToEncodableList() const; + static MessageData FromEncodableList(const ::flutter::EncodableList& list); + ::flutter::EncodableList ToEncodableList() const; friend class ExampleHostApi; friend class MessageFlutterApi; friend class PigeonInternalCodecSerializer; std::optional name_; std::optional description_; Code code_; - flutter::EncodableMap data_; + ::flutter::EncodableMap data_; }; -class PigeonInternalCodecSerializer : public flutter::StandardCodecSerializer { +class PigeonInternalCodecSerializer + : public ::flutter::StandardCodecSerializer { public: PigeonInternalCodecSerializer(); inline static PigeonInternalCodecSerializer& GetInstance() { @@ -105,12 +112,12 @@ class PigeonInternalCodecSerializer : public flutter::StandardCodecSerializer { return sInstance; } - void WriteValue(const flutter::EncodableValue& value, - flutter::ByteStreamWriter* stream) const override; + void WriteValue(const ::flutter::EncodableValue& value, + ::flutter::ByteStreamWriter* stream) const override; protected: - flutter::EncodableValue ReadValueOfType( - uint8_t type, flutter::ByteStreamReader* stream) const override; + ::flutter::EncodableValue ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const override; }; // Generated interface from Pigeon that represents a handler of messages from @@ -126,16 +133,16 @@ class ExampleHostApi { std::function reply)> result) = 0; // The codec used by ExampleHostApi. - static const flutter::StandardMessageCodec& GetCodec(); + static const ::flutter::StandardMessageCodec& GetCodec(); // Sets up an instance of `ExampleHostApi` to handle messages through the // `binary_messenger`. - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, ExampleHostApi* api); - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, ExampleHostApi* api, const std::string& message_channel_suffix); - static flutter::EncodableValue WrapError(std::string_view error_message); - static flutter::EncodableValue WrapError(const FlutterError& error); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); protected: ExampleHostApi() = default; @@ -144,16 +151,16 @@ class ExampleHostApi { // called from C++. class MessageFlutterApi { public: - MessageFlutterApi(flutter::BinaryMessenger* binary_messenger); - MessageFlutterApi(flutter::BinaryMessenger* binary_messenger, + MessageFlutterApi(::flutter::BinaryMessenger* binary_messenger); + MessageFlutterApi(::flutter::BinaryMessenger* binary_messenger, const std::string& message_channel_suffix); - static const flutter::StandardMessageCodec& GetCodec(); + static const ::flutter::StandardMessageCodec& GetCodec(); void FlutterMethod(const std::string* a_string, std::function&& on_success, std::function&& on_error); private: - flutter::BinaryMessenger* binary_messenger_; + ::flutter::BinaryMessenger* binary_messenger_; std::string message_channel_suffix_; }; diff --git a/packages/pigeon/lib/src/cpp/cpp_generator.dart b/packages/pigeon/lib/src/cpp/cpp_generator.dart index 9708198f6cd8..ffaf56787d66 100644 --- a/packages/pigeon/lib/src/cpp/cpp_generator.dart +++ b/packages/pigeon/lib/src/cpp/cpp_generator.dart @@ -20,7 +20,7 @@ const DocumentCommentSpecification _docCommentSpec = DocumentCommentSpecification(_commentPrefix); /// The default serializer for Flutter. -const String _standardCodecSerializer = 'flutter::StandardCodecSerializer'; +const String _standardCodecSerializer = '::flutter::StandardCodecSerializer'; /// The name of the codec serializer. const String _codecSerializerName = '${classNamePrefix}CodecSerializer'; @@ -459,6 +459,30 @@ class CppHeaderGenerator extends StructuredGenerator { } indent.newln(); } + + _writeFunctionDeclaration( + indent, + 'operator==', + returnType: 'bool', + parameters: ['const ${classDefinition.name}& other'], + isConst: true, + ); + _writeFunctionDeclaration( + indent, + 'operator!=', + returnType: 'bool', + parameters: ['const ${classDefinition.name}& other'], + isConst: true, + ); + indent.writeln( + '/// Returns a hash code value for the object. This method is supported for the benefit of hash tables.', + ); + _writeFunctionDeclaration( + indent, + 'Hash', + returnType: 'size_t', + isConst: true, + ); }); _writeAccessBlock(indent, _ClassAccess.private, () { @@ -466,22 +490,22 @@ class CppHeaderGenerator extends StructuredGenerator { indent, 'FromEncodableList', returnType: isOverflowClass - ? 'flutter::EncodableValue' + ? '::flutter::EncodableValue' : classDefinition.name, - parameters: ['const flutter::EncodableList& list'], + parameters: ['const ::flutter::EncodableList& list'], isStatic: true, ); _writeFunctionDeclaration( indent, 'ToEncodableList', - returnType: 'flutter::EncodableList', + returnType: '::flutter::EncodableList', isConst: true, ); if (isOverflowClass) { _writeFunctionDeclaration( indent, 'Unwrap', - returnType: 'flutter::EncodableValue', + returnType: '::flutter::EncodableValue', ); } if (!isOverflowClass && root.requiresOverflowClass) { @@ -556,8 +580,8 @@ class CppHeaderGenerator extends StructuredGenerator { 'WriteValue', returnType: _voidType, parameters: [ - 'const flutter::EncodableValue& value', - 'flutter::ByteStreamWriter* stream', + 'const ::flutter::EncodableValue& value', + '::flutter::ByteStreamWriter* stream', ], isConst: true, isOverride: true, @@ -567,10 +591,10 @@ class CppHeaderGenerator extends StructuredGenerator { _writeFunctionDeclaration( indent, 'ReadValueOfType', - returnType: 'flutter::EncodableValue', + returnType: '::flutter::EncodableValue', parameters: [ 'uint8_t type', - 'flutter::ByteStreamReader* stream', + '::flutter::ByteStreamReader* stream', ], isConst: true, isOverride: true, @@ -603,20 +627,20 @@ class CppHeaderGenerator extends StructuredGenerator { _writeFunctionDeclaration( indent, api.name, - parameters: ['flutter::BinaryMessenger* binary_messenger'], + parameters: ['::flutter::BinaryMessenger* binary_messenger'], ); _writeFunctionDeclaration( indent, api.name, parameters: [ - 'flutter::BinaryMessenger* binary_messenger', + '::flutter::BinaryMessenger* binary_messenger', 'const std::string& message_channel_suffix', ], ); _writeFunctionDeclaration( indent, 'GetCodec', - returnType: 'const flutter::StandardMessageCodec&', + returnType: 'const ::flutter::StandardMessageCodec&', isStatic: true, ); for (final Method func in api.methods) { @@ -656,7 +680,7 @@ class CppHeaderGenerator extends StructuredGenerator { } }); indent.addScoped(' private:', null, () { - indent.writeln('flutter::BinaryMessenger* binary_messenger_;'); + indent.writeln('::flutter::BinaryMessenger* binary_messenger_;'); indent.writeln('std::string message_channel_suffix_;'); }); }, nestCount: 0); @@ -758,7 +782,7 @@ class CppHeaderGenerator extends StructuredGenerator { _writeFunctionDeclaration( indent, 'GetCodec', - returnType: 'const flutter::StandardMessageCodec&', + returnType: 'const ::flutter::StandardMessageCodec&', isStatic: true, ); indent.writeln( @@ -770,7 +794,7 @@ class CppHeaderGenerator extends StructuredGenerator { returnType: _voidType, isStatic: true, parameters: [ - 'flutter::BinaryMessenger* binary_messenger', + '::flutter::BinaryMessenger* binary_messenger', '${api.name}* api', ], ); @@ -780,7 +804,7 @@ class CppHeaderGenerator extends StructuredGenerator { returnType: _voidType, isStatic: true, parameters: [ - 'flutter::BinaryMessenger* binary_messenger', + '::flutter::BinaryMessenger* binary_messenger', '${api.name}* api', 'const std::string& message_channel_suffix', ], @@ -788,14 +812,14 @@ class CppHeaderGenerator extends StructuredGenerator { _writeFunctionDeclaration( indent, 'WrapError', - returnType: 'flutter::EncodableValue', + returnType: '::flutter::EncodableValue', isStatic: true, parameters: ['std::string_view error_message'], ); _writeFunctionDeclaration( indent, 'WrapError', - returnType: 'flutter::EncodableValue', + returnType: '::flutter::EncodableValue', isStatic: true, parameters: ['const FlutterError& error'], ); @@ -839,17 +863,17 @@ class FlutterError { \t\t: code_(code) {} \texplicit FlutterError(const std::string& code, const std::string& message) \t\t: code_(code), message_(message) {} -\texplicit FlutterError(const std::string& code, const std::string& message, const flutter::EncodableValue& details) +\texplicit FlutterError(const std::string& code, const std::string& message, const ::flutter::EncodableValue& details) \t\t: code_(code), message_(message), details_(details) {} \tconst std::string& code() const { return code_; } \tconst std::string& message() const { return message_; } -\tconst flutter::EncodableValue& details() const { return details_; } +\tconst ::flutter::EncodableValue& details() const { return details_; } private: \tstd::string code_; \tstd::string message_; -\tflutter::EncodableValue details_; +\t::flutter::EncodableValue details_; };'''); } @@ -937,6 +961,8 @@ class CppSourceGenerator extends StructuredGenerator { ]); indent.newln(); _writeSystemHeaderIncludeBlock(indent, [ + 'cmath', + 'limits', 'map', 'string', 'optional', @@ -964,11 +990,11 @@ class CppSourceGenerator extends StructuredGenerator { required String dartPackageName, }) { final usingDirectives = [ - 'flutter::BasicMessageChannel', - 'flutter::CustomEncodableValue', - 'flutter::EncodableList', - 'flutter::EncodableMap', - 'flutter::EncodableValue', + '::flutter::BasicMessageChannel', + '::flutter::CustomEncodableValue', + '::flutter::EncodableList', + '::flutter::EncodableMap', + '::flutter::EncodableValue', ]; usingDirectives.sort(); for (final using in usingDirectives) { @@ -988,6 +1014,10 @@ class CppSourceGenerator extends StructuredGenerator { EncodableValue(""));'''); }, ); + indent.writeln('namespace {'); + _writeDeepEquals(indent); + _writeDeepHash(indent); + indent.writeln('} // namespace'); } @override @@ -1052,6 +1082,267 @@ class CppSourceGenerator extends StructuredGenerator { classDefinition, dartPackageName: dartPackageName, ); + + _writeFunctionDefinition( + indent, + 'operator==', + scope: classDefinition.name, + returnType: 'bool', + parameters: ['const ${classDefinition.name}& other'], + isConst: true, + body: () { + final Iterable checks = orderedFields.map((NamedType field) { + final String name = _makeInstanceVariableName(field); + return 'PigeonInternalDeepEquals($name, other.$name)'; + }); + if (checks.isEmpty) { + indent.writeln('return true;'); + } else { + indent.writeln('return ${checks.join(' && ')};'); + } + }, + ); + + _writeFunctionDefinition( + indent, + 'operator!=', + scope: classDefinition.name, + returnType: 'bool', + parameters: ['const ${classDefinition.name}& other'], + isConst: true, + body: () { + indent.writeln('return !(*this == other);'); + }, + ); + + _writeFunctionDefinition( + indent, + 'Hash', + scope: classDefinition.name, + returnType: 'size_t', + isConst: true, + body: () { + indent.writeln('size_t result = 1;'); + for (final field in orderedFields) { + final String name = _makeInstanceVariableName(field); + indent.writeln( + 'result = result * 31 + PigeonInternalDeepHash($name);', + ); + } + indent.writeln('return result;'); + }, + ); + + _writeFunctionDefinition( + indent, + 'PigeonInternalDeepHash', + returnType: 'size_t', + parameters: ['const ${classDefinition.name}& v'], + body: () { + indent.writeln('return v.Hash();'); + }, + ); + } + + void _writeDeepEquals(Indent indent) { + indent.format(''' +template +bool PigeonInternalDeepEquals(const T& a, const T& b); + +bool PigeonInternalDeepEquals(const double& a, const double& b); + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b); + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b); + +template +bool PigeonInternalDeepEquals(const std::optional& a, const std::optional& b); + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, const std::unique_ptr& b); + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, const ::flutter::EncodableValue& b); + +template +bool PigeonInternalDeepEquals(const T& a, const T& b) { + return a == b; +} + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b) { + if (a.size() != b.size()) { + return false; + } + for (size_t i = 0; i < a.size(); ++i) { + if (!PigeonInternalDeepEquals(a[i], b[i])) { + return false; + } + } + return true; +} + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b) { + if (a.size() != b.size()) { + return false; + } + for (const auto& kv : a) { + bool found = false; + for (const auto& b_kv : b) { + if (PigeonInternalDeepEquals(kv.first, b_kv.first)) { + if (PigeonInternalDeepEquals(kv.second, b_kv.second)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; +} + +bool PigeonInternalDeepEquals(const double& a, const double& b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == b) || (std::isnan(a) && std::isnan(b)); +} + +template +bool PigeonInternalDeepEquals(const std::optional& a, const std::optional& b) { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, const std::unique_ptr& b) { + if (a.get() == b.get()) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, const ::flutter::EncodableValue& b) { + if (a.index() != b.index()) { + return false; + } + if (const double* da = std::get_if(&a)) { + return PigeonInternalDeepEquals(*da, std::get(b)); + } else if (const ::flutter::EncodableList* la = std::get_if<::flutter::EncodableList>(&a)) { + return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b)); + } else if (const ::flutter::EncodableMap* ma = std::get_if<::flutter::EncodableMap>(&a)) { + return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b)); + } + return a == b; +} +'''); + } + + void _writeDeepHash(Indent indent) { + indent.format(''' +template +size_t PigeonInternalDeepHash(const T& v); + +size_t PigeonInternalDeepHash(const double& v); + +template +size_t PigeonInternalDeepHash(const std::vector& v); + +template +size_t PigeonInternalDeepHash(const std::map& v); + +template +size_t PigeonInternalDeepHash(const std::optional& v); + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v); + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v); + +template +size_t PigeonInternalDeepHash(const T& v) { + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::vector& v) { + size_t result = 1; + for (const auto& item : v) { + result = result * 31 + PigeonInternalDeepHash(item); + } + return result; +} + +template +size_t PigeonInternalDeepHash(const std::map& v) { + size_t result = 0; + for (const auto& kv : v) { + result += ((PigeonInternalDeepHash(kv.first) * 31) ^ PigeonInternalDeepHash(kv.second)); + } + return result; +} + +size_t PigeonInternalDeepHash(const double& v) { + if (std::isnan(v)) { + // Normalize NaN to a consistent hash. + return std::hash()(std::numeric_limits::quiet_NaN()); + } + if (v == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return std::hash()(0.0); + } + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::optional& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) { + size_t result = v.index(); + if (const double* dv = std::get_if(&v)) { + result = result * 31 + PigeonInternalDeepHash(*dv); + } else if (const ::flutter::EncodableList* lv = + std::get_if<::flutter::EncodableList>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*lv); + } else if (const ::flutter::EncodableMap* mv = + std::get_if<::flutter::EncodableMap>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*mv); + } else { + std::visit( + [&result](const auto& val) { + using T = std::decay_t; + if constexpr (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v) { + result = result * 31 + PigeonInternalDeepHash(val); + } + }, + v); + } + return result; +} +'''); } @override @@ -1292,7 +1583,10 @@ EncodableValue $_overflowClassName::FromEncodableList( 'ReadValueOfType', scope: _codecSerializerName, returnType: 'EncodableValue', - parameters: ['uint8_t type', 'flutter::ByteStreamReader* stream'], + parameters: [ + 'uint8_t type', + '::flutter::ByteStreamReader* stream', + ], isConst: true, body: () { if (enumeratedTypes.isNotEmpty) { @@ -1330,7 +1624,7 @@ EncodableValue $_overflowClassName::FromEncodableList( returnType: _voidType, parameters: [ 'const EncodableValue& value', - 'flutter::ByteStreamWriter* stream', + '::flutter::ByteStreamWriter* stream', ], isConst: true, body: () { @@ -1388,7 +1682,7 @@ EncodableValue $_overflowClassName::FromEncodableList( indent, api.name, scope: api.name, - parameters: ['flutter::BinaryMessenger* binary_messenger'], + parameters: ['::flutter::BinaryMessenger* binary_messenger'], initializers: [ 'binary_messenger_(binary_messenger)', 'message_channel_suffix_("")', @@ -1399,7 +1693,7 @@ EncodableValue $_overflowClassName::FromEncodableList( api.name, scope: api.name, parameters: [ - 'flutter::BinaryMessenger* binary_messenger', + '::flutter::BinaryMessenger* binary_messenger', 'const std::string& message_channel_suffix', ], initializers: [ @@ -1411,10 +1705,10 @@ EncodableValue $_overflowClassName::FromEncodableList( indent, 'GetCodec', scope: api.name, - returnType: 'const flutter::StandardMessageCodec&', + returnType: 'const ::flutter::StandardMessageCodec&', body: () { indent.writeln( - 'return flutter::StandardMessageCodec::GetInstance(&$_codecSerializerName::GetInstance());', + 'return ::flutter::StandardMessageCodec::GetInstance(&$_codecSerializerName::GetInstance());', ); }, ); @@ -1545,10 +1839,10 @@ EncodableValue $_overflowClassName::FromEncodableList( indent, 'GetCodec', scope: api.name, - returnType: 'const flutter::StandardMessageCodec&', + returnType: 'const ::flutter::StandardMessageCodec&', body: () { indent.writeln( - 'return flutter::StandardMessageCodec::GetInstance(&$_codecSerializerName::GetInstance());', + 'return ::flutter::StandardMessageCodec::GetInstance(&$_codecSerializerName::GetInstance());', ); }, ); @@ -1561,7 +1855,7 @@ EncodableValue $_overflowClassName::FromEncodableList( scope: api.name, returnType: _voidType, parameters: [ - 'flutter::BinaryMessenger* binary_messenger', + '::flutter::BinaryMessenger* binary_messenger', '${api.name}* api', ], body: () { @@ -1574,7 +1868,7 @@ EncodableValue $_overflowClassName::FromEncodableList( scope: api.name, returnType: _voidType, parameters: [ - 'flutter::BinaryMessenger* binary_messenger', + '::flutter::BinaryMessenger* binary_messenger', '${api.name}* api', 'const std::string& message_channel_suffix', ], @@ -1595,7 +1889,7 @@ EncodableValue $_overflowClassName::FromEncodableList( ); indent.writeScoped('if (api != nullptr) {', '} else {', () { indent.write( - 'channel.SetMessageHandler([api](const EncodableValue& message, const flutter::MessageReply& reply) ', + 'channel.SetMessageHandler([api](const EncodableValue& message, const ::flutter::MessageReply& reply) ', ); indent.addScoped('{', '});', () { indent.writeScoped('try {', '}', () { @@ -2187,7 +2481,7 @@ String? _baseCppTypeForBuiltinDartType( TypeDeclaration type, { bool includeFlutterNamespace = true, }) { - final flutterNamespace = includeFlutterNamespace ? 'flutter::' : ''; + final flutterNamespace = includeFlutterNamespace ? '::flutter::' : ''; final cppTypeForDartTypeMap = { 'void': 'void', 'bool': 'bool', diff --git a/packages/pigeon/lib/src/dart/dart_generator.dart b/packages/pigeon/lib/src/dart/dart_generator.dart index 5ebf6dd01f2e..9d1f76f538aa 100644 --- a/packages/pigeon/lib/src/dart/dart_generator.dart +++ b/packages/pigeon/lib/src/dart/dart_generator.dart @@ -365,6 +365,9 @@ class DartGenerator extends StructuredGenerator { Class classDefinition, { required String dartPackageName, }) { + final Iterable fields = getFieldsInSerializationOrder( + classDefinition, + ); indent.writeln('@override'); indent.writeln('// ignore: avoid_equals_and_hash_code_on_mutable_classes'); indent.writeScoped('bool operator ==(Object other) {', '}', () { @@ -375,16 +378,28 @@ class DartGenerator extends StructuredGenerator { indent.writeln('return false;'); }, ); - indent.writeScoped('if (identical(this, other)) {', '}', () { + if (fields.isEmpty) { indent.writeln('return true;'); - }); - indent.writeln('return _deepEquals(encode(), other.encode());'); + } else { + indent.writeScoped('if (identical(this, other)) {', '}', () { + indent.writeln('return true;'); + }); + final String comparisons = fields + .map( + (NamedType field) => + '_deepEquals(${field.name}, other.${field.name})', + ) + .join(' && '); + indent.writeln('return $comparisons;'); + } }); + indent.newln(); indent.writeln('@override'); indent.writeln('// ignore: avoid_equals_and_hash_code_on_mutable_classes'); - indent.writeln('int get hashCode => Object.hashAll(_toList())'); - indent.addln(';'); + indent.writeln( + 'int get hashCode => _deepHash([runtimeType, ..._toList()]);', + ); } @override @@ -1134,6 +1149,7 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger; } if (root.classes.isNotEmpty) { _writeDeepEquals(indent); + _writeDeepHash(indent); } if (root.containsProxyApi) { proxy_api_helper.writeProxyApiPigeonOverrides( @@ -1167,21 +1183,73 @@ final BinaryMessenger? ${varNamePrefix}binaryMessenger; void _writeDeepEquals(Indent indent) { indent.format(r''' bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed - .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); + .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); } if (a is Map && b is Map) { - return a.length == b.length && a.entries.every((MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key])); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } '''); } + void _writeDeepHash(Indent indent) { + indent.format(r''' +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} +'''); + } + static void _writeExtractReplyValueOrThrow(Indent indent) { indent.newln(); indent.format(''' diff --git a/packages/pigeon/lib/src/generator_tools.dart b/packages/pigeon/lib/src/generator_tools.dart index aadb022bd246..b224fa185a5f 100644 --- a/packages/pigeon/lib/src/generator_tools.dart +++ b/packages/pigeon/lib/src/generator_tools.dart @@ -15,7 +15,7 @@ import 'generator.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '26.2.3'; +const String pigeonVersion = '26.3.0'; /// Default plugin package name. const String defaultPluginPackageName = 'dev.flutter.pigeon'; diff --git a/packages/pigeon/lib/src/gobject/gobject_generator.dart b/packages/pigeon/lib/src/gobject/gobject_generator.dart index 0daa9debd069..0906c005d78a 100644 --- a/packages/pigeon/lib/src/gobject/gobject_generator.dart +++ b/packages/pigeon/lib/src/gobject/gobject_generator.dart @@ -327,6 +327,31 @@ class GObjectHeaderGenerator '$returnType ${methodPrefix}_get_$fieldName(${getterArgs.join(', ')});', ); } + + indent.newln(); + addDocumentationComments(indent, [ + '${methodPrefix}_equals:', + '@a: a #$className.', + '@b: another #$className.', + '', + 'Checks if two #$className objects are equal.', + '', + 'Returns: TRUE if @a and @b are equal.', + ], _docCommentSpec); + indent.writeln( + 'gboolean ${methodPrefix}_equals($className* a, $className* b);', + ); + + indent.newln(); + addDocumentationComments(indent, [ + '${methodPrefix}_hash:', + '@object: a #$className.', + '', + 'Calculates a hash code for a #$className object.', + '', + 'Returns: the hash code.', + ], _docCommentSpec); + indent.writeln('guint ${methodPrefix}_hash($className* object);'); } @override @@ -818,7 +843,14 @@ class GObjectSourceGenerator required String dartPackageName, }) { indent.newln(); + indent.writeln('#include '); + indent.newln(); + indent.writeln('#include '); indent.writeln('#include "${generatorOptions.headerIncludePath}"'); + + _writeHashHelpers(indent); + _writeDeepEquals(indent); + _writeDeepHash(indent); } @override @@ -1039,6 +1071,281 @@ class GObjectSourceGenerator indent.writeln('return ${methodPrefix}_new(${args.join(', ')});'); }, ); + + _writeClassEquality( + generatorOptions, + root, + indent, + classDefinition, + dartPackageName: dartPackageName, + ); + } + + void _writeClassEquality( + InternalGObjectOptions generatorOptions, + Root root, + Indent indent, + Class classDefinition, { + required String dartPackageName, + }) { + final String module = _getModule(generatorOptions, dartPackageName); + final String snakeModule = _snakeCaseFromCamelCase(module); + final String className = _getClassName(module, classDefinition.name); + final String snakeClassName = _snakeCaseFromCamelCase(classDefinition.name); + + final String methodPrefix = _getMethodPrefix(module, classDefinition.name); + final String testMacro = '${snakeModule}_IS_$snakeClassName'.toUpperCase(); + + indent.newln(); + indent.writeScoped('gboolean ${methodPrefix}_equals($className* a, $className* b) {', '}', () { + indent.writeScoped('if (a == b) {', '}', () { + indent.writeln('return TRUE;'); + }); + indent.writeScoped('if (a == nullptr || b == nullptr) {', '}', () { + indent.writeln('return FALSE;'); + }); + for (final NamedType field in classDefinition.fields) { + final String fieldName = _getFieldName(field.name); + if (field.type.isClass) { + final String fieldMethodPrefix = _getMethodPrefix( + module, + field.type.baseName, + ); + indent.writeScoped( + 'if (!${fieldMethodPrefix}_equals(a->$fieldName, b->$fieldName)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } else if (field.type.isEnum) { + if (field.type.isNullable) { + indent.writeScoped( + 'if ((a->$fieldName == nullptr) != (b->$fieldName == nullptr)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + indent.writeScoped( + 'if (a->$fieldName != nullptr && *a->$fieldName != *b->$fieldName) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } else { + indent.writeScoped( + 'if (a->$fieldName != b->$fieldName) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } + } else if (_isNumericListType(field.type)) { + indent.writeScoped('if (a->$fieldName != b->$fieldName) {', '}', () { + indent.writeScoped( + 'if (a->$fieldName == nullptr || b->$fieldName == nullptr) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + indent.writeScoped( + 'if (a->${fieldName}_length != b->${fieldName}_length) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + if (field.type.baseName == 'Float32List' || + field.type.baseName == 'Float64List') { + indent.writeScoped( + 'for (size_t i = 0; i < a->${fieldName}_length; i++) {', + '}', + () { + indent.writeScoped( + 'if (!flpigeon_equals_double(a->$fieldName[i], b->$fieldName[i])) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + }, + ); + } else { + final elementSize = field.type.baseName == 'Uint8List' + ? 'sizeof(uint8_t)' + : field.type.baseName == 'Int32List' + ? 'sizeof(int32_t)' + : 'sizeof(int64_t)'; + indent.writeScoped( + 'if (memcmp(a->$fieldName, b->$fieldName, a->${fieldName}_length * $elementSize) != 0) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } + }); + } else if (field.type.baseName == 'bool' || + field.type.baseName == 'int') { + if (field.type.isNullable) { + indent.writeScoped( + 'if ((a->$fieldName == nullptr) != (b->$fieldName == nullptr)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + indent.writeScoped( + 'if (a->$fieldName != nullptr && *a->$fieldName != *b->$fieldName) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } else { + indent.writeScoped( + 'if (a->$fieldName != b->$fieldName) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } + } else if (field.type.baseName == 'double') { + if (field.type.isNullable) { + indent.writeScoped( + 'if ((a->$fieldName == nullptr) != (b->$fieldName == nullptr)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + indent.writeScoped( + 'if (a->$fieldName != nullptr && !flpigeon_equals_double(*a->$fieldName, *b->$fieldName)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } else { + indent.writeScoped( + 'if (!flpigeon_equals_double(a->$fieldName, b->$fieldName)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } + } else if (field.type.baseName == 'String') { + indent.writeScoped( + 'if (g_strcmp0(a->$fieldName, b->$fieldName) != 0) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } else { + indent.writeScoped( + 'if (!flpigeon_deep_equals(a->$fieldName, b->$fieldName)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + } + } + indent.writeln('return TRUE;'); + }); + + indent.newln(); + indent.writeScoped('guint ${methodPrefix}_hash($className* self) {', '}', () { + indent.writeln('g_return_val_if_fail($testMacro(self), 0);'); + indent.writeln('guint result = 0;'); + for (final NamedType field in classDefinition.fields) { + final String fieldName = _getFieldName(field.name); + if (field.type.isClass) { + final String fieldMethodPrefix = _getMethodPrefix( + module, + field.type.baseName, + ); + indent.writeln( + 'result = result * 31 + ${fieldMethodPrefix}_hash(self->$fieldName);', + ); + } else if (field.type.isEnum) { + if (field.type.isNullable) { + indent.writeln( + 'result = result * 31 + (self->$fieldName != nullptr ? static_cast(*self->$fieldName) : 0);', + ); + } else { + indent.writeln( + 'result = result * 31 + static_cast(self->$fieldName);', + ); + } + } else if (_isNumericListType(field.type)) { + indent.writeScoped('{', '}', () { + indent.writeln('size_t len = self->${fieldName}_length;'); + final String elementTypeName = _getType( + module, + field.type, + isElementType: true, + ); + indent.writeln('const $elementTypeName* data = self->$fieldName;'); + indent.writeScoped('if (data != nullptr) {', '}', () { + indent.writeScoped('for (size_t i = 0; i < len; i++) {', '}', () { + if (field.type.baseName == 'Int64List') { + indent.writeln( + 'result = result * 31 + static_cast(data[i] ^ (data[i] >> 32));', + ); + } else if (field.type.baseName == 'Float32List' || + field.type.baseName == 'Float64List') { + indent.writeln( + 'result = result * 31 + flpigeon_hash_double(data[i]);', + ); + } else { + indent.writeln( + 'result = result * 31 + static_cast(data[i]);', + ); + } + }); + }); + }); + } else if (field.type.baseName == 'bool' || + field.type.baseName == 'int') { + if (field.type.isNullable) { + indent.writeln( + 'result = result * 31 + (self->$fieldName != nullptr ? static_cast(*self->$fieldName) : 0);', + ); + } else { + indent.writeln( + 'result = result * 31 + static_cast(self->$fieldName);', + ); + } + } else if (field.type.baseName == 'double') { + if (field.type.isNullable) { + indent.writeln( + 'result = result * 31 + (self->$fieldName != nullptr ? flpigeon_hash_double(*self->$fieldName) : 0);', + ); + } else { + indent.writeln( + 'result = result * 31 + flpigeon_hash_double(self->$fieldName);', + ); + } + } else if (field.type.baseName == 'String') { + indent.writeln( + 'result = result * 31 + (self->$fieldName != nullptr ? g_str_hash(self->$fieldName) : 0);', + ); + } else { + indent.writeln( + 'result = result * 31 + flpigeon_deep_hash(self->$fieldName);', + ); + } + } + indent.writeln('return result;'); + }); } @override @@ -2254,6 +2561,7 @@ String _getType( TypeDeclaration type, { bool isOutput = false, bool primitive = false, + bool isElementType = false, }) { if (type.isClass) { return '${_getClassName(module, type.baseName)}*'; @@ -2273,14 +2581,29 @@ String _getType( } else if (type.baseName == 'String') { return isOutput ? 'gchar*' : 'const gchar*'; } else if (type.baseName == 'Uint8List') { + if (isElementType) { + return 'uint8_t'; + } return isOutput ? 'uint8_t*' : 'const uint8_t*'; } else if (type.baseName == 'Int32List') { + if (isElementType) { + return 'int32_t'; + } return isOutput ? 'int32_t*' : 'const int32_t*'; } else if (type.baseName == 'Int64List') { + if (isElementType) { + return 'int64_t'; + } return isOutput ? 'int64_t*' : 'const int64_t*'; } else if (type.baseName == 'Float32List') { + if (isElementType) { + return 'float'; + } return isOutput ? 'float*' : 'const float*'; } else if (type.baseName == 'Float64List') { + if (isElementType) { + return 'double'; + } return isOutput ? 'double*' : 'const double*'; } else { throw Exception('Unknown type ${type.baseName}'); @@ -2498,7 +2821,8 @@ String _fromFlValue(String module, TypeDeclaration type, String variableName) { } else if (type.baseName == 'Int64List') { return 'fl_value_get_int64_list($variableName)'; } else if (type.baseName == 'Float32List') { - return 'fl_value_get_float32_list($variableName)'; + // TODO(stuartmorgan): Support Float32List. + return 'nullptr'; } else if (type.baseName == 'Float64List') { return 'fl_value_get_float_list($variableName)'; } else { @@ -2512,3 +2836,263 @@ String _getResponseName(String name, String methodName) { methodName[0].toUpperCase() + methodName.substring(1); return '$name${upperMethodName}Response'; } + +void _writeHashHelpers(Indent indent) { + indent.writeScoped( + 'static guint G_GNUC_UNUSED flpigeon_hash_double(double v) {', + '}', + () { + indent.writeScoped('if (std::isnan(v)) {', '}', () { + indent.writeln('return static_cast(0x7FF80000);'); + }); + indent.writeScoped('if (v == 0.0) {', '}', () { + indent.writeln('v = 0.0;'); + }); + indent.writeln('union { double d; uint64_t u; } u;'); + indent.writeln('u.d = v;'); + indent.writeln('return static_cast(u.u ^ (u.u >> 32));'); + }, + ); + indent.writeScoped( + 'static gboolean G_GNUC_UNUSED flpigeon_equals_double(double a, double b) {', + '}', + () { + indent.writeln('return (a == b) || (std::isnan(a) && std::isnan(b));'); + }, + ); +} + +void _writeDeepEquals(Indent indent) { + indent.writeScoped( + 'static gboolean G_GNUC_UNUSED flpigeon_deep_equals(FlValue* a, FlValue* b) {', + '}', + () { + indent.writeScoped('if (a == b) {', '}', () { + indent.writeln('return TRUE;'); + }); + indent.writeScoped('if (a == nullptr || b == nullptr) {', '}', () { + indent.writeln('return FALSE;'); + }); + indent.writeScoped( + 'if (fl_value_get_type(a) != fl_value_get_type(b)) {', + '}', + () { + indent.writeln('return FALSE;'); + }, + ); + indent.writeScoped('switch (fl_value_get_type(a)) {', '}', () { + indent.writeln('case FL_VALUE_TYPE_NULL:'); + indent.writeln(' return TRUE;'); + indent.writeln('case FL_VALUE_TYPE_BOOL:'); + indent.writeln( + ' return fl_value_get_bool(a) == fl_value_get_bool(b);', + ); + indent.writeln('case FL_VALUE_TYPE_INT:'); + indent.writeln(' return fl_value_get_int(a) == fl_value_get_int(b);'); + indent.writeln('case FL_VALUE_TYPE_FLOAT: {'); + indent.writeln( + ' return flpigeon_equals_double(fl_value_get_float(a), fl_value_get_float(b));', + ); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_STRING:'); + indent.writeln( + ' return g_strcmp0(fl_value_get_string(a), fl_value_get_string(b)) == 0;', + ); + indent.writeln('case FL_VALUE_TYPE_UINT8_LIST:'); + indent.writeln( + ' return fl_value_get_length(a) == fl_value_get_length(b) &&', + ); + indent.writeln( + ' memcmp(fl_value_get_uint8_list(a), fl_value_get_uint8_list(b), fl_value_get_length(a)) == 0;', + ); + indent.writeln('case FL_VALUE_TYPE_INT32_LIST:'); + indent.writeln( + ' return fl_value_get_length(a) == fl_value_get_length(b) &&', + ); + indent.writeln( + ' memcmp(fl_value_get_int32_list(a), fl_value_get_int32_list(b), fl_value_get_length(a) * sizeof(int32_t)) == 0;', + ); + indent.writeln('case FL_VALUE_TYPE_INT64_LIST:'); + indent.writeln( + ' return fl_value_get_length(a) == fl_value_get_length(b) &&', + ); + indent.writeln( + ' memcmp(fl_value_get_int64_list(a), fl_value_get_int64_list(b), fl_value_get_length(a) * sizeof(int64_t)) == 0;', + ); + indent.writeln('case FL_VALUE_TYPE_FLOAT_LIST: {'); + indent.writeln(' size_t len = fl_value_get_length(a);'); + indent.writeln(' if (len != fl_value_get_length(b)) {'); + indent.writeln(' return FALSE;'); + indent.writeln(' }'); + indent.writeln(' const double* a_data = fl_value_get_float_list(a);'); + indent.writeln(' const double* b_data = fl_value_get_float_list(b);'); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', '}', () { + indent.writeln( + 'if (!flpigeon_equals_double(a_data[i], b_data[i])) {', + ); + indent.writeln(' return FALSE;'); + indent.writeln('}'); + }); + indent.writeln(' return TRUE;'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_LIST: {'); + indent.writeln(' size_t len = fl_value_get_length(a);'); + indent.writeln(' if (len != fl_value_get_length(b)) {'); + indent.writeln(' return FALSE;'); + indent.writeln(' }'); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', '}', () { + indent.writeln( + 'if (!flpigeon_deep_equals(fl_value_get_list_value(a, i), fl_value_get_list_value(b, i))) {', + ); + indent.writeln(' return FALSE;'); + indent.writeln('}'); + }); + indent.writeln(' return TRUE;'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_MAP: {'); + indent.writeln(' size_t len = fl_value_get_length(a);'); + indent.writeln(' if (len != fl_value_get_length(b)) {'); + indent.writeln(' return FALSE;'); + indent.writeln(' }'); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', '}', () { + indent.writeln('FlValue* key = fl_value_get_map_key(a, i);'); + indent.writeln('FlValue* val = fl_value_get_map_value(a, i);'); + indent.writeln('gboolean found = FALSE;'); + indent.writeScoped('for (size_t j = 0; j < len; j++) {', '}', () { + indent.writeln('FlValue* b_key = fl_value_get_map_key(b, j);'); + indent.writeScoped( + 'if (flpigeon_deep_equals(key, b_key)) {', + '}', + () { + indent.writeln( + 'FlValue* b_val = fl_value_get_map_value(b, j);', + ); + indent.writeln('if (flpigeon_deep_equals(val, b_val)) {'); + indent.nest(1, () { + indent.writeln('found = TRUE;'); + indent.writeln('break;'); + }); + indent.writeln('} else {'); + indent.nest(1, () { + indent.writeln('return FALSE;'); + }); + indent.writeln('}'); + }, + ); + }); + indent.writeln('if (!found) {'); + indent.writeln(' return FALSE;'); + indent.writeln('}'); + }); + indent.writeln(' return TRUE;'); + indent.writeln('}'); + indent.writeln('default:'); + indent.writeln(' return FALSE;'); + }); + indent.writeln('return FALSE;'); + }, + ); +} + +void _writeDeepHash(Indent indent) { + indent.writeScoped( + 'static guint G_GNUC_UNUSED flpigeon_deep_hash(FlValue* value) {', + '}', + () { + indent.writeScoped('if (value == nullptr) {', '}', () { + indent.writeln('return 0;'); + }); + indent.writeScoped('switch (fl_value_get_type(value)) {', '}', () { + indent.writeln('case FL_VALUE_TYPE_NULL:'); + indent.writeln(' return 0;'); + indent.writeln('case FL_VALUE_TYPE_BOOL:'); + indent.writeln(' return fl_value_get_bool(value) ? 1231 : 1237;'); + indent.writeln('case FL_VALUE_TYPE_INT: {'); + indent.writeln(' int64_t v = fl_value_get_int(value);'); + indent.writeln(' return static_cast(v ^ (v >> 32));'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_FLOAT:'); + indent.writeln( + ' return flpigeon_hash_double(fl_value_get_float(value));', + ); + indent.writeln('case FL_VALUE_TYPE_STRING:'); + indent.writeln(' return g_str_hash(fl_value_get_string(value));'); + indent.writeln('case FL_VALUE_TYPE_UINT8_LIST: {'); + indent.writeln(' guint result = 1;'); + indent.writeln(' size_t len = fl_value_get_length(value);'); + indent.writeln( + ' const uint8_t* data = fl_value_get_uint8_list(value);', + ); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', ' }', () { + indent.writeln(' result = result * 31 + data[i];'); + }); + indent.writeln(' return result;'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_INT32_LIST: {'); + indent.writeln(' guint result = 1;'); + indent.writeln(' size_t len = fl_value_get_length(value);'); + indent.writeln( + ' const int32_t* data = fl_value_get_int32_list(value);', + ); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', ' }', () { + indent.writeln( + ' result = result * 31 + static_cast(data[i]);', + ); + }); + indent.writeln(' return result;'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_INT64_LIST: {'); + indent.writeln(' guint result = 1;'); + indent.writeln(' size_t len = fl_value_get_length(value);'); + indent.writeln( + ' const int64_t* data = fl_value_get_int64_list(value);', + ); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', ' }', () { + indent.writeln( + ' result = result * 31 + static_cast(data[i] ^ (data[i] >> 32));', + ); + }); + indent.writeln(' return result;'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_FLOAT_LIST: {'); + indent.writeln(' guint result = 1;'); + indent.writeln(' size_t len = fl_value_get_length(value);'); + indent.writeln( + ' const double* data = fl_value_get_float_list(value);', + ); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', '}', () { + indent.writeln( + 'result = result * 31 + flpigeon_hash_double(data[i]);', + ); + }); + indent.writeln(' return result;'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_LIST: {'); + indent.writeln(' guint result = 1;'); + indent.writeln(' size_t len = fl_value_get_length(value);'); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', '}', () { + indent.writeln( + 'result = result * 31 + flpigeon_deep_hash(fl_value_get_list_value(value, i));', + ); + }); + indent.writeln(' return result;'); + indent.writeln('}'); + indent.writeln('case FL_VALUE_TYPE_MAP: {'); + indent.writeln(' guint result = 0;'); + indent.writeln(' size_t len = fl_value_get_length(value);'); + indent.writeScoped(' for (size_t i = 0; i < len; i++) {', '}', () { + indent.writeln( + 'result += ((flpigeon_deep_hash(fl_value_get_map_key(value, i)) * 31) ^ flpigeon_deep_hash(fl_value_get_map_value(value, i)));', + ); + }); + indent.writeln(' return result;'); + indent.writeln('}'); + indent.writeln('default:'); + indent.writeln( + ' return static_cast(fl_value_get_type(value));', + ); + }); + indent.writeln('return 0;'); + }, + ); +} diff --git a/packages/pigeon/lib/src/java/java_generator.dart b/packages/pigeon/lib/src/java/java_generator.dart index af6181e91d2c..a1cedf755fad 100644 --- a/packages/pigeon/lib/src/java/java_generator.dart +++ b/packages/pigeon/lib/src/java/java_generator.dart @@ -208,6 +208,9 @@ class JavaGenerator extends StructuredGenerator { } indent.writeln('public class ${generatorOptions.className!} {'); indent.inc(); + _writeNumberHelpers(indent); + _writeDeepEquals(indent); + _writeDeepHashCode(indent); } @override @@ -383,13 +386,7 @@ class JavaGenerator extends StructuredGenerator { final Iterable checks = classDefinition.fields.map(( NamedType field, ) { - // Objects.equals only does pointer equality for array types. - if (_javaTypeIsArray(field.type)) { - return 'Arrays.equals(${field.name}, that.${field.name})'; - } - return field.type.isNullable - ? 'Objects.equals(${field.name}, that.${field.name})' - : '${field.name}.equals(that.${field.name})'; + return 'pigeonDeepEquals(${field.name}, that.${field.name})'; }); indent.writeln('return ${checks.join(' && ')};'); }); @@ -398,36 +395,273 @@ class JavaGenerator extends StructuredGenerator { // Implement hashCode(). indent.writeln('@Override'); indent.writeScoped('public int hashCode() {', '}', () { - // As with equalty checks, arrays need special handling. - final Iterable arrayFieldNames = classDefinition.fields - .where((NamedType field) => _javaTypeIsArray(field.type)) - .map((NamedType field) => field.name); - final Iterable nonArrayFieldNames = classDefinition.fields - .where((NamedType field) => !_javaTypeIsArray(field.type)) - .map((NamedType field) => field.name); - final nonArrayHashValue = nonArrayFieldNames.isNotEmpty - ? 'Objects.hash(${nonArrayFieldNames.join(', ')})' - : '0'; - - if (arrayFieldNames.isEmpty) { - // Return directly if there are no array variables, to avoid redundant - // variable lint warnings. - indent.writeln('return $nonArrayHashValue;'); + final Iterable fieldNames = classDefinition.fields.map( + (NamedType field) => field.name, + ); + if (fieldNames.isEmpty) { + indent.writeln('return Objects.hash(getClass());'); } else { - const resultVar = '${varNamePrefix}result'; - indent.writeln('int $resultVar = $nonArrayHashValue;'); - // Manually mix in the Arrays.hashCode values. - for (final name in arrayFieldNames) { - indent.writeln( - '$resultVar = 31 * $resultVar + Arrays.hashCode($name);', - ); - } - indent.writeln('return $resultVar;'); + indent.writeln( + 'Object[] fields = new Object[] {getClass(), ${fieldNames.join(', ')}};', + ); + indent.writeln('return pigeonDeepHashCode(fields);'); } }); indent.newln(); } + void _writeDeepEquals(Indent indent) { + indent.writeScoped( + 'static boolean pigeonDeepEquals(Object a, Object b) {', + '}', + () { + indent.writeln('if (a == b) { return true; }'); + indent.writeln('if (a == null || b == null) { return false; }'); + indent.writeScoped( + 'if (a instanceof byte[] && b instanceof byte[]) {', + '}', + () { + indent.writeln('return Arrays.equals((byte[]) a, (byte[]) b);'); + }, + ); + indent.writeScoped( + 'if (a instanceof int[] && b instanceof int[]) {', + '}', + () { + indent.writeln('return Arrays.equals((int[]) a, (int[]) b);'); + }, + ); + indent.writeScoped( + 'if (a instanceof long[] && b instanceof long[]) {', + '}', + () { + indent.writeln('return Arrays.equals((long[]) a, (long[]) b);'); + }, + ); + indent.writeScoped( + 'if (a instanceof double[] && b instanceof double[]) {', + '}', + () { + indent.writeln('double[] da = (double[]) a;'); + indent.writeln('double[] db = (double[]) b;'); + indent.writeScoped('if (da.length != db.length) {', '}', () { + indent.writeln('return false;'); + }); + indent.writeScoped( + 'for (int i = 0; i < da.length; i++) {', + '}', + () { + indent.writeScoped( + 'if (!pigeonDoubleEquals(da[i], db[i])) {', + '}', + () { + indent.writeln('return false;'); + }, + ); + }, + ); + indent.writeln('return true;'); + }, + ); + indent.writeScoped( + 'if (a instanceof List && b instanceof List) {', + '}', + () { + indent.writeln('List listA = (List) a;'); + indent.writeln('List listB = (List) b;'); + indent.writeln( + 'if (listA.size() != listB.size()) { return false; }', + ); + indent.writeScoped( + 'for (int i = 0; i < listA.size(); i++) {', + '}', + () { + indent.writeScoped( + 'if (!pigeonDeepEquals(listA.get(i), listB.get(i))) {', + '}', + () { + indent.writeln('return false;'); + }, + ); + }, + ); + indent.writeln('return true;'); + }, + ); + indent.writeScoped( + 'if (a instanceof Map && b instanceof Map) {', + '}', + () { + indent.writeln('Map mapA = (Map) a;'); + indent.writeln('Map mapB = (Map) b;'); + indent.writeln('if (mapA.size() != mapB.size()) { return false; }'); + indent.writeScoped( + 'for (Map.Entry entryA : mapA.entrySet()) {', + '}', + () { + indent.writeln('Object keyA = entryA.getKey();'); + indent.writeln('Object valueA = entryA.getValue();'); + indent.writeln('boolean found = false;'); + indent.writeScoped( + 'for (Map.Entry entryB : mapB.entrySet()) {', + '}', + () { + indent.writeln('Object keyB = entryB.getKey();'); + indent.writeScoped( + 'if (pigeonDeepEquals(keyA, keyB)) {', + '}', + () { + indent.writeln('Object valueB = entryB.getValue();'); + indent.writeln( + 'if (pigeonDeepEquals(valueA, valueB)) {', + ); + indent.nest(1, () { + indent.writeln('found = true;'); + indent.writeln('break;'); + }); + indent.writeln('} else {'); + indent.nest(1, () { + indent.writeln('return false;'); + }); + indent.writeln('}'); + }, + ); + }, + ); + indent.writeScoped('if (!found) {', '}', () { + indent.writeln('return false;'); + }); + }, + ); + indent.writeln('return true;'); + }, + ); + indent.writeScoped( + 'if (a instanceof Double && b instanceof Double) {', + '}', + () { + indent.writeln( + 'return pigeonDoubleEquals((double) a, (double) b);', + ); + }, + ); + indent.writeScoped( + 'if (a instanceof Float && b instanceof Float) {', + '}', + () { + indent.writeln('return pigeonFloatEquals((float) a, (float) b);'); + }, + ); + indent.writeln('return a.equals(b);'); + }, + ); + indent.newln(); + } + + void _writeDeepHashCode(Indent indent) { + indent.writeScoped('static int pigeonDeepHashCode(Object value) {', '}', () { + indent.writeln('if (value == null) { return 0; }'); + indent.writeScoped('if (value instanceof byte[]) {', '}', () { + indent.writeln('return Arrays.hashCode((byte[]) value);'); + }); + indent.writeScoped('if (value instanceof int[]) {', '}', () { + indent.writeln('return Arrays.hashCode((int[]) value);'); + }); + indent.writeScoped('if (value instanceof long[]) {', '}', () { + indent.writeln('return Arrays.hashCode((long[]) value);'); + }); + indent.writeScoped('if (value instanceof double[]) {', '}', () { + indent.writeln('double[] da = (double[]) value;'); + indent.writeln('int result = 1;'); + indent.writeScoped('for (double d : da) {', '}', () { + indent.writeln('result = 31 * result + pigeonDoubleHashCode(d);'); + }); + indent.writeln('return result;'); + }); + indent.writeScoped('if (value instanceof List) {', '}', () { + indent.writeln('int result = 1;'); + indent.writeScoped('for (Object item : (List) value) {', '}', () { + indent.writeln('result = 31 * result + pigeonDeepHashCode(item);'); + }); + indent.writeln('return result;'); + }); + indent.writeScoped('if (value instanceof Map) {', '}', () { + indent.writeln('int result = 0;'); + indent.writeScoped( + 'for (Map.Entry entry : ((Map) value).entrySet()) {', + '}', + () { + indent.writeln( + 'result += ((pigeonDeepHashCode(entry.getKey()) * 31) ^ pigeonDeepHashCode(entry.getValue()));', + ); + }, + ); + indent.writeln('return result;'); + }); + indent.writeScoped('if (value instanceof Object[]) {', '}', () { + indent.writeln('int result = 1;'); + indent.writeScoped('for (Object item : (Object[]) value) {', '}', () { + indent.writeln('result = 31 * result + pigeonDeepHashCode(item);'); + }); + indent.writeln('return result;'); + }); + indent.writeScoped('if (value instanceof Double) {', '}', () { + indent.writeln('return pigeonDoubleHashCode((double) value);'); + }); + indent.writeScoped('if (value instanceof Float) {', '}', () { + indent.writeln('return pigeonFloatHashCode((float) value);'); + }); + indent.writeln('return value.hashCode();'); + }); + indent.newln(); + } + + void _writeNumberHelpers(Indent indent) { + indent.writeScoped( + 'static boolean pigeonDoubleEquals(double a, double b) {', + '}', + () { + indent.writeln('// Normalize -0.0 to 0.0 and handle NaN equality.'); + indent.writeln( + 'return (a == 0.0 ? 0.0 : a) == (b == 0.0 ? 0.0 : b) || (Double.isNaN(a) && Double.isNaN(b));', + ); + }, + ); + indent.newln(); + indent.writeScoped( + 'static boolean pigeonFloatEquals(float a, float b) {', + '}', + () { + indent.writeln('// Normalize -0.0 to 0.0 and handle NaN equality.'); + indent.writeln( + 'return (a == 0.0f ? 0.0f : a) == (b == 0.0f ? 0.0f : b) || (Float.isNaN(a) && Float.isNaN(b));', + ); + }, + ); + indent.newln(); + indent.writeScoped('static int pigeonDoubleHashCode(double d) {', '}', () { + indent.writeln( + '// Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes.', + ); + indent.writeScoped('if (d == 0.0) {', '}', () { + indent.writeln('d = 0.0;'); + }); + indent.writeln('long bits = Double.doubleToLongBits(d);'); + indent.writeln('return (int) (bits ^ (bits >>> 32));'); + }); + indent.newln(); + indent.writeScoped('static int pigeonFloatHashCode(float f) {', '}', () { + indent.writeln( + '// Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes.', + ); + indent.writeScoped('if (f == 0.0f) {', '}', () { + indent.writeln('f = 0.0f;'); + }); + indent.writeln('return Float.floatToIntBits(f);'); + }); + indent.newln(); + } + void _writeClassBuilder( InternalJavaOptions generatorOptions, Root root, @@ -1372,10 +1606,6 @@ String _javaTypeForBuiltinGenericDartType( } } -bool _javaTypeIsArray(TypeDeclaration type) { - return _javaTypeForBuiltinDartType(type)?.endsWith('[]') ?? false; -} - String? _javaTypeForBuiltinDartType(TypeDeclaration type) { const javaTypeForDartTypeMap = { 'bool': 'Boolean', diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 5ad4f3ee88a4..fee33c6b66d6 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -345,19 +345,49 @@ class KotlinGenerator extends StructuredGenerator { required String dartPackageName, }) { indent.writeScoped('override fun equals(other: Any?): Boolean {', '}', () { - indent.writeScoped('if (other !is ${classDefinition.name}) {', '}', () { - indent.writeln('return false'); - }); + indent.writeScoped( + 'if (other == null || other.javaClass != javaClass) {', + '}', + () { + indent.writeln('return false'); + }, + ); indent.writeScoped('if (this === other) {', '}', () { indent.writeln('return true'); }); - indent.write( - 'return ${_getUtilsClassName(generatorOptions)}.deepEquals(toList(), other.toList())', + + indent.writeln('val other = other as ${classDefinition.name}'); + final Iterable fields = getFieldsInSerializationOrder( + classDefinition, ); + if (fields.isEmpty) { + indent.writeln('return true'); + } else { + final String utils = _getUtilsClassName(generatorOptions); + final String comparisons = fields + .map( + (NamedType field) => + '$utils.deepEquals(this.${field.name}, other.${field.name})', + ) + .join(' && '); + indent.writeln('return $comparisons'); + } }); indent.newln(); - indent.writeln('override fun hashCode(): Int = toList().hashCode()'); + indent.writeScoped('override fun hashCode(): Int {', '}', () { + final Iterable fields = getFieldsInSerializationOrder( + classDefinition, + ); + final String utils = _getUtilsClassName(generatorOptions); + indent.writeln('var result = javaClass.hashCode()'); + for (final field in fields) { + indent.writeln( + 'result = 31 * result + $utils.deepHash(this.${field.name})', + ); + } + indent.writeln('return result'); + }); } void _writeDataClassSignature( @@ -1342,35 +1372,157 @@ if (wrapped == null) { void _writeDeepEquals(InternalKotlinOptions generatorOptions, Indent indent) { indent.format(''' fun deepEquals(a: Any?, b: Any?): Boolean { + if (a === b) { + return true + } + if (a == null || b == null) { + return false + } if (a is ByteArray && b is ByteArray) { - return a.contentEquals(b) + return a.contentEquals(b) } if (a is IntArray && b is IntArray) { - return a.contentEquals(b) + return a.contentEquals(b) } if (a is LongArray && b is LongArray) { - return a.contentEquals(b) + return a.contentEquals(b) } if (a is DoubleArray && b is DoubleArray) { - return a.contentEquals(b) + if (a.size != b.size) return false + for (i in a.indices) { + if (!doubleEquals(a[i], b[i])) return false + } + return true + } + if (a is FloatArray && b is FloatArray) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!floatEquals(a[i], b[i])) return false + } + return true } if (a is Array<*> && b is Array<*>) { - return a.size == b.size && - a.indices.all{ deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + for (i in a.indices) { + if (!deepEquals(a[i], b[i])) return false + } + return true } if (a is List<*> && b is List<*>) { - return a.size == b.size && - a.indices.all{ deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + val iterA = a.iterator() + val iterB = b.iterator() + while (iterA.hasNext() && iterB.hasNext()) { + if (!deepEquals(iterA.next(), iterB.next())) return false + } + return true } if (a is Map<*, *> && b is Map<*, *>) { - return a.size == b.size && a.all { - (b as Map).contains(it.key) && - deepEquals(it.value, b[it.key]) + if (a.size != b.size) return false + for (entry in a) { + val key = entry.key + var found = false + for (bEntry in b) { + if (deepEquals(key, bEntry.key)) { + if (deepEquals(entry.value, bEntry.value)) { + found = true + break + } else { + return false + } + } + } + if (!found) return false } + return true + } + if (a is Double && b is Double) { + return doubleEquals(a, b) + } + if (a is Float && b is Float) { + return floatEquals(a, b) } return a == b } - '''); +'''); + } + + void _writeDeepHash(InternalKotlinOptions generatorOptions, Indent indent) { + indent.format(''' +fun deepHash(value: Any?): Int { + return when (value) { + null -> 0 + is ByteArray -> value.contentHashCode() + is IntArray -> value.contentHashCode() + is LongArray -> value.contentHashCode() + is DoubleArray -> { + var result = 1 + for (item in value) { + result = 31 * result + doubleHash(item) + } + result + } + is FloatArray -> { + var result = 1 + for (item in value) { + result = 31 * result + floatHash(item) + } + result + } + is Array<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is List<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is Map<*, *> -> { + var result = 0 + for (entry in value) { + result += ((deepHash(entry.key) * 31) xor deepHash(entry.value)) + } + result + } + is Double -> doubleHash(value) + is Float -> floatHash(value) + else -> value.hashCode() + } +} +'''); + } + + void _writeNumberHelpers(Indent indent) { + indent.format(''' +fun doubleEquals(a: Double, b: Double): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0) 0.0 else a) == (if (b == 0.0) 0.0 else b) || (a.isNaN() && b.isNaN()) +} + +fun floatEquals(a: Float, b: Float): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0f) 0.0f else a) == (if (b == 0.0f) 0.0f else b) || (a.isNaN() && b.isNaN()) +} + +fun doubleHash(d: Double): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (d == 0.0) 0.0 else d + val bits = java.lang.Double.doubleToLongBits(normalized) + return (bits xor (bits ushr 32)).toInt() +} + +fun floatHash(f: Float): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (f == 0.0f) 0.0f else f + return java.lang.Float.floatToIntBits(normalized) +} +'''); } @override @@ -1392,7 +1544,9 @@ fun deepEquals(a: Any?, b: Any?): Boolean { _writeWrapError(generatorOptions, indent); } if (root.classes.isNotEmpty) { + _writeNumberHelpers(indent); _writeDeepEquals(generatorOptions, indent); + _writeDeepHash(generatorOptions, indent); } }, ); diff --git a/packages/pigeon/lib/src/objc/objc_generator.dart b/packages/pigeon/lib/src/objc/objc_generator.dart index e76459a19dc9..af0ad6d1ea2a 100644 --- a/packages/pigeon/lib/src/objc/objc_generator.dart +++ b/packages/pigeon/lib/src/objc/objc_generator.dart @@ -518,6 +518,8 @@ class ObjcSourceGenerator extends StructuredGenerator { indent.writeln('@import Flutter;'); indent.writeln('#endif'); indent.newln(); + _writeDeepEquals(indent); + _writeDeepHash(indent); } @override @@ -614,10 +616,76 @@ class ObjcSourceGenerator extends StructuredGenerator { classDefinition, dartPackageName: dartPackageName, ); + _writeObjcEquality(generatorOptions, indent, classDefinition); indent.writeln('@end'); indent.newln(); } + void _writeObjcEquality( + InternalObjcOptions generatorOptions, + Indent indent, + Class classDefinition, + ) { + final String className = _className( + generatorOptions.prefix, + classDefinition.name, + ); + indent.write('- (BOOL)isEqual:(id)object '); + indent.addScoped('{', '}', () { + indent.writeScoped('if (self == object) {', '}', () { + indent.writeln('return YES;'); + }); + indent.writeScoped( + 'if (![object isKindOfClass:[self class]]) {', + '}', + () { + indent.writeln('return NO;'); + }, + ); + indent.writeln('$className *other = ($className *)object;'); + final Iterable checks = classDefinition.fields.map(( + NamedType field, + ) { + final String name = field.name; + if (_usesPrimitive(field.type)) { + if (field.type.baseName == 'double') { + return '(self.$name == other.$name || (isnan(self.$name) && isnan(other.$name)))'; + } + return 'self.$name == other.$name'; + } else { + return 'FLTPigeonDeepEquals(self.$name, other.$name)'; + } + }); + if (checks.isEmpty) { + indent.writeln('return YES;'); + } else { + indent.writeln('return ${checks.join(' && ')};'); + } + }); + indent.newln(); + indent.write('- (NSUInteger)hash '); + indent.addScoped('{', '}', () { + indent.writeln('NSUInteger result = [self class].hash;'); + for (final NamedType field in classDefinition.fields) { + final String name = field.name; + if (_usesPrimitive(field.type)) { + if (field.type.baseName == 'double') { + indent.writeln( + 'result = result * 31 + (isnan(self.$name) ? (NSUInteger)0x7FF8000000000000 : @(self.$name).hash);', + ); + } else { + indent.writeln('result = result * 31 + @(self.$name).hash;'); + } + } else { + indent.writeln( + 'result = result * 31 + FLTPigeonDeepHash(self.$name);', + ); + } + } + indent.writeln('return result;'); + }); + } + @override void writeClassEncode( InternalObjcOptions generatorOptions, @@ -1601,6 +1669,104 @@ const Map _objcTypeForNonNullableDartTypeMap = 'Object': _ObjcType(baseName: 'id'), }; +void _writeDeepEquals(Indent indent) { + indent.format(''' +static BOOL __attribute__((unused)) FLTPigeonDeepEquals(id _Nullable a, id _Nullable b) { + if (a == b) { + return YES; + } + if (a == nil) { + return b == [NSNull null]; + } + if (b == nil) { + return a == [NSNull null]; + } + if ([a isKindOfClass:[NSNumber class]] && [b isKindOfClass:[NSNumber class]]) { + return [a isEqual:b] || (isnan([(NSNumber *)a doubleValue]) && isnan([(NSNumber *)b doubleValue])); + } + if ([a isKindOfClass:[NSArray class]] && [b isKindOfClass:[NSArray class]]) { + NSArray *arrayA = (NSArray *)a; + NSArray *arrayB = (NSArray *)b; + if (arrayA.count != arrayB.count) { + return NO; + } + for (NSUInteger i = 0; i < arrayA.count; i++) { + if (!FLTPigeonDeepEquals(arrayA[i], arrayB[i])) { + return NO; + } + } + return YES; + } + if ([a isKindOfClass:[NSDictionary class]] && [b isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictA = (NSDictionary *)a; + NSDictionary *dictB = (NSDictionary *)b; + if (dictA.count != dictB.count) { + return NO; + } + for (id keyA in dictA) { + id valueA = dictA[keyA]; + BOOL found = NO; + for (id keyB in dictB) { + if (FLTPigeonDeepEquals(keyA, keyB)) { + id valueB = dictB[keyB]; + if (FLTPigeonDeepEquals(valueA, valueB)) { + found = YES; + break; + } else { + return NO; + } + } + } + if (!found) { + return NO; + } + } + return YES; + } + return [a isEqual:b]; +} +'''); +} + +void _writeDeepHash(Indent indent) { + indent.format(''' +static NSUInteger __attribute__((unused)) FLTPigeonDeepHash(id _Nullable value) { + if (value == nil || value == (id)[NSNull null]) { + return 0; + } + if ([value isKindOfClass:[NSNumber class]]) { + NSNumber *n = (NSNumber *)value; + double d = n.doubleValue; + if (isnan(d)) { + // Normalize NaN to a consistent hash. + return (NSUInteger)0x7FF8000000000000; + } + if (d == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + d = 0.0; + } + return @(d).hash; + } + if ([value isKindOfClass:[NSArray class]]) { + NSUInteger result = 1; + for (id item in (NSArray *)value) { + result = result * 31 + FLTPigeonDeepHash(item); + } + return result; + } + if ([value isKindOfClass:[NSDictionary class]]) { + NSUInteger result = 0; + NSDictionary *dict = (NSDictionary *)value; + for (id key in dict) { + result += ((FLTPigeonDeepHash(key) * 31) ^ FLTPigeonDeepHash(dict[key])); + } + return result; + } + return [value hash]; +} +'''); +} + bool _usesPrimitive(TypeDeclaration type) { // Only non-nullable types are unboxed. if (!type.isNullable) { diff --git a/packages/pigeon/lib/src/swift/swift_generator.dart b/packages/pigeon/lib/src/swift/swift_generator.dart index 220f0ba8d6dd..45b968ed4d10 100644 --- a/packages/pigeon/lib/src/swift/swift_generator.dart +++ b/packages/pigeon/lib/src/swift/swift_generator.dart @@ -661,21 +661,46 @@ if (wrapped == nil) { 'static func == (lhs: ${classDefinition.name}, rhs: ${classDefinition.name}) -> Bool {', '}', () { + indent.writeScoped( + 'if Swift.type(of: lhs) != Swift.type(of: rhs) {', + '}', + () { + indent.writeln('return false'); + }, + ); if (classDefinition.isSwiftClass) { indent.writeScoped('if (lhs === rhs) {', '}', () { indent.writeln('return true'); }); } - indent.write( - 'return deepEquals${generatorOptions.fileSpecificClassNameComponent}(lhs.toList(), rhs.toList())', + final Iterable fields = getFieldsInSerializationOrder( + classDefinition, ); + if (fields.isEmpty) { + indent.writeln('return true'); + } else { + final String comparisons = fields + .map( + (NamedType field) => + 'deepEquals${generatorOptions.fileSpecificClassNameComponent ?? ''}(lhs.${field.name}, rhs.${field.name})', + ) + .join(' && '); + indent.writeln('return $comparisons'); + } }, ); + indent.newln(); indent.writeScoped('func hash(into hasher: inout Hasher) {', '}', () { - indent.writeln( - 'deepHash${generatorOptions.fileSpecificClassNameComponent}(value: toList(), hasher: &hasher)', + indent.writeln('hasher.combine("${classDefinition.name}")'); + final Iterable fields = getFieldsInSerializationOrder( + classDefinition, ); + for (final field in fields) { + indent.writeln( + 'deepHash${generatorOptions.fileSpecificClassNameComponent ?? ''}(value: ${field.name}, hasher: &hasher)', + ); + } }); } @@ -1449,7 +1474,7 @@ if (wrapped == nil) { indent.write('return '); indent.addScoped('[', ']', () { indent.writeln(r'"\(error)",'); - indent.writeln(r'"\(type(of: error))",'); + indent.writeln(r'"\(Swift.type(of: error))",'); indent.writeln(r'"Stacktrace: \(Thread.callStackSymbols)",'); }); }); @@ -1482,8 +1507,29 @@ private func nilOrValue(_ value: Any?) -> T? { } void _writeDeepEquals(InternalSwiftOptions generatorOptions, Indent indent) { + final deepEqualsName = + 'deepEquals${generatorOptions.fileSpecificClassNameComponent ?? ''}'; + final deepHashName = + 'deepHash${generatorOptions.fileSpecificClassNameComponent ?? ''}'; + final doubleEqualsName = + 'doubleEquals${generatorOptions.fileSpecificClassNameComponent ?? ''}'; + final doubleHashName = + 'doubleHash${generatorOptions.fileSpecificClassNameComponent ?? ''}'; indent.format(''' -func deepEquals${generatorOptions.fileSpecificClassNameComponent}(_ lhs: Any?, _ rhs: Any?) -> Bool { +private func $doubleEqualsName(_ lhs: Double, _ rhs: Double) -> Bool { + return (lhs.isNaN && rhs.isNaN) || lhs == rhs +} + +private func $doubleHashName(_ value: Double, _ hasher: inout Hasher) { + if value.isNaN { + hasher.combine(0x7FF8000000000000) + } else { + // Normalize -0.0 to 0.0 + hasher.combine(value == 0 ? 0 : value) + } +} + +func $deepEqualsName(_ lhs: Any?, _ rhs: Any?) -> Bool { let cleanLhs = nilOrValue(lhs) as Any? let cleanRhs = nilOrValue(rhs) as Any? switch (cleanLhs, cleanRhs) { @@ -1493,59 +1539,92 @@ func deepEquals${generatorOptions.fileSpecificClassNameComponent}(_ lhs: Any?, _ case (nil, _), (_, nil): return false - case is (Void, Void): + case (let lhs as AnyObject, let rhs as AnyObject) where lhs === rhs: return true - case let (cleanLhsHashable, cleanRhsHashable) as (AnyHashable, AnyHashable): - return cleanLhsHashable == cleanRhsHashable + case is (Void, Void): + return true - case let (cleanLhsArray, cleanRhsArray) as ([Any?], [Any?]): - guard cleanLhsArray.count == cleanRhsArray.count else { return false } - for (index, element) in cleanLhsArray.enumerated() { - if !deepEquals${generatorOptions.fileSpecificClassNameComponent}(element, cleanRhsArray[index]) { + case (let lhsArray, let rhsArray) as ([Any?], [Any?]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !$deepEqualsName(element, rhsArray[index]) { return false } } return true - case let (cleanLhsDictionary, cleanRhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): - guard cleanLhsDictionary.count == cleanRhsDictionary.count else { return false } - for (key, cleanLhsValue) in cleanLhsDictionary { - guard cleanRhsDictionary.index(forKey: key) != nil else { return false } - if !deepEquals${generatorOptions.fileSpecificClassNameComponent}(cleanLhsValue, cleanRhsDictionary[key]!) { + case (let lhsArray, let rhsArray) as ([Double], [Double]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !$doubleEqualsName(element, rhsArray[index]) { return false } } return true + case (let lhsDictionary, let rhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): + guard lhsDictionary.count == rhsDictionary.count else { return false } + for (lhsKey, lhsValue) in lhsDictionary { + var found = false + for (rhsKey, rhsValue) in rhsDictionary { + if $deepEqualsName(lhsKey, rhsKey) { + if $deepEqualsName(lhsValue, rhsValue) { + found = true + break + } else { + return false + } + } + } + if !found { return false } + } + return true + + case (let lhs as Double, let rhs as Double): + return $doubleEqualsName(lhs, rhs) + + case (let lhsHashable, let rhsHashable) as (AnyHashable, AnyHashable): + return lhsHashable == rhsHashable + default: - // Any other type shouldn't be able to be used with pigeon. File an issue if you find this to be untrue. return false } } -func deepHash${generatorOptions.fileSpecificClassNameComponent}(value: Any?, hasher: inout Hasher) { - if let valueList = value as? [AnyHashable] { - for item in valueList { deepHash${generatorOptions.fileSpecificClassNameComponent}(value: item, hasher: &hasher) } - return - } - - if let valueDict = value as? [AnyHashable: AnyHashable] { - for key in valueDict.keys { - hasher.combine(key) - deepHash${generatorOptions.fileSpecificClassNameComponent}(value: valueDict[key]!, hasher: &hasher) +func $deepHashName(value: Any?, hasher: inout Hasher) { + let cleanValue = nilOrValue(value) as Any? + if let cleanValue = cleanValue { + if let doubleValue = cleanValue as? Double { + $doubleHashName(doubleValue, &hasher) + } else if let valueList = cleanValue as? [Any?] { + for item in valueList { + $deepHashName(value: item, hasher: &hasher) + } + } else if let valueList = cleanValue as? [Double] { + for item in valueList { + $doubleHashName(item, &hasher) + } + } else if let valueDict = cleanValue as? [AnyHashable: Any?] { + var result = 0 + for (key, value) in valueDict { + var entryKeyHasher = Hasher() + $deepHashName(value: key, hasher: &entryKeyHasher) + var entryValueHasher = Hasher() + $deepHashName(value: value, hasher: &entryValueHasher) + result = result &+ ((entryKeyHasher.finalize() &* 31) ^ entryValueHasher.finalize()) + } + hasher.combine(result) + } else if let hashableValue = cleanValue as? AnyHashable { + hasher.combine(hashableValue) + } else { + hasher.combine(String(describing: cleanValue)) } - return - } - - if let hashableValue = value as? AnyHashable { - hasher.combine(hashableValue.hashValue) + } else { + hasher.combine(0) } - - return hasher.combine(String(describing: value)) } - - '''); +'''); } @override diff --git a/packages/pigeon/pigeons/core_tests.dart b/packages/pigeon/pigeons/core_tests.dart index 8795c8de900a..f55c0bbfd519 100644 --- a/packages/pigeon/pigeons/core_tests.dart +++ b/packages/pigeon/pigeons/core_tests.dart @@ -435,6 +435,17 @@ abstract class HostIntegrationCoreApi { // ========== Synchronous nullable method tests ========== + /// Returns the result of platform-side equality check. + bool areAllNullableTypesEqual(AllNullableTypes a, AllNullableTypes b); + + /// Returns the platform-side hash code for the given object. + int getAllNullableTypesHash(AllNullableTypes value); + + /// Returns the platform-side hash code for the given object. + int getAllNullableTypesWithoutRecursionHash( + AllNullableTypesWithoutRecursion value, + ); + /// Returns the passed object, to test serialization and deserialization. @ObjCSelector('echoAllNullableTypes:') @SwiftFunction('echo(_:)') diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/AlternateLanguageTestPlugin.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/AlternateLanguageTestPlugin.java index 4ece8628d399..5c46688a6d95 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/AlternateLanguageTestPlugin.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/AlternateLanguageTestPlugin.java @@ -61,6 +61,23 @@ public void noop() {} return everything; } + @Override + public @NonNull Boolean areAllNullableTypesEqual( + @NonNull AllNullableTypes a, @NonNull AllNullableTypes b) { + return a.equals(b); + } + + @Override + public @NonNull Long getAllNullableTypesHash(@NonNull AllNullableTypes value) { + return (long) value.hashCode(); + } + + @Override + public @NonNull Long getAllNullableTypesWithoutRecursionHash( + @NonNull AllNullableTypesWithoutRecursion value) { + return (long) value.hashCode(); + } + @Override public @Nullable AllNullableTypesWithoutRecursion echoAllNullableTypesWithoutRecursion( @Nullable AllNullableTypesWithoutRecursion everything) { diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java index 66e0f3516fa4..8b3825849e95 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java @@ -26,11 +26,167 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Objects; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) public class CoreTests { + static boolean pigeonDoubleEquals(double a, double b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0 ? 0.0 : a) == (b == 0.0 ? 0.0 : b) || (Double.isNaN(a) && Double.isNaN(b)); + } + + static boolean pigeonFloatEquals(float a, float b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0f ? 0.0f : a) == (b == 0.0f ? 0.0f : b) || (Float.isNaN(a) && Float.isNaN(b)); + } + + static int pigeonDoubleHashCode(double d) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (d == 0.0) { + d = 0.0; + } + long bits = Double.doubleToLongBits(d); + return (int) (bits ^ (bits >>> 32)); + } + + static int pigeonFloatHashCode(float f) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (f == 0.0f) { + f = 0.0f; + } + return Float.floatToIntBits(f); + } + + static boolean pigeonDeepEquals(Object a, Object b) { + if (a == b) { + return true; + } + if (a == null || b == null) { + return false; + } + if (a instanceof byte[] && b instanceof byte[]) { + return Arrays.equals((byte[]) a, (byte[]) b); + } + if (a instanceof int[] && b instanceof int[]) { + return Arrays.equals((int[]) a, (int[]) b); + } + if (a instanceof long[] && b instanceof long[]) { + return Arrays.equals((long[]) a, (long[]) b); + } + if (a instanceof double[] && b instanceof double[]) { + double[] da = (double[]) a; + double[] db = (double[]) b; + if (da.length != db.length) { + return false; + } + for (int i = 0; i < da.length; i++) { + if (!pigeonDoubleEquals(da[i], db[i])) { + return false; + } + } + return true; + } + if (a instanceof List && b instanceof List) { + List listA = (List) a; + List listB = (List) b; + if (listA.size() != listB.size()) { + return false; + } + for (int i = 0; i < listA.size(); i++) { + if (!pigeonDeepEquals(listA.get(i), listB.get(i))) { + return false; + } + } + return true; + } + if (a instanceof Map && b instanceof Map) { + Map mapA = (Map) a; + Map mapB = (Map) b; + if (mapA.size() != mapB.size()) { + return false; + } + for (Map.Entry entryA : mapA.entrySet()) { + Object keyA = entryA.getKey(); + Object valueA = entryA.getValue(); + boolean found = false; + for (Map.Entry entryB : mapB.entrySet()) { + Object keyB = entryB.getKey(); + if (pigeonDeepEquals(keyA, keyB)) { + Object valueB = entryB.getValue(); + if (pigeonDeepEquals(valueA, valueB)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; + } + if (a instanceof Double && b instanceof Double) { + return pigeonDoubleEquals((double) a, (double) b); + } + if (a instanceof Float && b instanceof Float) { + return pigeonFloatEquals((float) a, (float) b); + } + return a.equals(b); + } + + static int pigeonDeepHashCode(Object value) { + if (value == null) { + return 0; + } + if (value instanceof byte[]) { + return Arrays.hashCode((byte[]) value); + } + if (value instanceof int[]) { + return Arrays.hashCode((int[]) value); + } + if (value instanceof long[]) { + return Arrays.hashCode((long[]) value); + } + if (value instanceof double[]) { + double[] da = (double[]) value; + int result = 1; + for (double d : da) { + result = 31 * result + pigeonDoubleHashCode(d); + } + return result; + } + if (value instanceof List) { + int result = 1; + for (Object item : (List) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Map) { + int result = 0; + for (Map.Entry entry : ((Map) value).entrySet()) { + result += + ((pigeonDeepHashCode(entry.getKey()) * 31) ^ pigeonDeepHashCode(entry.getValue())); + } + return result; + } + if (value instanceof Object[]) { + int result = 1; + for (Object item : (Object[]) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Double) { + return pigeonDoubleHashCode((double) value); + } + if (value instanceof Float) { + return pigeonFloatHashCode((float) value); + } + return value.hashCode(); + } /** Error class for passing custom error details to Flutter via a thrown PlatformException. */ public static class FlutterError extends RuntimeException { @@ -120,12 +276,13 @@ public boolean equals(Object o) { return false; } UnusedClass that = (UnusedClass) o; - return Objects.equals(aField, that.aField); + return pigeonDeepEquals(aField, that.aField); } @Override public int hashCode() { - return Objects.hash(aField); + Object[] fields = new Object[] {getClass(), aField}; + return pigeonDeepHashCode(fields); } public static final class Builder { @@ -542,69 +699,71 @@ public boolean equals(Object o) { return false; } AllTypes that = (AllTypes) o; - return aBool.equals(that.aBool) - && anInt.equals(that.anInt) - && anInt64.equals(that.anInt64) - && aDouble.equals(that.aDouble) - && Arrays.equals(aByteArray, that.aByteArray) - && Arrays.equals(a4ByteArray, that.a4ByteArray) - && Arrays.equals(a8ByteArray, that.a8ByteArray) - && Arrays.equals(aFloatArray, that.aFloatArray) - && anEnum.equals(that.anEnum) - && anotherEnum.equals(that.anotherEnum) - && aString.equals(that.aString) - && anObject.equals(that.anObject) - && list.equals(that.list) - && stringList.equals(that.stringList) - && intList.equals(that.intList) - && doubleList.equals(that.doubleList) - && boolList.equals(that.boolList) - && enumList.equals(that.enumList) - && objectList.equals(that.objectList) - && listList.equals(that.listList) - && mapList.equals(that.mapList) - && map.equals(that.map) - && stringMap.equals(that.stringMap) - && intMap.equals(that.intMap) - && enumMap.equals(that.enumMap) - && objectMap.equals(that.objectMap) - && listMap.equals(that.listMap) - && mapMap.equals(that.mapMap); + return pigeonDeepEquals(aBool, that.aBool) + && pigeonDeepEquals(anInt, that.anInt) + && pigeonDeepEquals(anInt64, that.anInt64) + && pigeonDeepEquals(aDouble, that.aDouble) + && pigeonDeepEquals(aByteArray, that.aByteArray) + && pigeonDeepEquals(a4ByteArray, that.a4ByteArray) + && pigeonDeepEquals(a8ByteArray, that.a8ByteArray) + && pigeonDeepEquals(aFloatArray, that.aFloatArray) + && pigeonDeepEquals(anEnum, that.anEnum) + && pigeonDeepEquals(anotherEnum, that.anotherEnum) + && pigeonDeepEquals(aString, that.aString) + && pigeonDeepEquals(anObject, that.anObject) + && pigeonDeepEquals(list, that.list) + && pigeonDeepEquals(stringList, that.stringList) + && pigeonDeepEquals(intList, that.intList) + && pigeonDeepEquals(doubleList, that.doubleList) + && pigeonDeepEquals(boolList, that.boolList) + && pigeonDeepEquals(enumList, that.enumList) + && pigeonDeepEquals(objectList, that.objectList) + && pigeonDeepEquals(listList, that.listList) + && pigeonDeepEquals(mapList, that.mapList) + && pigeonDeepEquals(map, that.map) + && pigeonDeepEquals(stringMap, that.stringMap) + && pigeonDeepEquals(intMap, that.intMap) + && pigeonDeepEquals(enumMap, that.enumMap) + && pigeonDeepEquals(objectMap, that.objectMap) + && pigeonDeepEquals(listMap, that.listMap) + && pigeonDeepEquals(mapMap, that.mapMap); } @Override public int hashCode() { - int pigeonVar_result = - Objects.hash( - aBool, - anInt, - anInt64, - aDouble, - anEnum, - anotherEnum, - aString, - anObject, - list, - stringList, - intList, - doubleList, - boolList, - enumList, - objectList, - listList, - mapList, - map, - stringMap, - intMap, - enumMap, - objectMap, - listMap, - mapMap); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(a4ByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(a8ByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aFloatArray); - return pigeonVar_result; + Object[] fields = + new Object[] { + getClass(), + aBool, + anInt, + anInt64, + aDouble, + aByteArray, + a4ByteArray, + a8ByteArray, + aFloatArray, + anEnum, + anotherEnum, + aString, + anObject, + list, + stringList, + intList, + doubleList, + boolList, + enumList, + objectList, + listList, + mapList, + map, + stringMap, + intMap, + enumMap, + objectMap, + listMap, + mapMap + }; + return pigeonDeepHashCode(fields); } public static final class Builder { @@ -1288,75 +1447,77 @@ public boolean equals(Object o) { return false; } AllNullableTypes that = (AllNullableTypes) o; - return Objects.equals(aNullableBool, that.aNullableBool) - && Objects.equals(aNullableInt, that.aNullableInt) - && Objects.equals(aNullableInt64, that.aNullableInt64) - && Objects.equals(aNullableDouble, that.aNullableDouble) - && Arrays.equals(aNullableByteArray, that.aNullableByteArray) - && Arrays.equals(aNullable4ByteArray, that.aNullable4ByteArray) - && Arrays.equals(aNullable8ByteArray, that.aNullable8ByteArray) - && Arrays.equals(aNullableFloatArray, that.aNullableFloatArray) - && Objects.equals(aNullableEnum, that.aNullableEnum) - && Objects.equals(anotherNullableEnum, that.anotherNullableEnum) - && Objects.equals(aNullableString, that.aNullableString) - && Objects.equals(aNullableObject, that.aNullableObject) - && Objects.equals(allNullableTypes, that.allNullableTypes) - && Objects.equals(list, that.list) - && Objects.equals(stringList, that.stringList) - && Objects.equals(intList, that.intList) - && Objects.equals(doubleList, that.doubleList) - && Objects.equals(boolList, that.boolList) - && Objects.equals(enumList, that.enumList) - && Objects.equals(objectList, that.objectList) - && Objects.equals(listList, that.listList) - && Objects.equals(mapList, that.mapList) - && Objects.equals(recursiveClassList, that.recursiveClassList) - && Objects.equals(map, that.map) - && Objects.equals(stringMap, that.stringMap) - && Objects.equals(intMap, that.intMap) - && Objects.equals(enumMap, that.enumMap) - && Objects.equals(objectMap, that.objectMap) - && Objects.equals(listMap, that.listMap) - && Objects.equals(mapMap, that.mapMap) - && Objects.equals(recursiveClassMap, that.recursiveClassMap); + return pigeonDeepEquals(aNullableBool, that.aNullableBool) + && pigeonDeepEquals(aNullableInt, that.aNullableInt) + && pigeonDeepEquals(aNullableInt64, that.aNullableInt64) + && pigeonDeepEquals(aNullableDouble, that.aNullableDouble) + && pigeonDeepEquals(aNullableByteArray, that.aNullableByteArray) + && pigeonDeepEquals(aNullable4ByteArray, that.aNullable4ByteArray) + && pigeonDeepEquals(aNullable8ByteArray, that.aNullable8ByteArray) + && pigeonDeepEquals(aNullableFloatArray, that.aNullableFloatArray) + && pigeonDeepEquals(aNullableEnum, that.aNullableEnum) + && pigeonDeepEquals(anotherNullableEnum, that.anotherNullableEnum) + && pigeonDeepEquals(aNullableString, that.aNullableString) + && pigeonDeepEquals(aNullableObject, that.aNullableObject) + && pigeonDeepEquals(allNullableTypes, that.allNullableTypes) + && pigeonDeepEquals(list, that.list) + && pigeonDeepEquals(stringList, that.stringList) + && pigeonDeepEquals(intList, that.intList) + && pigeonDeepEquals(doubleList, that.doubleList) + && pigeonDeepEquals(boolList, that.boolList) + && pigeonDeepEquals(enumList, that.enumList) + && pigeonDeepEquals(objectList, that.objectList) + && pigeonDeepEquals(listList, that.listList) + && pigeonDeepEquals(mapList, that.mapList) + && pigeonDeepEquals(recursiveClassList, that.recursiveClassList) + && pigeonDeepEquals(map, that.map) + && pigeonDeepEquals(stringMap, that.stringMap) + && pigeonDeepEquals(intMap, that.intMap) + && pigeonDeepEquals(enumMap, that.enumMap) + && pigeonDeepEquals(objectMap, that.objectMap) + && pigeonDeepEquals(listMap, that.listMap) + && pigeonDeepEquals(mapMap, that.mapMap) + && pigeonDeepEquals(recursiveClassMap, that.recursiveClassMap); } @Override public int hashCode() { - int pigeonVar_result = - Objects.hash( - aNullableBool, - aNullableInt, - aNullableInt64, - aNullableDouble, - aNullableEnum, - anotherNullableEnum, - aNullableString, - aNullableObject, - allNullableTypes, - list, - stringList, - intList, - doubleList, - boolList, - enumList, - objectList, - listList, - mapList, - recursiveClassList, - map, - stringMap, - intMap, - enumMap, - objectMap, - listMap, - mapMap, - recursiveClassMap); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullableByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullable4ByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullable8ByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullableFloatArray); - return pigeonVar_result; + Object[] fields = + new Object[] { + getClass(), + aNullableBool, + aNullableInt, + aNullableInt64, + aNullableDouble, + aNullableByteArray, + aNullable4ByteArray, + aNullable8ByteArray, + aNullableFloatArray, + aNullableEnum, + anotherNullableEnum, + aNullableString, + aNullableObject, + allNullableTypes, + list, + stringList, + intList, + doubleList, + boolList, + enumList, + objectList, + listList, + mapList, + recursiveClassList, + map, + stringMap, + intMap, + enumMap, + objectMap, + listMap, + mapMap, + recursiveClassMap + }; + return pigeonDeepHashCode(fields); } public static final class Builder { @@ -2048,69 +2209,71 @@ public boolean equals(Object o) { return false; } AllNullableTypesWithoutRecursion that = (AllNullableTypesWithoutRecursion) o; - return Objects.equals(aNullableBool, that.aNullableBool) - && Objects.equals(aNullableInt, that.aNullableInt) - && Objects.equals(aNullableInt64, that.aNullableInt64) - && Objects.equals(aNullableDouble, that.aNullableDouble) - && Arrays.equals(aNullableByteArray, that.aNullableByteArray) - && Arrays.equals(aNullable4ByteArray, that.aNullable4ByteArray) - && Arrays.equals(aNullable8ByteArray, that.aNullable8ByteArray) - && Arrays.equals(aNullableFloatArray, that.aNullableFloatArray) - && Objects.equals(aNullableEnum, that.aNullableEnum) - && Objects.equals(anotherNullableEnum, that.anotherNullableEnum) - && Objects.equals(aNullableString, that.aNullableString) - && Objects.equals(aNullableObject, that.aNullableObject) - && Objects.equals(list, that.list) - && Objects.equals(stringList, that.stringList) - && Objects.equals(intList, that.intList) - && Objects.equals(doubleList, that.doubleList) - && Objects.equals(boolList, that.boolList) - && Objects.equals(enumList, that.enumList) - && Objects.equals(objectList, that.objectList) - && Objects.equals(listList, that.listList) - && Objects.equals(mapList, that.mapList) - && Objects.equals(map, that.map) - && Objects.equals(stringMap, that.stringMap) - && Objects.equals(intMap, that.intMap) - && Objects.equals(enumMap, that.enumMap) - && Objects.equals(objectMap, that.objectMap) - && Objects.equals(listMap, that.listMap) - && Objects.equals(mapMap, that.mapMap); + return pigeonDeepEquals(aNullableBool, that.aNullableBool) + && pigeonDeepEquals(aNullableInt, that.aNullableInt) + && pigeonDeepEquals(aNullableInt64, that.aNullableInt64) + && pigeonDeepEquals(aNullableDouble, that.aNullableDouble) + && pigeonDeepEquals(aNullableByteArray, that.aNullableByteArray) + && pigeonDeepEquals(aNullable4ByteArray, that.aNullable4ByteArray) + && pigeonDeepEquals(aNullable8ByteArray, that.aNullable8ByteArray) + && pigeonDeepEquals(aNullableFloatArray, that.aNullableFloatArray) + && pigeonDeepEquals(aNullableEnum, that.aNullableEnum) + && pigeonDeepEquals(anotherNullableEnum, that.anotherNullableEnum) + && pigeonDeepEquals(aNullableString, that.aNullableString) + && pigeonDeepEquals(aNullableObject, that.aNullableObject) + && pigeonDeepEquals(list, that.list) + && pigeonDeepEquals(stringList, that.stringList) + && pigeonDeepEquals(intList, that.intList) + && pigeonDeepEquals(doubleList, that.doubleList) + && pigeonDeepEquals(boolList, that.boolList) + && pigeonDeepEquals(enumList, that.enumList) + && pigeonDeepEquals(objectList, that.objectList) + && pigeonDeepEquals(listList, that.listList) + && pigeonDeepEquals(mapList, that.mapList) + && pigeonDeepEquals(map, that.map) + && pigeonDeepEquals(stringMap, that.stringMap) + && pigeonDeepEquals(intMap, that.intMap) + && pigeonDeepEquals(enumMap, that.enumMap) + && pigeonDeepEquals(objectMap, that.objectMap) + && pigeonDeepEquals(listMap, that.listMap) + && pigeonDeepEquals(mapMap, that.mapMap); } @Override public int hashCode() { - int pigeonVar_result = - Objects.hash( - aNullableBool, - aNullableInt, - aNullableInt64, - aNullableDouble, - aNullableEnum, - anotherNullableEnum, - aNullableString, - aNullableObject, - list, - stringList, - intList, - doubleList, - boolList, - enumList, - objectList, - listList, - mapList, - map, - stringMap, - intMap, - enumMap, - objectMap, - listMap, - mapMap); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullableByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullable4ByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullable8ByteArray); - pigeonVar_result = 31 * pigeonVar_result + Arrays.hashCode(aNullableFloatArray); - return pigeonVar_result; + Object[] fields = + new Object[] { + getClass(), + aNullableBool, + aNullableInt, + aNullableInt64, + aNullableDouble, + aNullableByteArray, + aNullable4ByteArray, + aNullable8ByteArray, + aNullableFloatArray, + aNullableEnum, + anotherNullableEnum, + aNullableString, + aNullableObject, + list, + stringList, + intList, + doubleList, + boolList, + enumList, + objectList, + listList, + mapList, + map, + stringMap, + intMap, + enumMap, + objectMap, + listMap, + mapMap + }; + return pigeonDeepHashCode(fields); } public static final class Builder { @@ -2573,25 +2736,30 @@ public boolean equals(Object o) { return false; } AllClassesWrapper that = (AllClassesWrapper) o; - return allNullableTypes.equals(that.allNullableTypes) - && Objects.equals(allNullableTypesWithoutRecursion, that.allNullableTypesWithoutRecursion) - && Objects.equals(allTypes, that.allTypes) - && classList.equals(that.classList) - && Objects.equals(nullableClassList, that.nullableClassList) - && classMap.equals(that.classMap) - && Objects.equals(nullableClassMap, that.nullableClassMap); + return pigeonDeepEquals(allNullableTypes, that.allNullableTypes) + && pigeonDeepEquals( + allNullableTypesWithoutRecursion, that.allNullableTypesWithoutRecursion) + && pigeonDeepEquals(allTypes, that.allTypes) + && pigeonDeepEquals(classList, that.classList) + && pigeonDeepEquals(nullableClassList, that.nullableClassList) + && pigeonDeepEquals(classMap, that.classMap) + && pigeonDeepEquals(nullableClassMap, that.nullableClassMap); } @Override public int hashCode() { - return Objects.hash( - allNullableTypes, - allNullableTypesWithoutRecursion, - allTypes, - classList, - nullableClassList, - classMap, - nullableClassMap); + Object[] fields = + new Object[] { + getClass(), + allNullableTypes, + allNullableTypesWithoutRecursion, + allTypes, + classList, + nullableClassList, + classMap, + nullableClassMap + }; + return pigeonDeepHashCode(fields); } public static final class Builder { @@ -2728,12 +2896,13 @@ public boolean equals(Object o) { return false; } TestMessage that = (TestMessage) o; - return Objects.equals(testList, that.testList); + return pigeonDeepEquals(testList, that.testList); } @Override public int hashCode() { - return Objects.hash(testList); + Object[] fields = new Object[] {getClass(), testList}; + return pigeonDeepHashCode(fields); } public static final class Builder { @@ -2959,6 +3128,15 @@ public interface HostIntegrationCoreApi { /** Returns passed in int. */ @NonNull Long echoRequiredInt(@NonNull Long anInt); + /** Returns the result of platform-side equality check. */ + @NonNull + Boolean areAllNullableTypesEqual(@NonNull AllNullableTypes a, @NonNull AllNullableTypes b); + /** Returns the platform-side hash code for the given object. */ + @NonNull + Long getAllNullableTypesHash(@NonNull AllNullableTypes value); + /** Returns the platform-side hash code for the given object. */ + @NonNull + Long getAllNullableTypesWithoutRecursionHash(@NonNull AllNullableTypesWithoutRecursion value); /** Returns the passed object, to test serialization and deserialization. */ @Nullable AllNullableTypes echoAllNullableTypes(@Nullable AllNullableTypes everything); @@ -4120,6 +4298,83 @@ static void setUp( channel.setMessageHandler(null); } } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.areAllNullableTypesEqual" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AllNullableTypes aArg = (AllNullableTypes) args.get(0); + AllNullableTypes bArg = (AllNullableTypes) args.get(1); + try { + Boolean output = api.areAllNullableTypesEqual(aArg, bArg); + wrapped.add(0, output); + } catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesHash" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AllNullableTypes valueArg = (AllNullableTypes) args.get(0); + try { + Long output = api.getAllNullableTypesHash(valueArg); + wrapped.add(0, output); + } catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesWithoutRecursionHash" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AllNullableTypesWithoutRecursion valueArg = + (AllNullableTypesWithoutRecursion) args.get(0); + try { + Long output = api.getAllNullableTypesWithoutRecursionHash(valueArg); + wrapped.add(0, output); + } catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } { BasicMessageChannel channel = new BasicMessageChannel<>( diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java index 1fb1e451dbbb..5671cc465163 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java @@ -266,4 +266,86 @@ public void error(Throwable error) { }); assertTrue(didCall[0]); } + + @Test + public void equalityWithNaN() { + AllNullableTypes withNaN = + new AllNullableTypes.Builder().setANullableDouble(Double.NaN).build(); + AllNullableTypes withAnotherNaN = + new AllNullableTypes.Builder().setANullableDouble(Double.NaN).build(); + assertEquals(withNaN, withAnotherNaN); + assertEquals(withNaN.hashCode(), withAnotherNaN.hashCode()); + } + + @Test + public void crossTypeEquality() { + AllNullableTypes a = new AllNullableTypes.Builder().setANullableInt(1L).build(); + CoreTests.AllNullableTypesWithoutRecursion b = + new CoreTests.AllNullableTypesWithoutRecursion.Builder().setANullableInt(1L).build(); + assertNotEquals(a, b); + assertNotEquals(b, a); + } + + @Test + public void zeroEquality() { + AllNullableTypes a = new AllNullableTypes.Builder().setANullableDouble(0.0).build(); + AllNullableTypes b = new AllNullableTypes.Builder().setANullableDouble(-0.0).build(); + + assertEquals(a, b); + assertEquals(a.hashCode(), b.hashCode()); + } + + @Test + public void nestedByteArrayEquality() { + byte[] data = new byte[] {1, 2, 3}; + List list1 = new ArrayList<>(); + list1.add(data); + AllNullableTypes a = new AllNullableTypes.Builder().setList(list1).build(); + + List list2 = new ArrayList<>(); + list2.add(new byte[] {1, 2, 3}); + AllNullableTypes b = new AllNullableTypes.Builder().setList(list2).build(); + + assertEquals(a, b); + assertEquals(a.hashCode(), b.hashCode()); + } + + @Test + public void nestedZeroListEquality() { + List list1 = new ArrayList<>(); + list1.add(0.0); + AllNullableTypes a = new AllNullableTypes.Builder().setDoubleList(list1).build(); + + List list2 = new ArrayList<>(); + list2.add(-0.0); + AllNullableTypes b = new AllNullableTypes.Builder().setDoubleList(list2).build(); + + assertEquals(a, b); + assertEquals(a.hashCode(), b.hashCode()); + } + + @Test + public void zeroMapKeyEquality() { + Map map1 = new HashMap<>(); + map1.put(0.0, "a"); + AllNullableTypes a = new AllNullableTypes.Builder().setMap(map1).build(); + + Map map2 = new HashMap<>(); + map2.put(-0.0, "a"); + AllNullableTypes b = new AllNullableTypes.Builder().setMap(map2).build(); + + assertEquals(a, b); + assertEquals(a.hashCode(), b.hashCode()); + } + + @Test + public void nestedZeroArrayEquality() { + AllNullableTypes a = + new AllNullableTypes.Builder().setANullableFloatArray(new double[] {0.0}).build(); + AllNullableTypes b = + new AllNullableTypes.Builder().setANullableFloatArray(new double[] {-0.0}).build(); + + assertEquals(a, b); + assertEquals(a.hashCode(), b.hashCode()); + } } diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/AlternateLanguageTestPlugin.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/AlternateLanguageTestPlugin.m index 1d494ba618ed..fdd0a0563ae5 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/AlternateLanguageTestPlugin.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/AlternateLanguageTestPlugin.m @@ -201,6 +201,23 @@ - (nullable NSNumber *)echoRequiredInt:(NSInteger)anInt return @(anInt); } +- (nullable NSNumber *)areAllNullableTypesEqualA:(FLTAllNullableTypes *)a + b:(FLTAllNullableTypes *)b + error:(FlutterError *_Nullable *_Nonnull)error { + return @([a isEqual:b]); +} + +- (nullable NSNumber *)getAllNullableTypesHashValue:(FLTAllNullableTypes *)value + error:(FlutterError *_Nullable *_Nonnull)error { + return @([value hash]); +} + +- (nullable NSNumber *) + getAllNullableTypesWithoutRecursionHashValue:(FLTAllNullableTypesWithoutRecursion *)value + error:(FlutterError *_Nullable *_Nonnull)error { + return @([value hash]); +} + - (nullable NSString *)extractNestedNullableStringFrom:(FLTAllClassesWrapper *)wrapper error:(FlutterError *_Nullable *_Nonnull)error { return wrapper.allNullableTypes.aNullableString; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/CoreTests.gen.m index 38bd8f4a417f..7c114f8fa47b 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/CoreTests.gen.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/CoreTests.gen.m @@ -13,6 +13,97 @@ @import Flutter; #endif +static BOOL __attribute__((unused)) FLTPigeonDeepEquals(id _Nullable a, id _Nullable b) { + if (a == b) { + return YES; + } + if (a == nil) { + return b == [NSNull null]; + } + if (b == nil) { + return a == [NSNull null]; + } + if ([a isKindOfClass:[NSNumber class]] && [b isKindOfClass:[NSNumber class]]) { + return + [a isEqual:b] || (isnan([(NSNumber *)a doubleValue]) && isnan([(NSNumber *)b doubleValue])); + } + if ([a isKindOfClass:[NSArray class]] && [b isKindOfClass:[NSArray class]]) { + NSArray *arrayA = (NSArray *)a; + NSArray *arrayB = (NSArray *)b; + if (arrayA.count != arrayB.count) { + return NO; + } + for (NSUInteger i = 0; i < arrayA.count; i++) { + if (!FLTPigeonDeepEquals(arrayA[i], arrayB[i])) { + return NO; + } + } + return YES; + } + if ([a isKindOfClass:[NSDictionary class]] && [b isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictA = (NSDictionary *)a; + NSDictionary *dictB = (NSDictionary *)b; + if (dictA.count != dictB.count) { + return NO; + } + for (id keyA in dictA) { + id valueA = dictA[keyA]; + BOOL found = NO; + for (id keyB in dictB) { + if (FLTPigeonDeepEquals(keyA, keyB)) { + id valueB = dictB[keyB]; + if (FLTPigeonDeepEquals(valueA, valueB)) { + found = YES; + break; + } else { + return NO; + } + } + } + if (!found) { + return NO; + } + } + return YES; + } + return [a isEqual:b]; +} + +static NSUInteger __attribute__((unused)) FLTPigeonDeepHash(id _Nullable value) { + if (value == nil || value == (id)[NSNull null]) { + return 0; + } + if ([value isKindOfClass:[NSNumber class]]) { + NSNumber *n = (NSNumber *)value; + double d = n.doubleValue; + if (isnan(d)) { + // Normalize NaN to a consistent hash. + return (NSUInteger)0x7FF8000000000000; + } + if (d == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + d = 0.0; + } + return @(d).hash; + } + if ([value isKindOfClass:[NSArray class]]) { + NSUInteger result = 1; + for (id item in (NSArray *)value) { + result = result * 31 + FLTPigeonDeepHash(item); + } + return result; + } + if ([value isKindOfClass:[NSDictionary class]]) { + NSUInteger result = 0; + NSDictionary *dict = (NSDictionary *)value; + for (id key in dict) { + result += ((FLTPigeonDeepHash(key) * 31) ^ FLTPigeonDeepHash(dict[key])); + } + return result; + } + return [value hash]; +} + static NSArray *wrapResult(id result, FlutterError *error) { if (error) { return @[ @@ -111,6 +202,22 @@ + (nullable FLTUnusedClass *)nullableFromList:(NSArray *)list { self.aField ?: [NSNull null], ]; } +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + FLTUnusedClass *other = (FLTUnusedClass *)object; + return FLTPigeonDeepEquals(self.aField, other.aField); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.aField); + return result; +} @end @implementation FLTAllTypes @@ -242,6 +349,74 @@ + (nullable FLTAllTypes *)nullableFromList:(NSArray *)list { self.mapMap ?: [NSNull null], ]; } +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + FLTAllTypes *other = (FLTAllTypes *)object; + return self.aBool == other.aBool && self.anInt == other.anInt && self.anInt64 == other.anInt64 && + (self.aDouble == other.aDouble || (isnan(self.aDouble) && isnan(other.aDouble))) && + FLTPigeonDeepEquals(self.aByteArray, other.aByteArray) && + FLTPigeonDeepEquals(self.a4ByteArray, other.a4ByteArray) && + FLTPigeonDeepEquals(self.a8ByteArray, other.a8ByteArray) && + FLTPigeonDeepEquals(self.aFloatArray, other.aFloatArray) && self.anEnum == other.anEnum && + self.anotherEnum == other.anotherEnum && + FLTPigeonDeepEquals(self.aString, other.aString) && + FLTPigeonDeepEquals(self.anObject, other.anObject) && + FLTPigeonDeepEquals(self.list, other.list) && + FLTPigeonDeepEquals(self.stringList, other.stringList) && + FLTPigeonDeepEquals(self.intList, other.intList) && + FLTPigeonDeepEquals(self.doubleList, other.doubleList) && + FLTPigeonDeepEquals(self.boolList, other.boolList) && + FLTPigeonDeepEquals(self.enumList, other.enumList) && + FLTPigeonDeepEquals(self.objectList, other.objectList) && + FLTPigeonDeepEquals(self.listList, other.listList) && + FLTPigeonDeepEquals(self.mapList, other.mapList) && + FLTPigeonDeepEquals(self.map, other.map) && + FLTPigeonDeepEquals(self.stringMap, other.stringMap) && + FLTPigeonDeepEquals(self.intMap, other.intMap) && + FLTPigeonDeepEquals(self.enumMap, other.enumMap) && + FLTPigeonDeepEquals(self.objectMap, other.objectMap) && + FLTPigeonDeepEquals(self.listMap, other.listMap) && + FLTPigeonDeepEquals(self.mapMap, other.mapMap); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.aBool).hash; + result = result * 31 + @(self.anInt).hash; + result = result * 31 + @(self.anInt64).hash; + result = + result * 31 + (isnan(self.aDouble) ? (NSUInteger)0x7FF8000000000000 : @(self.aDouble).hash); + result = result * 31 + FLTPigeonDeepHash(self.aByteArray); + result = result * 31 + FLTPigeonDeepHash(self.a4ByteArray); + result = result * 31 + FLTPigeonDeepHash(self.a8ByteArray); + result = result * 31 + FLTPigeonDeepHash(self.aFloatArray); + result = result * 31 + @(self.anEnum).hash; + result = result * 31 + @(self.anotherEnum).hash; + result = result * 31 + FLTPigeonDeepHash(self.aString); + result = result * 31 + FLTPigeonDeepHash(self.anObject); + result = result * 31 + FLTPigeonDeepHash(self.list); + result = result * 31 + FLTPigeonDeepHash(self.stringList); + result = result * 31 + FLTPigeonDeepHash(self.intList); + result = result * 31 + FLTPigeonDeepHash(self.doubleList); + result = result * 31 + FLTPigeonDeepHash(self.boolList); + result = result * 31 + FLTPigeonDeepHash(self.enumList); + result = result * 31 + FLTPigeonDeepHash(self.objectList); + result = result * 31 + FLTPigeonDeepHash(self.listList); + result = result * 31 + FLTPigeonDeepHash(self.mapList); + result = result * 31 + FLTPigeonDeepHash(self.map); + result = result * 31 + FLTPigeonDeepHash(self.stringMap); + result = result * 31 + FLTPigeonDeepHash(self.intMap); + result = result * 31 + FLTPigeonDeepHash(self.enumMap); + result = result * 31 + FLTPigeonDeepHash(self.objectMap); + result = result * 31 + FLTPigeonDeepHash(self.listMap); + result = result * 31 + FLTPigeonDeepHash(self.mapMap); + return result; +} @end @implementation FLTAllNullableTypes @@ -385,6 +560,82 @@ + (nullable FLTAllNullableTypes *)nullableFromList:(NSArray *)list { self.recursiveClassMap ?: [NSNull null], ]; } +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + FLTAllNullableTypes *other = (FLTAllNullableTypes *)object; + return FLTPigeonDeepEquals(self.aNullableBool, other.aNullableBool) && + FLTPigeonDeepEquals(self.aNullableInt, other.aNullableInt) && + FLTPigeonDeepEquals(self.aNullableInt64, other.aNullableInt64) && + FLTPigeonDeepEquals(self.aNullableDouble, other.aNullableDouble) && + FLTPigeonDeepEquals(self.aNullableByteArray, other.aNullableByteArray) && + FLTPigeonDeepEquals(self.aNullable4ByteArray, other.aNullable4ByteArray) && + FLTPigeonDeepEquals(self.aNullable8ByteArray, other.aNullable8ByteArray) && + FLTPigeonDeepEquals(self.aNullableFloatArray, other.aNullableFloatArray) && + FLTPigeonDeepEquals(self.aNullableEnum, other.aNullableEnum) && + FLTPigeonDeepEquals(self.anotherNullableEnum, other.anotherNullableEnum) && + FLTPigeonDeepEquals(self.aNullableString, other.aNullableString) && + FLTPigeonDeepEquals(self.aNullableObject, other.aNullableObject) && + FLTPigeonDeepEquals(self.allNullableTypes, other.allNullableTypes) && + FLTPigeonDeepEquals(self.list, other.list) && + FLTPigeonDeepEquals(self.stringList, other.stringList) && + FLTPigeonDeepEquals(self.intList, other.intList) && + FLTPigeonDeepEquals(self.doubleList, other.doubleList) && + FLTPigeonDeepEquals(self.boolList, other.boolList) && + FLTPigeonDeepEquals(self.enumList, other.enumList) && + FLTPigeonDeepEquals(self.objectList, other.objectList) && + FLTPigeonDeepEquals(self.listList, other.listList) && + FLTPigeonDeepEquals(self.mapList, other.mapList) && + FLTPigeonDeepEquals(self.recursiveClassList, other.recursiveClassList) && + FLTPigeonDeepEquals(self.map, other.map) && + FLTPigeonDeepEquals(self.stringMap, other.stringMap) && + FLTPigeonDeepEquals(self.intMap, other.intMap) && + FLTPigeonDeepEquals(self.enumMap, other.enumMap) && + FLTPigeonDeepEquals(self.objectMap, other.objectMap) && + FLTPigeonDeepEquals(self.listMap, other.listMap) && + FLTPigeonDeepEquals(self.mapMap, other.mapMap) && + FLTPigeonDeepEquals(self.recursiveClassMap, other.recursiveClassMap); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.aNullableBool); + result = result * 31 + FLTPigeonDeepHash(self.aNullableInt); + result = result * 31 + FLTPigeonDeepHash(self.aNullableInt64); + result = result * 31 + FLTPigeonDeepHash(self.aNullableDouble); + result = result * 31 + FLTPigeonDeepHash(self.aNullableByteArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullable4ByteArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullable8ByteArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullableFloatArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullableEnum); + result = result * 31 + FLTPigeonDeepHash(self.anotherNullableEnum); + result = result * 31 + FLTPigeonDeepHash(self.aNullableString); + result = result * 31 + FLTPigeonDeepHash(self.aNullableObject); + result = result * 31 + FLTPigeonDeepHash(self.allNullableTypes); + result = result * 31 + FLTPigeonDeepHash(self.list); + result = result * 31 + FLTPigeonDeepHash(self.stringList); + result = result * 31 + FLTPigeonDeepHash(self.intList); + result = result * 31 + FLTPigeonDeepHash(self.doubleList); + result = result * 31 + FLTPigeonDeepHash(self.boolList); + result = result * 31 + FLTPigeonDeepHash(self.enumList); + result = result * 31 + FLTPigeonDeepHash(self.objectList); + result = result * 31 + FLTPigeonDeepHash(self.listList); + result = result * 31 + FLTPigeonDeepHash(self.mapList); + result = result * 31 + FLTPigeonDeepHash(self.recursiveClassList); + result = result * 31 + FLTPigeonDeepHash(self.map); + result = result * 31 + FLTPigeonDeepHash(self.stringMap); + result = result * 31 + FLTPigeonDeepHash(self.intMap); + result = result * 31 + FLTPigeonDeepHash(self.enumMap); + result = result * 31 + FLTPigeonDeepHash(self.objectMap); + result = result * 31 + FLTPigeonDeepHash(self.listMap); + result = result * 31 + FLTPigeonDeepHash(self.mapMap); + result = result * 31 + FLTPigeonDeepHash(self.recursiveClassMap); + return result; +} @end @implementation FLTAllNullableTypesWithoutRecursion @@ -517,6 +768,76 @@ + (nullable FLTAllNullableTypesWithoutRecursion *)nullableFromList:(NSArray self.mapMap ?: [NSNull null], ]; } +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + FLTAllNullableTypesWithoutRecursion *other = (FLTAllNullableTypesWithoutRecursion *)object; + return FLTPigeonDeepEquals(self.aNullableBool, other.aNullableBool) && + FLTPigeonDeepEquals(self.aNullableInt, other.aNullableInt) && + FLTPigeonDeepEquals(self.aNullableInt64, other.aNullableInt64) && + FLTPigeonDeepEquals(self.aNullableDouble, other.aNullableDouble) && + FLTPigeonDeepEquals(self.aNullableByteArray, other.aNullableByteArray) && + FLTPigeonDeepEquals(self.aNullable4ByteArray, other.aNullable4ByteArray) && + FLTPigeonDeepEquals(self.aNullable8ByteArray, other.aNullable8ByteArray) && + FLTPigeonDeepEquals(self.aNullableFloatArray, other.aNullableFloatArray) && + FLTPigeonDeepEquals(self.aNullableEnum, other.aNullableEnum) && + FLTPigeonDeepEquals(self.anotherNullableEnum, other.anotherNullableEnum) && + FLTPigeonDeepEquals(self.aNullableString, other.aNullableString) && + FLTPigeonDeepEquals(self.aNullableObject, other.aNullableObject) && + FLTPigeonDeepEquals(self.list, other.list) && + FLTPigeonDeepEquals(self.stringList, other.stringList) && + FLTPigeonDeepEquals(self.intList, other.intList) && + FLTPigeonDeepEquals(self.doubleList, other.doubleList) && + FLTPigeonDeepEquals(self.boolList, other.boolList) && + FLTPigeonDeepEquals(self.enumList, other.enumList) && + FLTPigeonDeepEquals(self.objectList, other.objectList) && + FLTPigeonDeepEquals(self.listList, other.listList) && + FLTPigeonDeepEquals(self.mapList, other.mapList) && + FLTPigeonDeepEquals(self.map, other.map) && + FLTPigeonDeepEquals(self.stringMap, other.stringMap) && + FLTPigeonDeepEquals(self.intMap, other.intMap) && + FLTPigeonDeepEquals(self.enumMap, other.enumMap) && + FLTPigeonDeepEquals(self.objectMap, other.objectMap) && + FLTPigeonDeepEquals(self.listMap, other.listMap) && + FLTPigeonDeepEquals(self.mapMap, other.mapMap); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.aNullableBool); + result = result * 31 + FLTPigeonDeepHash(self.aNullableInt); + result = result * 31 + FLTPigeonDeepHash(self.aNullableInt64); + result = result * 31 + FLTPigeonDeepHash(self.aNullableDouble); + result = result * 31 + FLTPigeonDeepHash(self.aNullableByteArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullable4ByteArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullable8ByteArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullableFloatArray); + result = result * 31 + FLTPigeonDeepHash(self.aNullableEnum); + result = result * 31 + FLTPigeonDeepHash(self.anotherNullableEnum); + result = result * 31 + FLTPigeonDeepHash(self.aNullableString); + result = result * 31 + FLTPigeonDeepHash(self.aNullableObject); + result = result * 31 + FLTPigeonDeepHash(self.list); + result = result * 31 + FLTPigeonDeepHash(self.stringList); + result = result * 31 + FLTPigeonDeepHash(self.intList); + result = result * 31 + FLTPigeonDeepHash(self.doubleList); + result = result * 31 + FLTPigeonDeepHash(self.boolList); + result = result * 31 + FLTPigeonDeepHash(self.enumList); + result = result * 31 + FLTPigeonDeepHash(self.objectList); + result = result * 31 + FLTPigeonDeepHash(self.listList); + result = result * 31 + FLTPigeonDeepHash(self.mapList); + result = result * 31 + FLTPigeonDeepHash(self.map); + result = result * 31 + FLTPigeonDeepHash(self.stringMap); + result = result * 31 + FLTPigeonDeepHash(self.intMap); + result = result * 31 + FLTPigeonDeepHash(self.enumMap); + result = result * 31 + FLTPigeonDeepHash(self.objectMap); + result = result * 31 + FLTPigeonDeepHash(self.listMap); + result = result * 31 + FLTPigeonDeepHash(self.mapMap); + return result; +} @end @implementation FLTAllClassesWrapper @@ -567,6 +888,35 @@ + (nullable FLTAllClassesWrapper *)nullableFromList:(NSArray *)list { self.nullableClassMap ?: [NSNull null], ]; } +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + FLTAllClassesWrapper *other = (FLTAllClassesWrapper *)object; + return FLTPigeonDeepEquals(self.allNullableTypes, other.allNullableTypes) && + FLTPigeonDeepEquals(self.allNullableTypesWithoutRecursion, + other.allNullableTypesWithoutRecursion) && + FLTPigeonDeepEquals(self.allTypes, other.allTypes) && + FLTPigeonDeepEquals(self.classList, other.classList) && + FLTPigeonDeepEquals(self.nullableClassList, other.nullableClassList) && + FLTPigeonDeepEquals(self.classMap, other.classMap) && + FLTPigeonDeepEquals(self.nullableClassMap, other.nullableClassMap); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.allNullableTypes); + result = result * 31 + FLTPigeonDeepHash(self.allNullableTypesWithoutRecursion); + result = result * 31 + FLTPigeonDeepHash(self.allTypes); + result = result * 31 + FLTPigeonDeepHash(self.classList); + result = result * 31 + FLTPigeonDeepHash(self.nullableClassList); + result = result * 31 + FLTPigeonDeepHash(self.classMap); + result = result * 31 + FLTPigeonDeepHash(self.nullableClassMap); + return result; +} @end @implementation FLTTestMessage @@ -588,6 +938,22 @@ + (nullable FLTTestMessage *)nullableFromList:(NSArray *)list { self.testList ?: [NSNull null], ]; } +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + FLTTestMessage *other = (FLTTestMessage *)object; + return FLTPigeonDeepEquals(self.testList, other.testList); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.testList); + return result; +} @end @interface FLTCoreTestsPigeonCodecReader : FlutterStandardReader @@ -1474,6 +1840,88 @@ void SetUpFLTHostIntegrationCoreApiWithSuffix(id binaryM [channel setMessageHandler:nil]; } } + /// Returns the result of platform-side equality check. + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.pigeon_integration_tests." + @"HostIntegrationCoreApi.areAllNullableTypesEqual", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FLTGetCoreTestsCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(areAllNullableTypesEqualA:b:error:)], + @"FLTHostIntegrationCoreApi api (%@) doesn't respond to " + @"@selector(areAllNullableTypesEqualA:b:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + FLTAllNullableTypes *arg_a = GetNullableObjectAtIndex(args, 0); + FLTAllNullableTypes *arg_b = GetNullableObjectAtIndex(args, 1); + FlutterError *error; + NSNumber *output = [api areAllNullableTypesEqualA:arg_a b:arg_b error:&error]; + callback(wrapResult(output, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } + /// Returns the platform-side hash code for the given object. + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.pigeon_integration_tests." + @"HostIntegrationCoreApi.getAllNullableTypesHash", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FLTGetCoreTestsCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getAllNullableTypesHashValue:error:)], + @"FLTHostIntegrationCoreApi api (%@) doesn't respond to " + @"@selector(getAllNullableTypesHashValue:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + FLTAllNullableTypes *arg_value = GetNullableObjectAtIndex(args, 0); + FlutterError *error; + NSNumber *output = [api getAllNullableTypesHashValue:arg_value error:&error]; + callback(wrapResult(output, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } + /// Returns the platform-side hash code for the given object. + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.pigeon_integration_tests." + @"HostIntegrationCoreApi.getAllNullableTypesWithoutRecursionHash", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FLTGetCoreTestsCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getAllNullableTypesWithoutRecursionHashValue: + error:)], + @"FLTHostIntegrationCoreApi api (%@) doesn't respond to " + @"@selector(getAllNullableTypesWithoutRecursionHashValue:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + FLTAllNullableTypesWithoutRecursion *arg_value = GetNullableObjectAtIndex(args, 0); + FlutterError *error; + NSNumber *output = [api getAllNullableTypesWithoutRecursionHashValue:arg_value + error:&error]; + callback(wrapResult(output, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } /// Returns the passed object, to test serialization and deserialization. { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/include/alternate_language_test_plugin/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/include/alternate_language_test_plugin/CoreTests.gen.h index 83f632d43b3b..2b620a11104a 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/include/alternate_language_test_plugin/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/darwin/alternate_language_test_plugin/Sources/alternate_language_test_plugin/include/alternate_language_test_plugin/CoreTests.gen.h @@ -438,6 +438,23 @@ NSObject *FLTGetCoreTestsCodec(void); /// @return `nil` only when `error != nil`. - (nullable NSNumber *)echoRequiredInt:(NSInteger)anInt error:(FlutterError *_Nullable *_Nonnull)error; +/// Returns the result of platform-side equality check. +/// +/// @return `nil` only when `error != nil`. +- (nullable NSNumber *)areAllNullableTypesEqualA:(FLTAllNullableTypes *)a + b:(FLTAllNullableTypes *)b + error:(FlutterError *_Nullable *_Nonnull)error; +/// Returns the platform-side hash code for the given object. +/// +/// @return `nil` only when `error != nil`. +- (nullable NSNumber *)getAllNullableTypesHashValue:(FLTAllNullableTypes *)value + error:(FlutterError *_Nullable *_Nonnull)error; +/// Returns the platform-side hash code for the given object. +/// +/// @return `nil` only when `error != nil`. +- (nullable NSNumber *) + getAllNullableTypesWithoutRecursionHashValue:(FLTAllNullableTypesWithoutRecursion *)value + error:(FlutterError *_Nullable *_Nonnull)error; /// Returns the passed object, to test serialization and deserialization. - (nullable FLTAllNullableTypes *)echoAllNullableTypes:(nullable FLTAllNullableTypes *)everything error:(FlutterError *_Nullable *_Nonnull)error; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m index ddef818e0c5a..4e5b5b196f5a 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m @@ -114,8 +114,125 @@ - (void)testAllEquals { [self waitForExpectations:@[ expectation ] timeout:1.0]; } -- (void)unusedClassesExist { - XCTAssert([[FLTUnusedClass alloc] init] != nil); +- (void)testEquality { + FLTAllNullableTypes *everything1 = [[FLTAllNullableTypes alloc] init]; + everything1.aNullableBool = @NO; + everything1.aNullableInt = @(1); + everything1.aNullableString = @"123"; + + FLTAllNullableTypes *everything2 = [[FLTAllNullableTypes alloc] init]; + everything2.aNullableBool = @NO; + everything2.aNullableInt = @(1); + everything2.aNullableString = @"123"; + + FLTAllNullableTypes *everything3 = [[FLTAllNullableTypes alloc] init]; + everything3.aNullableBool = @YES; + + XCTAssertEqualObjects(everything1, everything2); + XCTAssertNotEqualObjects(everything1, everything3); + XCTAssertEqual(everything1.hash, everything2.hash); +} + +- (void)testNaNEquality { + FLTAllNullableTypes *everything1 = [[FLTAllNullableTypes alloc] init]; + everything1.aNullableDouble = @(NAN); + + FLTAllNullableTypes *everything2 = [[FLTAllNullableTypes alloc] init]; + everything2.aNullableDouble = @(NAN); + + XCTAssertEqualObjects(everything1, everything2); + XCTAssertEqual(everything1.hash, everything2.hash); +} + +- (void)testCrossTypeEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.aNullableInt = @(1); + + FLTAllNullableTypesWithoutRecursion *b = [[FLTAllNullableTypesWithoutRecursion alloc] init]; + b.aNullableInt = @(1); + + XCTAssertNotEqualObjects(a, b); + XCTAssertNotEqualObjects(b, a); +} + +- (void)testZeroEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.aNullableDouble = @(0.0); + + FLTAllNullableTypes *b = [[FLTAllNullableTypes alloc] init]; + b.aNullableDouble = @(-0.0); + + XCTAssertEqualObjects(a, b); + XCTAssertEqual(a.hash, b.hash); +} + +- (void)testNestedNaNEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.aNullableDouble = @(nan("")); + a.doubleList = @[ @(nan("")) ]; + + FLTAllNullableTypes *b = [[FLTAllNullableTypes alloc] init]; + b.aNullableDouble = @(nan("")); + b.doubleList = @[ @(nan("")) ]; + + // If this fails, Objective-C needs a deepEquals helper too. + XCTAssertEqualObjects(a, b); + XCTAssertEqual(a.hash, b.hash); +} + +- (void)testNestedZeroListEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.doubleList = @[ @(0.0) ]; + + FLTAllNullableTypes *b = [[FLTAllNullableTypes alloc] init]; + b.doubleList = @[ @(-0.0) ]; + + XCTAssertEqualObjects(a, b); + XCTAssertEqual(a.hash, b.hash); +} + +- (void)testZeroMapKeyEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.map = @{@(0.0) : @"a"}; + + FLTAllNullableTypes *b = [[FLTAllNullableTypes alloc] init]; + b.map = @{@(-0.0) : @"a"}; + + XCTAssertEqualObjects(a, b); + XCTAssertEqual(a.hash, b.hash); +} + +- (void)testZeroMapValueEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.map = @{@"a" : @(0.0)}; + + FLTAllNullableTypes *b = [[FLTAllNullableTypes alloc] init]; + b.map = @{@"a" : @(-0.0)}; + + XCTAssertEqualObjects(a, b); + XCTAssertEqual(a.hash, b.hash); +} + +- (void)testNSNullListEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.list = @[ [NSNull null] ]; + + FLTAllNullableTypes *b = [[FLTAllNullableTypes alloc] init]; + b.list = @[ [NSNull null] ]; + + XCTAssertEqualObjects(a, b); + XCTAssertEqual(a.hash, b.hash); +} + +- (void)testNSNullPropertyEquality { + FLTAllNullableTypes *a = [[FLTAllNullableTypes alloc] init]; + a.aNullableObject = [NSNull null]; + + FLTAllNullableTypes *b = [[FLTAllNullableTypes alloc] init]; + b.aNullableObject = nil; + + XCTAssertEqualObjects(a, b); + XCTAssertEqual(a.hash, b.hash); } @end diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NonNullFieldsTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NonNullFieldsTest.m index 573bb994f91c..cd0369996a01 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NonNullFieldsTest.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NonNullFieldsTest.m @@ -22,4 +22,14 @@ - (void)testMake { XCTAssertEqualObjects(@"hello", request.query); } +- (void)testEquality { + NonNullFieldSearchRequest *request1 = [NonNullFieldSearchRequest makeWithQuery:@"hello"]; + NonNullFieldSearchRequest *request2 = [NonNullFieldSearchRequest makeWithQuery:@"hello"]; + NonNullFieldSearchRequest *request3 = [NonNullFieldSearchRequest makeWithQuery:@"world"]; + + XCTAssertEqualObjects(request1, request2); + XCTAssertNotEqualObjects(request1, request3); + XCTAssertEqual(request1.hash, request2.hash); +} + @end diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart index aedbf2da1644..9ed43123a701 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart @@ -1024,6 +1024,171 @@ void runPigeonIntegrationTests(TargetGenerator targetGenerator) { final String? receivedNullString = await api.echoNamedNullableString(); expect(receivedNullString, null); }); + + testWidgets('Signed zero equality', (WidgetTester _) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes(aNullableDouble: 0.0); + final b = AllNullableTypes(aNullableDouble: -0.0); + + expect(await api.areAllNullableTypesEqual(a, b), isTrue); + }); + + testWidgets('Signed zero hashing', (WidgetTester _) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes(aNullableDouble: 0.0); + final b = AllNullableTypes(aNullableDouble: -0.0); + + final int hashA = await api.getAllNullableTypesHash(a); + final int hashB = await api.getAllNullableTypesHash(b); + expect( + hashA, + hashB, + reason: 'Hash codes for 0.0 and -0.0 should be equal', + ); + }); + + testWidgets('NaN equality', (WidgetTester _) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes(aNullableDouble: double.nan); + final b = AllNullableTypes(aNullableDouble: double.nan); + + expect(await api.areAllNullableTypesEqual(a, b), isTrue); + }); + + testWidgets('NaN hashing', (WidgetTester _) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes(aNullableDouble: double.nan); + final b = AllNullableTypes(aNullableDouble: double.nan); + + final int hashA = await api.getAllNullableTypesHash(a); + final int hashB = await api.getAllNullableTypesHash(b); + expect(hashA, hashB, reason: 'Hash codes for two NaNs should be equal'); + }); + + testWidgets('Collection equality with signed zero and NaN', ( + WidgetTester _, + ) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes( + doubleList: [0.0, double.nan], + stringMap: {'k': 'v', 'n': null}, + ); + final b = AllNullableTypes( + doubleList: [-0.0, double.nan], + stringMap: {'n': null, 'k': 'v'}, + ); + + expect(await api.areAllNullableTypesEqual(a, b), isTrue); + }); + + testWidgets('Collection hashing with signed zero and NaN', ( + WidgetTester _, + ) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes( + doubleList: [0.0, double.nan], + stringMap: {'k': 'v', 'n': null}, + ); + final b = AllNullableTypes( + doubleList: [-0.0, double.nan], + stringMap: {'n': null, 'k': 'v'}, + ); + + expect( + await api.getAllNullableTypesHash(a), + await api.getAllNullableTypesHash(b), + ); + }); + + testWidgets('Collection hashing with null/NSNull', (WidgetTester _) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes( + list: [null], + stringMap: {'k': null}, + ); + final b = AllNullableTypes( + list: [null], + stringMap: {'k': null}, + ); + + // Verify cross-platform equivalence via identical hash values. + expect( + await api.getAllNullableTypesHash(a), + await api.getAllNullableTypesHash(b), + ); + expect(await api.areAllNullableTypesEqual(a, b), isTrue); + }); + + testWidgets('Map equality with signed zero keys and values', ( + WidgetTester _, + ) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes(map: {0.0: 'a', 'b': 0.0}); + final b = AllNullableTypes(map: {-0.0: 'a', 'b': -0.0}); + + expect(await api.areAllNullableTypesEqual(a, b), isTrue); + }); + + testWidgets('Map hashing with signed zero keys and values', ( + WidgetTester _, + ) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes(map: {0.0: 'a', 'b': 0.0}); + final b = AllNullableTypes(map: {-0.0: 'a', 'b': -0.0}); + + expect( + await api.getAllNullableTypesHash(a), + await api.getAllNullableTypesHash(b), + ); + }); + + testWidgets('Map equality with null values and different keys', ( + WidgetTester _, + ) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes(intMap: {1: null}); + final b = AllNullableTypes(intMap: {2: null}); + + expect(await api.areAllNullableTypesEqual(a, b), isFalse); + }); + + testWidgets('Deeply nested equality', (WidgetTester _) async { + final api = HostIntegrationCoreApi(); + + final a = AllNullableTypes( + allNullableTypes: AllNullableTypes(aNullableDouble: 0.0), + ); + final b = AllNullableTypes( + allNullableTypes: AllNullableTypes(aNullableDouble: -0.0), + ); + + expect(await api.areAllNullableTypesEqual(a, b), isTrue); + }); + + testWidgets('Hashing inequality across types with same values', ( + WidgetTester _, + ) async { + final api = HostIntegrationCoreApi(); + final a = AllNullableTypes(aNullableInt: 42); + final b = AllNullableTypesWithoutRecursion(aNullableInt: 42); + + expect(a.hashCode, isNot(b.hashCode)); + + expect( + await api.getAllNullableTypesHash(a), + isNot(await api.getAllNullableTypesWithoutRecursionHash(b)), + ); + }); }); group('Host async API tests', () { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart index 645223f45b40..c3e553e368c6 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart @@ -53,6 +53,15 @@ List wrapResponse({ } bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -60,16 +69,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + enum AnEnum { one, two, three, fortyTwo, fourHundredTwentyTwo } enum AnotherEnum { justInCase } @@ -101,12 +146,12 @@ class UnusedClass { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(aField, other.aField); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } /// A class containing all supported types. @@ -280,12 +325,39 @@ class AllTypes { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(aBool, other.aBool) && + _deepEquals(anInt, other.anInt) && + _deepEquals(anInt64, other.anInt64) && + _deepEquals(aDouble, other.aDouble) && + _deepEquals(aByteArray, other.aByteArray) && + _deepEquals(a4ByteArray, other.a4ByteArray) && + _deepEquals(a8ByteArray, other.a8ByteArray) && + _deepEquals(aFloatArray, other.aFloatArray) && + _deepEquals(anEnum, other.anEnum) && + _deepEquals(anotherEnum, other.anotherEnum) && + _deepEquals(aString, other.aString) && + _deepEquals(anObject, other.anObject) && + _deepEquals(list, other.list) && + _deepEquals(stringList, other.stringList) && + _deepEquals(intList, other.intList) && + _deepEquals(doubleList, other.doubleList) && + _deepEquals(boolList, other.boolList) && + _deepEquals(enumList, other.enumList) && + _deepEquals(objectList, other.objectList) && + _deepEquals(listList, other.listList) && + _deepEquals(mapList, other.mapList) && + _deepEquals(map, other.map) && + _deepEquals(stringMap, other.stringMap) && + _deepEquals(intMap, other.intMap) && + _deepEquals(enumMap, other.enumMap) && + _deepEquals(objectMap, other.objectMap) && + _deepEquals(listMap, other.listMap) && + _deepEquals(mapMap, other.mapMap); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } /// A class containing all supported nullable types. @@ -477,12 +549,42 @@ class AllNullableTypes { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(aNullableBool, other.aNullableBool) && + _deepEquals(aNullableInt, other.aNullableInt) && + _deepEquals(aNullableInt64, other.aNullableInt64) && + _deepEquals(aNullableDouble, other.aNullableDouble) && + _deepEquals(aNullableByteArray, other.aNullableByteArray) && + _deepEquals(aNullable4ByteArray, other.aNullable4ByteArray) && + _deepEquals(aNullable8ByteArray, other.aNullable8ByteArray) && + _deepEquals(aNullableFloatArray, other.aNullableFloatArray) && + _deepEquals(aNullableEnum, other.aNullableEnum) && + _deepEquals(anotherNullableEnum, other.anotherNullableEnum) && + _deepEquals(aNullableString, other.aNullableString) && + _deepEquals(aNullableObject, other.aNullableObject) && + _deepEquals(allNullableTypes, other.allNullableTypes) && + _deepEquals(list, other.list) && + _deepEquals(stringList, other.stringList) && + _deepEquals(intList, other.intList) && + _deepEquals(doubleList, other.doubleList) && + _deepEquals(boolList, other.boolList) && + _deepEquals(enumList, other.enumList) && + _deepEquals(objectList, other.objectList) && + _deepEquals(listList, other.listList) && + _deepEquals(mapList, other.mapList) && + _deepEquals(recursiveClassList, other.recursiveClassList) && + _deepEquals(map, other.map) && + _deepEquals(stringMap, other.stringMap) && + _deepEquals(intMap, other.intMap) && + _deepEquals(enumMap, other.enumMap) && + _deepEquals(objectMap, other.objectMap) && + _deepEquals(listMap, other.listMap) && + _deepEquals(mapMap, other.mapMap) && + _deepEquals(recursiveClassMap, other.recursiveClassMap); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } /// The primary purpose for this class is to ensure coverage of Swift structs @@ -660,12 +762,39 @@ class AllNullableTypesWithoutRecursion { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(aNullableBool, other.aNullableBool) && + _deepEquals(aNullableInt, other.aNullableInt) && + _deepEquals(aNullableInt64, other.aNullableInt64) && + _deepEquals(aNullableDouble, other.aNullableDouble) && + _deepEquals(aNullableByteArray, other.aNullableByteArray) && + _deepEquals(aNullable4ByteArray, other.aNullable4ByteArray) && + _deepEquals(aNullable8ByteArray, other.aNullable8ByteArray) && + _deepEquals(aNullableFloatArray, other.aNullableFloatArray) && + _deepEquals(aNullableEnum, other.aNullableEnum) && + _deepEquals(anotherNullableEnum, other.anotherNullableEnum) && + _deepEquals(aNullableString, other.aNullableString) && + _deepEquals(aNullableObject, other.aNullableObject) && + _deepEquals(list, other.list) && + _deepEquals(stringList, other.stringList) && + _deepEquals(intList, other.intList) && + _deepEquals(doubleList, other.doubleList) && + _deepEquals(boolList, other.boolList) && + _deepEquals(enumList, other.enumList) && + _deepEquals(objectList, other.objectList) && + _deepEquals(listList, other.listList) && + _deepEquals(mapList, other.mapList) && + _deepEquals(map, other.map) && + _deepEquals(stringMap, other.stringMap) && + _deepEquals(intMap, other.intMap) && + _deepEquals(enumMap, other.enumMap) && + _deepEquals(objectMap, other.objectMap) && + _deepEquals(listMap, other.listMap) && + _deepEquals(mapMap, other.mapMap); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } /// A class for testing nested class handling. @@ -739,12 +868,21 @@ class AllClassesWrapper { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(allNullableTypes, other.allNullableTypes) && + _deepEquals( + allNullableTypesWithoutRecursion, + other.allNullableTypesWithoutRecursion, + ) && + _deepEquals(allTypes, other.allTypes) && + _deepEquals(classList, other.classList) && + _deepEquals(nullableClassList, other.nullableClassList) && + _deepEquals(classMap, other.classMap) && + _deepEquals(nullableClassMap, other.nullableClassMap); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } /// A data class containing a List, used in unit tests. @@ -775,12 +913,12 @@ class TestMessage { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(testList, other.testList); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { @@ -1560,6 +1698,77 @@ class HostIntegrationCoreApi { return pigeonVar_replyValue! as int; } + /// Returns the result of platform-side equality check. + Future areAllNullableTypesEqual( + AllNullableTypes a, + AllNullableTypes b, + ) async { + final pigeonVar_channelName = + 'dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.areAllNullableTypesEqual$pigeonVar_messageChannelSuffix'; + final pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send( + [a, b], + ); + final pigeonVar_replyList = await pigeonVar_sendFuture as List?; + + final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( + pigeonVar_replyList, + pigeonVar_channelName, + isNullValid: false, + ); + return pigeonVar_replyValue! as bool; + } + + /// Returns the platform-side hash code for the given object. + Future getAllNullableTypesHash(AllNullableTypes value) async { + final pigeonVar_channelName = + 'dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesHash$pigeonVar_messageChannelSuffix'; + final pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send( + [value], + ); + final pigeonVar_replyList = await pigeonVar_sendFuture as List?; + + final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( + pigeonVar_replyList, + pigeonVar_channelName, + isNullValid: false, + ); + return pigeonVar_replyValue! as int; + } + + /// Returns the platform-side hash code for the given object. + Future getAllNullableTypesWithoutRecursionHash( + AllNullableTypesWithoutRecursion value, + ) async { + final pigeonVar_channelName = + 'dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesWithoutRecursionHash$pigeonVar_messageChannelSuffix'; + final pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send( + [value], + ); + final pigeonVar_replyList = await pigeonVar_sendFuture as List?; + + final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( + pigeonVar_replyList, + pigeonVar_channelName, + isNullValid: false, + ); + return pigeonVar_replyValue! as int; + } + /// Returns the passed object, to test serialization and deserialization. Future echoAllNullableTypes( AllNullableTypes? everything, diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/enum.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/enum.gen.dart index ddd875d00933..06185b61738e 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/enum.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/enum.gen.dart @@ -53,6 +53,15 @@ List wrapResponse({ } bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -60,16 +69,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + /// This comment is to test enum documentation comments. enum EnumState { /// This comment is to test enum member (Pending) documentation comments. @@ -114,12 +159,12 @@ class DataWithEnum { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(state, other.state); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/event_channel_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/event_channel_tests.gen.dart index e4460bdcd662..814f9efc5f50 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/event_channel_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/event_channel_tests.gen.dart @@ -14,6 +14,15 @@ import 'package:flutter/services.dart'; import 'package:meta/meta.dart' show immutable, protected, visibleForTesting; bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -21,16 +30,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + enum EventEnum { one, two, three, fortyTwo, fourHundredTwentyTwo } enum AnotherEventEnum { justInCase } @@ -225,12 +270,42 @@ class EventAllNullableTypes { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(aNullableBool, other.aNullableBool) && + _deepEquals(aNullableInt, other.aNullableInt) && + _deepEquals(aNullableInt64, other.aNullableInt64) && + _deepEquals(aNullableDouble, other.aNullableDouble) && + _deepEquals(aNullableByteArray, other.aNullableByteArray) && + _deepEquals(aNullable4ByteArray, other.aNullable4ByteArray) && + _deepEquals(aNullable8ByteArray, other.aNullable8ByteArray) && + _deepEquals(aNullableFloatArray, other.aNullableFloatArray) && + _deepEquals(aNullableEnum, other.aNullableEnum) && + _deepEquals(anotherNullableEnum, other.anotherNullableEnum) && + _deepEquals(aNullableString, other.aNullableString) && + _deepEquals(aNullableObject, other.aNullableObject) && + _deepEquals(allNullableTypes, other.allNullableTypes) && + _deepEquals(list, other.list) && + _deepEquals(stringList, other.stringList) && + _deepEquals(intList, other.intList) && + _deepEquals(doubleList, other.doubleList) && + _deepEquals(boolList, other.boolList) && + _deepEquals(enumList, other.enumList) && + _deepEquals(objectList, other.objectList) && + _deepEquals(listList, other.listList) && + _deepEquals(mapList, other.mapList) && + _deepEquals(recursiveClassList, other.recursiveClassList) && + _deepEquals(map, other.map) && + _deepEquals(stringMap, other.stringMap) && + _deepEquals(intMap, other.intMap) && + _deepEquals(enumMap, other.enumMap) && + _deepEquals(objectMap, other.objectMap) && + _deepEquals(listMap, other.listMap) && + _deepEquals(mapMap, other.mapMap) && + _deepEquals(recursiveClassMap, other.recursiveClassMap); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } sealed class PlatformEvent {} @@ -262,12 +337,12 @@ class IntEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(value, other.value); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class StringEvent extends PlatformEvent { @@ -297,12 +372,12 @@ class StringEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(value, other.value); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class BoolEvent extends PlatformEvent { @@ -332,12 +407,12 @@ class BoolEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(value, other.value); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class DoubleEvent extends PlatformEvent { @@ -367,12 +442,12 @@ class DoubleEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(value, other.value); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class ObjectsEvent extends PlatformEvent { @@ -402,12 +477,12 @@ class ObjectsEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(value, other.value); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class EnumEvent extends PlatformEvent { @@ -437,12 +512,12 @@ class EnumEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(value, other.value); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class ClassEvent extends PlatformEvent { @@ -472,12 +547,12 @@ class ClassEvent extends PlatformEvent { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(value, other.value); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/flutter_unittests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/flutter_unittests.gen.dart index 4c6f0399711b..f34e47cf80b1 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/flutter_unittests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/flutter_unittests.gen.dart @@ -39,6 +39,15 @@ Object? _extractReplyValueOrThrow( } bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -46,16 +55,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + class FlutterSearchRequest { FlutterSearchRequest({this.query}); @@ -83,12 +128,12 @@ class FlutterSearchRequest { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(query, other.query); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class FlutterSearchReply { @@ -123,12 +168,12 @@ class FlutterSearchReply { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(result, other.result) && _deepEquals(error, other.error); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class FlutterSearchRequests { @@ -158,12 +203,12 @@ class FlutterSearchRequests { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(requests, other.requests); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class FlutterSearchReplies { @@ -193,12 +238,12 @@ class FlutterSearchReplies { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(replies, other.replies); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/message.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/message.gen.dart index ed24efecdffd..5bccedeb9f2f 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/message.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/message.gen.dart @@ -53,6 +53,15 @@ List wrapResponse({ } bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -60,16 +69,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + /// This comment is to test enum documentation comments. /// /// This comment also tests multiple line comments. @@ -120,12 +165,14 @@ class MessageSearchRequest { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(query, other.query) && + _deepEquals(anInt, other.anInt) && + _deepEquals(aBool, other.aBool); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } /// This comment is to test class documentation comments. @@ -169,12 +216,14 @@ class MessageSearchReply { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(result, other.result) && + _deepEquals(error, other.error) && + _deepEquals(state, other.state); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } /// This comment is to test class documentation comments. @@ -206,12 +255,12 @@ class MessageNested { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(request, other.request); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/non_null_fields.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/non_null_fields.gen.dart index 4b5e0bf68c9e..e551956e8091 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/non_null_fields.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/non_null_fields.gen.dart @@ -53,6 +53,15 @@ List wrapResponse({ } bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -60,16 +69,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + enum ReplyType { success, error } class NonNullFieldSearchRequest { @@ -100,12 +145,12 @@ class NonNullFieldSearchRequest { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(query, other.query); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class ExtraData { @@ -140,12 +185,13 @@ class ExtraData { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(detailA, other.detailA) && + _deepEquals(detailB, other.detailB); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class NonNullFieldSearchReply { @@ -195,12 +241,16 @@ class NonNullFieldSearchReply { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(result, other.result) && + _deepEquals(error, other.error) && + _deepEquals(indices, other.indices) && + _deepEquals(extraData, other.extraData) && + _deepEquals(type, other.type); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/null_fields.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/null_fields.gen.dart index b4868ffebbce..6dbbbad8c197 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/null_fields.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/null_fields.gen.dart @@ -53,6 +53,15 @@ List wrapResponse({ } bool _deepEquals(Object? a, Object? b) { + if (identical(a, b)) { + return true; + } + if (a is double && b is double) { + if (a.isNaN && b.isNaN) { + return true; + } + return a == b; + } if (a is List && b is List) { return a.length == b.length && a.indexed.every( @@ -60,16 +69,52 @@ bool _deepEquals(Object? a, Object? b) { ); } if (a is Map && b is Map) { - return a.length == b.length && - a.entries.every( - (MapEntry entry) => - (b as Map).containsKey(entry.key) && - _deepEquals(entry.value, b[entry.key]), - ); + if (a.length != b.length) { + return false; + } + for (final MapEntry entryA in a.entries) { + bool found = false; + for (final MapEntry entryB in b.entries) { + if (_deepEquals(entryA.key, entryB.key)) { + if (_deepEquals(entryA.value, entryB.value)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; } return a == b; } +int _deepHash(Object? value) { + if (value is List) { + return Object.hashAll(value.map(_deepHash)); + } + if (value is Map) { + int result = 0; + for (final MapEntry entry in value.entries) { + result += (_deepHash(entry.key) * 31) ^ _deepHash(entry.value); + } + return result; + } + if (value is double && value.isNaN) { + // Normalize NaN to a consistent hash. + return 0x7FF8000000000000.hashCode; + } + if (value is double && value == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return 0.0.hashCode; + } + return value.hashCode; +} + enum NullFieldsSearchReplyType { success, failure } class NullFieldsSearchRequest { @@ -104,12 +149,13 @@ class NullFieldsSearchRequest { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(query, other.query) && + _deepEquals(identifier, other.identifier); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class NullFieldsSearchReply { @@ -159,12 +205,16 @@ class NullFieldsSearchReply { if (identical(this, other)) { return true; } - return _deepEquals(encode(), other.encode()); + return _deepEquals(result, other.result) && + _deepEquals(error, other.error) && + _deepEquals(indices, other.indices) && + _deepEquals(request, other.request) && + _deepEquals(type, other.type); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()); + int get hashCode => _deepHash([runtimeType, ..._toList()]); } class _PigeonCodec extends StandardMessageCodec { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/test/equality_test.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/test/equality_test.dart new file mode 100644 index 000000000000..2fb8d597a3fa --- /dev/null +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/test/equality_test.dart @@ -0,0 +1,240 @@ +// 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 'package:flutter_test/flutter_test.dart'; +import 'package:shared_test_plugin_code/src/generated/core_tests.gen.dart'; +import 'package:shared_test_plugin_code/src/generated/non_null_fields.gen.dart'; +import 'package:shared_test_plugin_code/test_types.dart'; + +void main() { + test('NaN equality', () { + final list = [double.nan]; + final map = {1: double.nan}; + final all1 = AllNullableTypes( + aNullableDouble: double.nan, + doubleList: list, + recursiveClassList: [ + AllNullableTypes(aNullableDouble: double.nan), + ], + map: map, + ); + final all2 = AllNullableTypes( + aNullableDouble: double.nan, + doubleList: list, + recursiveClassList: [ + AllNullableTypes(aNullableDouble: double.nan), + ], + map: map, + ); + + expect(all1, all2); + expect(all1.hashCode, all2.hashCode); + }); + + test('Nested collection equality', () { + final all1 = AllNullableTypes( + listList: >[ + [1, 2], + ], + mapMap: >{ + 1: {'a': 'b'}, + }, + ); + final all2 = AllNullableTypes( + listList: >[ + [1, 2], + ], + mapMap: >{ + 1: {'a': 'b'}, + }, + ); + + expect(all1, all2); + expect(all1.hashCode, all2.hashCode); + }); + + test('Cross-type equality returns false', () { + final a = AllNullableTypes(aNullableInt: 1); + final b = AllNullableTypesWithoutRecursion(aNullableInt: 1); + // ignore: unrelated_type_equality_checks + expect(a == b, isFalse); + // ignore: unrelated_type_equality_checks + expect(b == a, isFalse); + }); + + test('non-null fields equality', () { + final request1 = NonNullFieldSearchRequest(query: 'hello'); + final request2 = NonNullFieldSearchRequest(query: 'hello'); + final request3 = NonNullFieldSearchRequest(query: 'world'); + + expect(request1, request2); + expect(request1, isNot(request3)); + expect(request1.hashCode, request2.hashCode); + }); + + group('deep equality', () { + final correctList = ['a', 2, 'three']; + final List matchingList = correctList.toList(); + final differentList = ['a', 2, 'three', 4.0]; + final correctMap = {'a': 1, 'b': 2, 'c': 'three'}; + final matchingMap = {...correctMap}; + final differentKeyMap = {'a': 1, 'b': 2, 'd': 'three'}; + final differentValueMap = {'a': 1, 'b': 2, 'c': 'five'}; + final correctListInMap = { + 'a': 1, + 'b': 2, + 'c': correctList, + }; + final matchingListInMap = { + 'a': 1, + 'b': 2, + 'c': matchingList, + }; + final differentListInMap = { + 'a': 1, + 'b': 2, + 'c': differentList, + }; + final correctMapInList = ['a', 2, correctMap]; + final matchingMapInList = ['a', 2, matchingMap]; + final differentKeyMapInList = ['a', 2, differentKeyMap]; + final differentValueMapInList = ['a', 2, differentValueMap]; + + test('equality method correctly checks deep equality', () { + final AllNullableTypes generic = genericAllNullableTypes; + final AllNullableTypes identical = AllNullableTypes.decode( + generic.encode(), + ); + expect(identical, generic); + }); + + test('equality method correctly identifies non-matching classes', () { + final AllNullableTypes generic = genericAllNullableTypes; + final allNull = AllNullableTypes(); + expect(allNull == generic, false); + }); + + test( + 'equality method correctly identifies non-matching lists in classes', + () { + final withList = AllNullableTypes(list: correctList); + final withDifferentList = AllNullableTypes(list: differentList); + expect(withList == withDifferentList, false); + }, + ); + + test( + 'equality method correctly identifies matching -but unique- lists in classes', + () { + final withList = AllNullableTypes(list: correctList); + final withDifferentList = AllNullableTypes(list: matchingList); + expect(withList, withDifferentList); + }, + ); + + test( + 'equality method correctly identifies non-matching keys in maps in classes', + () { + final withMap = AllNullableTypes(map: correctMap); + final withDifferentMap = AllNullableTypes(map: differentKeyMap); + expect(withMap == withDifferentMap, false); + }, + ); + + test( + 'equality method correctly identifies non-matching values in maps in classes', + () { + final withMap = AllNullableTypes(map: correctMap); + final withDifferentMap = AllNullableTypes(map: differentValueMap); + expect(withMap == withDifferentMap, false); + }, + ); + + test( + 'equality method correctly identifies matching -but unique- maps in classes', + () { + final withMap = AllNullableTypes(map: correctMap); + final withDifferentMap = AllNullableTypes(map: matchingMap); + expect(withMap, withDifferentMap); + }, + ); + test('signed zero equality', () { + final v1 = AllNullableTypes(aNullableDouble: 0.0); + final v2 = AllNullableTypes(aNullableDouble: -0.0); + expect(v1, v2); + expect(v1.hashCode, v2.hashCode); + }); + test('signed zero map key equality', () { + final v1 = AllNullableTypes(map: {0.0: 'a'}); + final v2 = AllNullableTypes(map: {-0.0: 'a'}); + expect(v1, v2); + expect(v1.hashCode, v2.hashCode); + }); + test('signed zero map value equality', () { + final v1 = AllNullableTypes(map: {'a': 0.0}); + final v2 = AllNullableTypes(map: {'a': -0.0}); + expect(v1, v2); + expect(v1.hashCode, v2.hashCode); + }); + test('signed zero nested list equality', () { + final v1 = AllNullableTypes(doubleList: [0.0]); + final v2 = AllNullableTypes(doubleList: [-0.0]); + expect(v1, v2); + expect(v1.hashCode, v2.hashCode); + }); + + test( + 'equality method correctly identifies non-matching lists nested in maps in classes', + () { + final withListInMap = AllNullableTypes(map: correctListInMap); + final withDifferentListInMap = AllNullableTypes( + map: differentListInMap, + ); + expect(withListInMap == withDifferentListInMap, false); + }, + ); + + test( + 'equality method correctly identifies matching -but unique- lists nested in maps in classes', + () { + final withListInMap = AllNullableTypes(map: correctListInMap); + final withDifferentListInMap = AllNullableTypes(map: matchingListInMap); + expect(withListInMap, withDifferentListInMap); + }, + ); + + test( + 'equality method correctly identifies non-matching keys in maps nested in lists in classes', + () { + final withMapInList = AllNullableTypes(list: correctMapInList); + final withDifferentMapInList = AllNullableTypes( + list: differentKeyMapInList, + ); + expect(withMapInList == withDifferentMapInList, false); + }, + ); + + test( + 'equality method correctly identifies non-matching values in maps nested in lists in classes', + () { + final withMapInList = AllNullableTypes(list: correctMapInList); + final withDifferentMapInList = AllNullableTypes( + list: differentValueMapInList, + ); + expect(withMapInList == withDifferentMapInList, false); + }, + ); + + test( + 'equality method correctly identifies matching -but unique- maps nested in lists in classes', + () { + final withMapInList = AllNullableTypes(list: correctMapInList); + final withDifferentMapInList = AllNullableTypes( + list: matchingMapInList, + ); + expect(withMapInList, withDifferentMapInList); + }, + ); + }); +} diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/test/generated_dart_test_code_test.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/test/generated_dart_test_code_test.dart index 2603e0e57f47..e8046afc4545 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/test/generated_dart_test_code_test.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/test/generated_dart_test_code_test.dart @@ -6,10 +6,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:shared_test_plugin_code/src/generated/core_tests.gen.dart' - show AllNullableTypes; import 'package:shared_test_plugin_code/src/generated/message.gen.dart'; -import 'package:shared_test_plugin_code/test_types.dart'; import 'test_message.gen.dart'; @@ -44,146 +41,6 @@ class MockNested implements TestNestedApi { void main() { TestWidgetsFlutterBinding.ensureInitialized(); - group('equality method', () { - final correctList = ['a', 2, 'three']; - final List matchingList = correctList.toList(); - final differentList = ['a', 2, 'three', 4.0]; - final correctMap = {'a': 1, 'b': 2, 'c': 'three'}; - final matchingMap = {...correctMap}; - final differentKeyMap = {'a': 1, 'b': 2, 'd': 'three'}; - final differentValueMap = {'a': 1, 'b': 2, 'c': 'five'}; - final correctListInMap = { - 'a': 1, - 'b': 2, - 'c': correctList, - }; - final matchingListInMap = { - 'a': 1, - 'b': 2, - 'c': matchingList, - }; - final differentListInMap = { - 'a': 1, - 'b': 2, - 'c': differentList, - }; - final correctMapInList = ['a', 2, correctMap]; - final matchingMapInList = ['a', 2, matchingMap]; - final differentKeyMapInList = ['a', 2, differentKeyMap]; - final differentValueMapInList = ['a', 2, differentValueMap]; - - test('equality method correctly checks deep equality', () { - final AllNullableTypes generic = genericAllNullableTypes; - final AllNullableTypes identical = AllNullableTypes.decode( - generic.encode(), - ); - expect(identical, generic); - }); - - test('equality method correctly identifies non-matching classes', () { - final AllNullableTypes generic = genericAllNullableTypes; - final allNull = AllNullableTypes(); - expect(allNull == generic, false); - }); - - test( - 'equality method correctly identifies non-matching lists in classes', - () { - final withList = AllNullableTypes(list: correctList); - final withDifferentList = AllNullableTypes(list: differentList); - expect(withList == withDifferentList, false); - }, - ); - - test( - 'equality method correctly identifies matching -but unique- lists in classes', - () { - final withList = AllNullableTypes(list: correctList); - final withDifferentList = AllNullableTypes(list: matchingList); - expect(withList, withDifferentList); - }, - ); - - test( - 'equality method correctly identifies non-matching keys in maps in classes', - () { - final withMap = AllNullableTypes(map: correctMap); - final withDifferentMap = AllNullableTypes(map: differentKeyMap); - expect(withMap == withDifferentMap, false); - }, - ); - - test( - 'equality method correctly identifies non-matching values in maps in classes', - () { - final withMap = AllNullableTypes(map: correctMap); - final withDifferentMap = AllNullableTypes(map: differentValueMap); - expect(withMap == withDifferentMap, false); - }, - ); - - test( - 'equality method correctly identifies matching -but unique- maps in classes', - () { - final withMap = AllNullableTypes(map: correctMap); - final withDifferentMap = AllNullableTypes(map: matchingMap); - expect(withMap, withDifferentMap); - }, - ); - - test( - 'equality method correctly identifies non-matching lists nested in maps in classes', - () { - final withListInMap = AllNullableTypes(map: correctListInMap); - final withDifferentListInMap = AllNullableTypes( - map: differentListInMap, - ); - expect(withListInMap == withDifferentListInMap, false); - }, - ); - - test( - 'equality method correctly identifies matching -but unique- lists nested in maps in classes', - () { - final withListInMap = AllNullableTypes(map: correctListInMap); - final withDifferentListInMap = AllNullableTypes(map: matchingListInMap); - expect(withListInMap, withDifferentListInMap); - }, - ); - - test( - 'equality method correctly identifies non-matching keys in maps nested in lists in classes', - () { - final withMapInList = AllNullableTypes(list: correctMapInList); - final withDifferentMapInList = AllNullableTypes( - list: differentKeyMapInList, - ); - expect(withMapInList == withDifferentMapInList, false); - }, - ); - - test( - 'equality method correctly identifies non-matching values in maps nested in lists in classes', - () { - final withMapInList = AllNullableTypes(list: correctMapInList); - final withDifferentMapInList = AllNullableTypes( - list: differentValueMapInList, - ); - expect(withMapInList == withDifferentMapInList, false); - }, - ); - - test( - 'equality method correctly identifies matching -but unique- maps nested in lists in classes', - () { - final withMapInList = AllNullableTypes(list: correctMapInList); - final withDifferentMapInList = AllNullableTypes( - list: matchingMapInList, - ); - expect(withMapInList, withDifferentMapInList); - }, - ); - }); test('simple', () async { final api = MessageNestedApi(); final mock = MockNested(); diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt index fe73e18c0998..338a53b8e3b3 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt @@ -38,7 +38,36 @@ private object CoreTestsPigeonUtils { } } + fun doubleEquals(a: Double, b: Double): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0) 0.0 else a) == (if (b == 0.0) 0.0 else b) || (a.isNaN() && b.isNaN()) + } + + fun floatEquals(a: Float, b: Float): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0f) 0.0f else a) == (if (b == 0.0f) 0.0f else b) || (a.isNaN() && b.isNaN()) + } + + fun doubleHash(d: Double): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (d == 0.0) 0.0 else d + val bits = java.lang.Double.doubleToLongBits(normalized) + return (bits xor (bits ushr 32)).toInt() + } + + fun floatHash(f: Float): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (f == 0.0f) 0.0f else f + return java.lang.Float.floatToIntBits(normalized) + } + fun deepEquals(a: Any?, b: Any?): Boolean { + if (a === b) { + return true + } + if (a == null || b == null) { + return false + } if (a is ByteArray && b is ByteArray) { return a.contentEquals(b) } @@ -49,20 +78,109 @@ private object CoreTestsPigeonUtils { return a.contentEquals(b) } if (a is DoubleArray && b is DoubleArray) { - return a.contentEquals(b) + if (a.size != b.size) return false + for (i in a.indices) { + if (!doubleEquals(a[i], b[i])) return false + } + return true + } + if (a is FloatArray && b is FloatArray) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!floatEquals(a[i], b[i])) return false + } + return true } if (a is Array<*> && b is Array<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + for (i in a.indices) { + if (!deepEquals(a[i], b[i])) return false + } + return true } if (a is List<*> && b is List<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + val iterA = a.iterator() + val iterB = b.iterator() + while (iterA.hasNext() && iterB.hasNext()) { + if (!deepEquals(iterA.next(), iterB.next())) return false + } + return true } if (a is Map<*, *> && b is Map<*, *>) { - return a.size == b.size && - a.all { (b as Map).contains(it.key) && deepEquals(it.value, b[it.key]) } + if (a.size != b.size) return false + for (entry in a) { + val key = entry.key + var found = false + for (bEntry in b) { + if (deepEquals(key, bEntry.key)) { + if (deepEquals(entry.value, bEntry.value)) { + found = true + break + } else { + return false + } + } + } + if (!found) return false + } + return true + } + if (a is Double && b is Double) { + return doubleEquals(a, b) + } + if (a is Float && b is Float) { + return floatEquals(a, b) } return a == b } + + fun deepHash(value: Any?): Int { + return when (value) { + null -> 0 + is ByteArray -> value.contentHashCode() + is IntArray -> value.contentHashCode() + is LongArray -> value.contentHashCode() + is DoubleArray -> { + var result = 1 + for (item in value) { + result = 31 * result + doubleHash(item) + } + result + } + is FloatArray -> { + var result = 1 + for (item in value) { + result = 31 * result + floatHash(item) + } + result + } + is Array<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is List<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is Map<*, *> -> { + var result = 0 + for (entry in value) { + result += ((deepHash(entry.key) * 31) xor deepHash(entry.value)) + } + result + } + is Double -> doubleHash(value) + is Float -> floatHash(value) + else -> value.hashCode() + } + } } /** @@ -118,16 +236,21 @@ data class UnusedClass(val aField: Any? = null) { } override fun equals(other: Any?): Boolean { - if (other !is UnusedClass) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return CoreTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as UnusedClass + return CoreTestsPigeonUtils.deepEquals(this.aField, other.aField) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aField) + return result + } } /** @@ -261,16 +384,75 @@ data class AllTypes( } override fun equals(other: Any?): Boolean { - if (other !is AllTypes) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return CoreTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as AllTypes + return CoreTestsPigeonUtils.deepEquals(this.aBool, other.aBool) && + CoreTestsPigeonUtils.deepEquals(this.anInt, other.anInt) && + CoreTestsPigeonUtils.deepEquals(this.anInt64, other.anInt64) && + CoreTestsPigeonUtils.deepEquals(this.aDouble, other.aDouble) && + CoreTestsPigeonUtils.deepEquals(this.aByteArray, other.aByteArray) && + CoreTestsPigeonUtils.deepEquals(this.a4ByteArray, other.a4ByteArray) && + CoreTestsPigeonUtils.deepEquals(this.a8ByteArray, other.a8ByteArray) && + CoreTestsPigeonUtils.deepEquals(this.aFloatArray, other.aFloatArray) && + CoreTestsPigeonUtils.deepEquals(this.anEnum, other.anEnum) && + CoreTestsPigeonUtils.deepEquals(this.anotherEnum, other.anotherEnum) && + CoreTestsPigeonUtils.deepEquals(this.aString, other.aString) && + CoreTestsPigeonUtils.deepEquals(this.anObject, other.anObject) && + CoreTestsPigeonUtils.deepEquals(this.list, other.list) && + CoreTestsPigeonUtils.deepEquals(this.stringList, other.stringList) && + CoreTestsPigeonUtils.deepEquals(this.intList, other.intList) && + CoreTestsPigeonUtils.deepEquals(this.doubleList, other.doubleList) && + CoreTestsPigeonUtils.deepEquals(this.boolList, other.boolList) && + CoreTestsPigeonUtils.deepEquals(this.enumList, other.enumList) && + CoreTestsPigeonUtils.deepEquals(this.objectList, other.objectList) && + CoreTestsPigeonUtils.deepEquals(this.listList, other.listList) && + CoreTestsPigeonUtils.deepEquals(this.mapList, other.mapList) && + CoreTestsPigeonUtils.deepEquals(this.map, other.map) && + CoreTestsPigeonUtils.deepEquals(this.stringMap, other.stringMap) && + CoreTestsPigeonUtils.deepEquals(this.intMap, other.intMap) && + CoreTestsPigeonUtils.deepEquals(this.enumMap, other.enumMap) && + CoreTestsPigeonUtils.deepEquals(this.objectMap, other.objectMap) && + CoreTestsPigeonUtils.deepEquals(this.listMap, other.listMap) && + CoreTestsPigeonUtils.deepEquals(this.mapMap, other.mapMap) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aBool) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.anInt) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.anInt64) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aDouble) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.a4ByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.a8ByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aFloatArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.anEnum) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.anotherEnum) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aString) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.anObject) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.list) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.stringList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.intList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.doubleList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.boolList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.enumList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.objectList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.listList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.mapList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.map) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.stringMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.intMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.enumMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.objectMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.listMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.mapMap) + return result + } } /** @@ -416,16 +598,81 @@ data class AllNullableTypes( } override fun equals(other: Any?): Boolean { - if (other !is AllNullableTypes) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return CoreTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as AllNullableTypes + return CoreTestsPigeonUtils.deepEquals(this.aNullableBool, other.aNullableBool) && + CoreTestsPigeonUtils.deepEquals(this.aNullableInt, other.aNullableInt) && + CoreTestsPigeonUtils.deepEquals(this.aNullableInt64, other.aNullableInt64) && + CoreTestsPigeonUtils.deepEquals(this.aNullableDouble, other.aNullableDouble) && + CoreTestsPigeonUtils.deepEquals(this.aNullableByteArray, other.aNullableByteArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullable4ByteArray, other.aNullable4ByteArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullable8ByteArray, other.aNullable8ByteArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullableFloatArray, other.aNullableFloatArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullableEnum, other.aNullableEnum) && + CoreTestsPigeonUtils.deepEquals(this.anotherNullableEnum, other.anotherNullableEnum) && + CoreTestsPigeonUtils.deepEquals(this.aNullableString, other.aNullableString) && + CoreTestsPigeonUtils.deepEquals(this.aNullableObject, other.aNullableObject) && + CoreTestsPigeonUtils.deepEquals(this.allNullableTypes, other.allNullableTypes) && + CoreTestsPigeonUtils.deepEquals(this.list, other.list) && + CoreTestsPigeonUtils.deepEquals(this.stringList, other.stringList) && + CoreTestsPigeonUtils.deepEquals(this.intList, other.intList) && + CoreTestsPigeonUtils.deepEquals(this.doubleList, other.doubleList) && + CoreTestsPigeonUtils.deepEquals(this.boolList, other.boolList) && + CoreTestsPigeonUtils.deepEquals(this.enumList, other.enumList) && + CoreTestsPigeonUtils.deepEquals(this.objectList, other.objectList) && + CoreTestsPigeonUtils.deepEquals(this.listList, other.listList) && + CoreTestsPigeonUtils.deepEquals(this.mapList, other.mapList) && + CoreTestsPigeonUtils.deepEquals(this.recursiveClassList, other.recursiveClassList) && + CoreTestsPigeonUtils.deepEquals(this.map, other.map) && + CoreTestsPigeonUtils.deepEquals(this.stringMap, other.stringMap) && + CoreTestsPigeonUtils.deepEquals(this.intMap, other.intMap) && + CoreTestsPigeonUtils.deepEquals(this.enumMap, other.enumMap) && + CoreTestsPigeonUtils.deepEquals(this.objectMap, other.objectMap) && + CoreTestsPigeonUtils.deepEquals(this.listMap, other.listMap) && + CoreTestsPigeonUtils.deepEquals(this.mapMap, other.mapMap) && + CoreTestsPigeonUtils.deepEquals(this.recursiveClassMap, other.recursiveClassMap) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableBool) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableInt) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableInt64) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableDouble) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullable4ByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullable8ByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableFloatArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableEnum) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.anotherNullableEnum) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableString) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableObject) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.allNullableTypes) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.list) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.stringList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.intList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.doubleList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.boolList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.enumList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.objectList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.listList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.mapList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.recursiveClassList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.map) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.stringMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.intMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.enumMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.objectMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.listMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.mapMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.recursiveClassMap) + return result + } } /** @@ -560,16 +807,75 @@ data class AllNullableTypesWithoutRecursion( } override fun equals(other: Any?): Boolean { - if (other !is AllNullableTypesWithoutRecursion) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return CoreTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as AllNullableTypesWithoutRecursion + return CoreTestsPigeonUtils.deepEquals(this.aNullableBool, other.aNullableBool) && + CoreTestsPigeonUtils.deepEquals(this.aNullableInt, other.aNullableInt) && + CoreTestsPigeonUtils.deepEquals(this.aNullableInt64, other.aNullableInt64) && + CoreTestsPigeonUtils.deepEquals(this.aNullableDouble, other.aNullableDouble) && + CoreTestsPigeonUtils.deepEquals(this.aNullableByteArray, other.aNullableByteArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullable4ByteArray, other.aNullable4ByteArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullable8ByteArray, other.aNullable8ByteArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullableFloatArray, other.aNullableFloatArray) && + CoreTestsPigeonUtils.deepEquals(this.aNullableEnum, other.aNullableEnum) && + CoreTestsPigeonUtils.deepEquals(this.anotherNullableEnum, other.anotherNullableEnum) && + CoreTestsPigeonUtils.deepEquals(this.aNullableString, other.aNullableString) && + CoreTestsPigeonUtils.deepEquals(this.aNullableObject, other.aNullableObject) && + CoreTestsPigeonUtils.deepEquals(this.list, other.list) && + CoreTestsPigeonUtils.deepEquals(this.stringList, other.stringList) && + CoreTestsPigeonUtils.deepEquals(this.intList, other.intList) && + CoreTestsPigeonUtils.deepEquals(this.doubleList, other.doubleList) && + CoreTestsPigeonUtils.deepEquals(this.boolList, other.boolList) && + CoreTestsPigeonUtils.deepEquals(this.enumList, other.enumList) && + CoreTestsPigeonUtils.deepEquals(this.objectList, other.objectList) && + CoreTestsPigeonUtils.deepEquals(this.listList, other.listList) && + CoreTestsPigeonUtils.deepEquals(this.mapList, other.mapList) && + CoreTestsPigeonUtils.deepEquals(this.map, other.map) && + CoreTestsPigeonUtils.deepEquals(this.stringMap, other.stringMap) && + CoreTestsPigeonUtils.deepEquals(this.intMap, other.intMap) && + CoreTestsPigeonUtils.deepEquals(this.enumMap, other.enumMap) && + CoreTestsPigeonUtils.deepEquals(this.objectMap, other.objectMap) && + CoreTestsPigeonUtils.deepEquals(this.listMap, other.listMap) && + CoreTestsPigeonUtils.deepEquals(this.mapMap, other.mapMap) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableBool) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableInt) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableInt64) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableDouble) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullable4ByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullable8ByteArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableFloatArray) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableEnum) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.anotherNullableEnum) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableString) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.aNullableObject) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.list) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.stringList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.intList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.doubleList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.boolList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.enumList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.objectList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.listList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.mapList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.map) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.stringMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.intMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.enumMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.objectMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.listMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.mapMap) + return result + } } /** @@ -623,16 +929,34 @@ data class AllClassesWrapper( } override fun equals(other: Any?): Boolean { - if (other !is AllClassesWrapper) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return CoreTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as AllClassesWrapper + return CoreTestsPigeonUtils.deepEquals(this.allNullableTypes, other.allNullableTypes) && + CoreTestsPigeonUtils.deepEquals( + this.allNullableTypesWithoutRecursion, other.allNullableTypesWithoutRecursion) && + CoreTestsPigeonUtils.deepEquals(this.allTypes, other.allTypes) && + CoreTestsPigeonUtils.deepEquals(this.classList, other.classList) && + CoreTestsPigeonUtils.deepEquals(this.nullableClassList, other.nullableClassList) && + CoreTestsPigeonUtils.deepEquals(this.classMap, other.classMap) && + CoreTestsPigeonUtils.deepEquals(this.nullableClassMap, other.nullableClassMap) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.allNullableTypes) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.allNullableTypesWithoutRecursion) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.allTypes) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.classList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.nullableClassList) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.classMap) + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.nullableClassMap) + return result + } } /** @@ -655,16 +979,21 @@ data class TestMessage(val testList: List? = null) { } override fun equals(other: Any?): Boolean { - if (other !is TestMessage) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return CoreTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as TestMessage + return CoreTestsPigeonUtils.deepEquals(this.testList, other.testList) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + CoreTestsPigeonUtils.deepHash(this.testList) + return result + } } private open class CoreTestsPigeonCodec : StandardMessageCodec() { @@ -808,6 +1137,12 @@ interface HostIntegrationCoreApi { fun echoOptionalDefaultDouble(aDouble: Double): Double /** Returns passed in int. */ fun echoRequiredInt(anInt: Long): Long + /** Returns the result of platform-side equality check. */ + fun areAllNullableTypesEqual(a: AllNullableTypes, b: AllNullableTypes): Boolean + /** Returns the platform-side hash code for the given object. */ + fun getAllNullableTypesHash(value: AllNullableTypes): Long + /** Returns the platform-side hash code for the given object. */ + fun getAllNullableTypesWithoutRecursionHash(value: AllNullableTypesWithoutRecursion): Long /** Returns the passed object, to test serialization and deserialization. */ fun echoAllNullableTypes(everything: AllNullableTypes?): AllNullableTypes? /** Returns the passed object, to test serialization and deserialization. */ @@ -1900,6 +2235,73 @@ interface HostIntegrationCoreApi { channel.setMessageHandler(null) } } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.areAllNullableTypesEqual$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val aArg = args[0] as AllNullableTypes + val bArg = args[1] as AllNullableTypes + val wrapped: List = + try { + listOf(api.areAllNullableTypesEqual(aArg, bArg)) + } catch (exception: Throwable) { + CoreTestsPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesHash$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val valueArg = args[0] as AllNullableTypes + val wrapped: List = + try { + listOf(api.getAllNullableTypesHash(valueArg)) + } catch (exception: Throwable) { + CoreTestsPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesWithoutRecursionHash$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val valueArg = args[0] as AllNullableTypesWithoutRecursion + val wrapped: List = + try { + listOf(api.getAllNullableTypesWithoutRecursionHash(valueArg)) + } catch (exception: Throwable) { + CoreTestsPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } run { val channel = BasicMessageChannel( diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt index a3f79976d792..b98e54fef79c 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/EventChannelTests.gen.kt @@ -16,7 +16,36 @@ import java.io.ByteArrayOutputStream import java.nio.ByteBuffer private object EventChannelTestsPigeonUtils { + fun doubleEquals(a: Double, b: Double): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0) 0.0 else a) == (if (b == 0.0) 0.0 else b) || (a.isNaN() && b.isNaN()) + } + + fun floatEquals(a: Float, b: Float): Boolean { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (if (a == 0.0f) 0.0f else a) == (if (b == 0.0f) 0.0f else b) || (a.isNaN() && b.isNaN()) + } + + fun doubleHash(d: Double): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (d == 0.0) 0.0 else d + val bits = java.lang.Double.doubleToLongBits(normalized) + return (bits xor (bits ushr 32)).toInt() + } + + fun floatHash(f: Float): Int { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + val normalized = if (f == 0.0f) 0.0f else f + return java.lang.Float.floatToIntBits(normalized) + } + fun deepEquals(a: Any?, b: Any?): Boolean { + if (a === b) { + return true + } + if (a == null || b == null) { + return false + } if (a is ByteArray && b is ByteArray) { return a.contentEquals(b) } @@ -27,20 +56,109 @@ private object EventChannelTestsPigeonUtils { return a.contentEquals(b) } if (a is DoubleArray && b is DoubleArray) { - return a.contentEquals(b) + if (a.size != b.size) return false + for (i in a.indices) { + if (!doubleEquals(a[i], b[i])) return false + } + return true + } + if (a is FloatArray && b is FloatArray) { + if (a.size != b.size) return false + for (i in a.indices) { + if (!floatEquals(a[i], b[i])) return false + } + return true } if (a is Array<*> && b is Array<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + for (i in a.indices) { + if (!deepEquals(a[i], b[i])) return false + } + return true } if (a is List<*> && b is List<*>) { - return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) } + if (a.size != b.size) return false + val iterA = a.iterator() + val iterB = b.iterator() + while (iterA.hasNext() && iterB.hasNext()) { + if (!deepEquals(iterA.next(), iterB.next())) return false + } + return true } if (a is Map<*, *> && b is Map<*, *>) { - return a.size == b.size && - a.all { (b as Map).contains(it.key) && deepEquals(it.value, b[it.key]) } + if (a.size != b.size) return false + for (entry in a) { + val key = entry.key + var found = false + for (bEntry in b) { + if (deepEquals(key, bEntry.key)) { + if (deepEquals(entry.value, bEntry.value)) { + found = true + break + } else { + return false + } + } + } + if (!found) return false + } + return true + } + if (a is Double && b is Double) { + return doubleEquals(a, b) + } + if (a is Float && b is Float) { + return floatEquals(a, b) } return a == b } + + fun deepHash(value: Any?): Int { + return when (value) { + null -> 0 + is ByteArray -> value.contentHashCode() + is IntArray -> value.contentHashCode() + is LongArray -> value.contentHashCode() + is DoubleArray -> { + var result = 1 + for (item in value) { + result = 31 * result + doubleHash(item) + } + result + } + is FloatArray -> { + var result = 1 + for (item in value) { + result = 31 * result + floatHash(item) + } + result + } + is Array<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is List<*> -> { + var result = 1 + for (item in value) { + result = 31 * result + deepHash(item) + } + result + } + is Map<*, *> -> { + var result = 0 + for (entry in value) { + result += ((deepHash(entry.key) * 31) xor deepHash(entry.value)) + } + result + } + is Double -> doubleHash(value) + is Float -> floatHash(value) + else -> value.hashCode() + } + } } /** @@ -223,16 +341,87 @@ data class EventAllNullableTypes( } override fun equals(other: Any?): Boolean { - if (other !is EventAllNullableTypes) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as EventAllNullableTypes + return EventChannelTestsPigeonUtils.deepEquals(this.aNullableBool, other.aNullableBool) && + EventChannelTestsPigeonUtils.deepEquals(this.aNullableInt, other.aNullableInt) && + EventChannelTestsPigeonUtils.deepEquals(this.aNullableInt64, other.aNullableInt64) && + EventChannelTestsPigeonUtils.deepEquals(this.aNullableDouble, other.aNullableDouble) && + EventChannelTestsPigeonUtils.deepEquals( + this.aNullableByteArray, other.aNullableByteArray) && + EventChannelTestsPigeonUtils.deepEquals( + this.aNullable4ByteArray, other.aNullable4ByteArray) && + EventChannelTestsPigeonUtils.deepEquals( + this.aNullable8ByteArray, other.aNullable8ByteArray) && + EventChannelTestsPigeonUtils.deepEquals( + this.aNullableFloatArray, other.aNullableFloatArray) && + EventChannelTestsPigeonUtils.deepEquals(this.aNullableEnum, other.aNullableEnum) && + EventChannelTestsPigeonUtils.deepEquals( + this.anotherNullableEnum, other.anotherNullableEnum) && + EventChannelTestsPigeonUtils.deepEquals(this.aNullableString, other.aNullableString) && + EventChannelTestsPigeonUtils.deepEquals(this.aNullableObject, other.aNullableObject) && + EventChannelTestsPigeonUtils.deepEquals(this.allNullableTypes, other.allNullableTypes) && + EventChannelTestsPigeonUtils.deepEquals(this.list, other.list) && + EventChannelTestsPigeonUtils.deepEquals(this.stringList, other.stringList) && + EventChannelTestsPigeonUtils.deepEquals(this.intList, other.intList) && + EventChannelTestsPigeonUtils.deepEquals(this.doubleList, other.doubleList) && + EventChannelTestsPigeonUtils.deepEquals(this.boolList, other.boolList) && + EventChannelTestsPigeonUtils.deepEquals(this.enumList, other.enumList) && + EventChannelTestsPigeonUtils.deepEquals(this.objectList, other.objectList) && + EventChannelTestsPigeonUtils.deepEquals(this.listList, other.listList) && + EventChannelTestsPigeonUtils.deepEquals(this.mapList, other.mapList) && + EventChannelTestsPigeonUtils.deepEquals( + this.recursiveClassList, other.recursiveClassList) && + EventChannelTestsPigeonUtils.deepEquals(this.map, other.map) && + EventChannelTestsPigeonUtils.deepEquals(this.stringMap, other.stringMap) && + EventChannelTestsPigeonUtils.deepEquals(this.intMap, other.intMap) && + EventChannelTestsPigeonUtils.deepEquals(this.enumMap, other.enumMap) && + EventChannelTestsPigeonUtils.deepEquals(this.objectMap, other.objectMap) && + EventChannelTestsPigeonUtils.deepEquals(this.listMap, other.listMap) && + EventChannelTestsPigeonUtils.deepEquals(this.mapMap, other.mapMap) && + EventChannelTestsPigeonUtils.deepEquals(this.recursiveClassMap, other.recursiveClassMap) + } + + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableBool) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableInt) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableInt64) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableDouble) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableByteArray) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullable4ByteArray) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullable8ByteArray) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableFloatArray) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableEnum) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.anotherNullableEnum) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableString) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.aNullableObject) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.allNullableTypes) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.list) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.stringList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.intList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.doubleList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.boolList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.enumList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.objectList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.listList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.mapList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.recursiveClassList) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.map) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.stringMap) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.intMap) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.enumMap) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.objectMap) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.listMap) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.mapMap) + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.recursiveClassMap) + return result } - - override fun hashCode(): Int = toList().hashCode() } /** @@ -256,16 +445,21 @@ data class IntEvent(val value: Long) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is IntEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as IntEvent + return EventChannelTestsPigeonUtils.deepEquals(this.value, other.value) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.value) + return result + } } /** Generated class from Pigeon that represents data sent in messages. */ @@ -284,16 +478,21 @@ data class StringEvent(val value: String) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is StringEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as StringEvent + return EventChannelTestsPigeonUtils.deepEquals(this.value, other.value) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.value) + return result + } } /** Generated class from Pigeon that represents data sent in messages. */ @@ -312,16 +511,21 @@ data class BoolEvent(val value: Boolean) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is BoolEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as BoolEvent + return EventChannelTestsPigeonUtils.deepEquals(this.value, other.value) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.value) + return result + } } /** Generated class from Pigeon that represents data sent in messages. */ @@ -340,16 +544,21 @@ data class DoubleEvent(val value: Double) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is DoubleEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as DoubleEvent + return EventChannelTestsPigeonUtils.deepEquals(this.value, other.value) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.value) + return result + } } /** Generated class from Pigeon that represents data sent in messages. */ @@ -368,16 +577,21 @@ data class ObjectsEvent(val value: Any) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is ObjectsEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as ObjectsEvent + return EventChannelTestsPigeonUtils.deepEquals(this.value, other.value) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.value) + return result + } } /** Generated class from Pigeon that represents data sent in messages. */ @@ -396,16 +610,21 @@ data class EnumEvent(val value: EventEnum) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is EnumEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as EnumEvent + return EventChannelTestsPigeonUtils.deepEquals(this.value, other.value) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.value) + return result + } } /** Generated class from Pigeon that represents data sent in messages. */ @@ -424,16 +643,21 @@ data class ClassEvent(val value: EventAllNullableTypes) : PlatformEvent() { } override fun equals(other: Any?): Boolean { - if (other !is ClassEvent) { + if (other == null || other.javaClass != javaClass) { return false } if (this === other) { return true } - return EventChannelTestsPigeonUtils.deepEquals(toList(), other.toList()) + val other = other as ClassEvent + return EventChannelTestsPigeonUtils.deepEquals(this.value, other.value) } - override fun hashCode(): Int = toList().hashCode() + override fun hashCode(): Int { + var result = javaClass.hashCode() + result = 31 * result + EventChannelTestsPigeonUtils.deepHash(this.value) + return result + } } private open class EventChannelTestsPigeonCodec : StandardMessageCodec() { diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt index e032596170cc..ea402e91d7a4 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/TestPlugin.kt @@ -53,6 +53,20 @@ class TestPlugin : FlutterPlugin, HostIntegrationCoreApi { return everything } + override fun areAllNullableTypesEqual(a: AllNullableTypes, b: AllNullableTypes): Boolean { + return a == b + } + + override fun getAllNullableTypesHash(value: AllNullableTypes): Long { + return value.hashCode().toLong() + } + + override fun getAllNullableTypesWithoutRecursionHash( + value: AllNullableTypesWithoutRecursion + ): Long { + return value.hashCode().toLong() + } + override fun echoAllNullableTypesWithoutRecursion( everything: AllNullableTypesWithoutRecursion? ): AllNullableTypesWithoutRecursion? { diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt index e2f80062c6e2..28a27c985604 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt @@ -227,4 +227,69 @@ internal class AllDatatypesTest { val withDifferentMapInList = AllNullableTypes(list = matchingMapInList) assertEquals(withMapInList, withDifferentMapInList) } + + @Test + fun `equality method correctly identifies NaN matches`() { + val withNaN = AllNullableTypes(aNullableDouble = Double.NaN) + val withAnotherNaN = AllNullableTypes(aNullableDouble = Double.NaN) + assertEquals(withNaN, withAnotherNaN) + assertEquals(withNaN.hashCode(), withAnotherNaN.hashCode()) + } + + @Test + fun `cross-type equality returns false`() { + val a = AllNullableTypes(aNullableInt = 1) + val b = AllNullableTypesWithoutRecursion(aNullableInt = 1) + assertNotEquals(a, b) + assertNotEquals(b, a) + } + + @Test + fun `byteArray equality`() { + val a = AllNullableTypes(aNullableByteArray = byteArrayOf(1, 2, 3)) + val b = AllNullableTypes(aNullableByteArray = byteArrayOf(1, 2, 3)) + assertEquals(a, b) + assertEquals(a.hashCode(), b.hashCode()) + } + + @Test + fun `zero equality`() { + val a = AllNullableTypes(aNullableDouble = 0.0) + val b = AllNullableTypes(aNullableDouble = -0.0) + // In many platforms, 0.0 and -0.0 are treated as equal. + assertEquals(a, b) + assertEquals(a.hashCode(), b.hashCode()) + } + + @Test + fun `zero map key equality`() { + val a = AllNullableTypes(map = mapOf(0.0 to "a")) + val b = AllNullableTypes(map = mapOf(-0.0 to "a")) + assertEquals(a, b) + assertEquals(a.hashCode(), b.hashCode()) + } + + @Test + fun `nested NaN equality`() { + val a = AllNullableTypes(doubleList = listOf(Double.NaN)) + val b = AllNullableTypes(doubleList = listOf(Double.NaN)) + assertEquals(a, b) + assertEquals(a.hashCode(), b.hashCode()) + } + + @Test + fun `nested zero list equality`() { + val a = AllNullableTypes(doubleList = listOf(0.0)) + val b = AllNullableTypes(doubleList = listOf(-0.0)) + assertEquals(a, b) + assertEquals(a.hashCode(), b.hashCode()) + } + + @Test + fun `nested zero array equality`() { + val a = AllNullableTypes(aNullableFloatArray = doubleArrayOf(0.0)) + val b = AllNullableTypes(aNullableFloatArray = doubleArrayOf(-0.0)) + assertEquals(a, b) + assertEquals(a.hashCode(), b.hashCode()) + } } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/NonNullFieldsTests.kt b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/NonNullFieldsTests.kt index e5e97394f18f..fad1532b0599 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/NonNullFieldsTests.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/NonNullFieldsTests.kt @@ -14,4 +14,15 @@ class NonNullFieldsTests { val request = NonNullFieldSearchRequest("hello") assertEquals("hello", request.query) } + + @Test + fun testEquality() { + val request1 = NonNullFieldSearchRequest("hello") + val request2 = NonNullFieldSearchRequest("hello") + val request3 = NonNullFieldSearchRequest("world") + + assertEquals(request1, request2) + assert(request1 != request3) + assertEquals(request1.hashCode(), request2.hashCode()) + } } diff --git a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/CoreTests.gen.swift index ddea768974b8..606d58783837 100644 --- a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/CoreTests.gen.swift @@ -54,7 +54,7 @@ private func wrapError(_ error: Any) -> [Any?] { } return [ "\(error)", - "\(type(of: error))", + "\(Swift.type(of: error))", "Stacktrace: \(Thread.callStackSymbols)", ] } @@ -74,6 +74,19 @@ private func nilOrValue(_ value: Any?) -> T? { return value as! T? } +private func doubleEqualsCoreTests(_ lhs: Double, _ rhs: Double) -> Bool { + return (lhs.isNaN && rhs.isNaN) || lhs == rhs +} + +private func doubleHashCoreTests(_ value: Double, _ hasher: inout Hasher) { + if value.isNaN { + hasher.combine(0x7FF8_0000_0000_0000) + } else { + // Normalize -0.0 to 0.0 + hasher.combine(value == 0 ? 0 : value) + } +} + func deepEqualsCoreTests(_ lhs: Any?, _ rhs: Any?) -> Bool { let cleanLhs = nilOrValue(lhs) as Any? let cleanRhs = nilOrValue(rhs) as Any? @@ -84,56 +97,90 @@ func deepEqualsCoreTests(_ lhs: Any?, _ rhs: Any?) -> Bool { case (nil, _), (_, nil): return false - case is (Void, Void): + case (let lhs as AnyObject, let rhs as AnyObject) where lhs === rhs: return true - case let (cleanLhsHashable, cleanRhsHashable) as (AnyHashable, AnyHashable): - return cleanLhsHashable == cleanRhsHashable + case is (Void, Void): + return true - case let (cleanLhsArray, cleanRhsArray) as ([Any?], [Any?]): - guard cleanLhsArray.count == cleanRhsArray.count else { return false } - for (index, element) in cleanLhsArray.enumerated() { - if !deepEqualsCoreTests(element, cleanRhsArray[index]) { + case (let lhsArray, let rhsArray) as ([Any?], [Any?]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !deepEqualsCoreTests(element, rhsArray[index]) { return false } } return true - case let (cleanLhsDictionary, cleanRhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): - guard cleanLhsDictionary.count == cleanRhsDictionary.count else { return false } - for (key, cleanLhsValue) in cleanLhsDictionary { - guard cleanRhsDictionary.index(forKey: key) != nil else { return false } - if !deepEqualsCoreTests(cleanLhsValue, cleanRhsDictionary[key]!) { + case (let lhsArray, let rhsArray) as ([Double], [Double]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !doubleEqualsCoreTests(element, rhsArray[index]) { return false } } return true + case (let lhsDictionary, let rhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): + guard lhsDictionary.count == rhsDictionary.count else { return false } + for (lhsKey, lhsValue) in lhsDictionary { + var found = false + for (rhsKey, rhsValue) in rhsDictionary { + if deepEqualsCoreTests(lhsKey, rhsKey) { + if deepEqualsCoreTests(lhsValue, rhsValue) { + found = true + break + } else { + return false + } + } + } + if !found { return false } + } + return true + + case (let lhs as Double, let rhs as Double): + return doubleEqualsCoreTests(lhs, rhs) + + case (let lhsHashable, let rhsHashable) as (AnyHashable, AnyHashable): + return lhsHashable == rhsHashable + default: - // Any other type shouldn't be able to be used with pigeon. File an issue if you find this to be untrue. return false } } func deepHashCoreTests(value: Any?, hasher: inout Hasher) { - if let valueList = value as? [AnyHashable] { - for item in valueList { deepHashCoreTests(value: item, hasher: &hasher) } - return + let cleanValue = nilOrValue(value) as Any? + if let cleanValue = cleanValue { + if let doubleValue = cleanValue as? Double { + doubleHashCoreTests(doubleValue, &hasher) + } else if let valueList = cleanValue as? [Any?] { + for item in valueList { + deepHashCoreTests(value: item, hasher: &hasher) + } + } else if let valueList = cleanValue as? [Double] { + for item in valueList { + doubleHashCoreTests(item, &hasher) + } + } else if let valueDict = cleanValue as? [AnyHashable: Any?] { + var result = 0 + for (key, value) in valueDict { + var entryKeyHasher = Hasher() + deepHashCoreTests(value: key, hasher: &entryKeyHasher) + var entryValueHasher = Hasher() + deepHashCoreTests(value: value, hasher: &entryValueHasher) + result = result &+ ((entryKeyHasher.finalize() &* 31) ^ entryValueHasher.finalize()) + } + hasher.combine(result) + } else if let hashableValue = cleanValue as? AnyHashable { + hasher.combine(hashableValue) + } else { + hasher.combine(String(describing: cleanValue)) + } + } else { + hasher.combine(0) } - - if let valueDict = value as? [AnyHashable: AnyHashable] { - for key in valueDict.keys { - hasher.combine(key) - deepHashCoreTests(value: valueDict[key]!, hasher: &hasher) - } - return - } - - if let hashableValue = value as? AnyHashable { - hasher.combine(hashableValue.hashValue) - } - - return hasher.combine(String(describing: value)) } enum AnEnum: Int { @@ -166,10 +213,15 @@ struct UnusedClass: Hashable { ] } static func == (lhs: UnusedClass, rhs: UnusedClass) -> Bool { - return deepEqualsCoreTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsCoreTests(lhs.aField, rhs.aField) } + func hash(into hasher: inout Hasher) { - deepHashCoreTests(value: toList(), hasher: &hasher) + hasher.combine("UnusedClass") + deepHashCoreTests(value: aField, hasher: &hasher) } } @@ -301,10 +353,66 @@ struct AllTypes: Hashable { ] } static func == (lhs: AllTypes, rhs: AllTypes) -> Bool { - return deepEqualsCoreTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsCoreTests(lhs.aBool, rhs.aBool) && deepEqualsCoreTests(lhs.anInt, rhs.anInt) + && deepEqualsCoreTests(lhs.anInt64, rhs.anInt64) + && deepEqualsCoreTests(lhs.aDouble, rhs.aDouble) + && deepEqualsCoreTests(lhs.aByteArray, rhs.aByteArray) + && deepEqualsCoreTests(lhs.a4ByteArray, rhs.a4ByteArray) + && deepEqualsCoreTests(lhs.a8ByteArray, rhs.a8ByteArray) + && deepEqualsCoreTests(lhs.aFloatArray, rhs.aFloatArray) + && deepEqualsCoreTests(lhs.anEnum, rhs.anEnum) + && deepEqualsCoreTests(lhs.anotherEnum, rhs.anotherEnum) + && deepEqualsCoreTests(lhs.aString, rhs.aString) + && deepEqualsCoreTests(lhs.anObject, rhs.anObject) && deepEqualsCoreTests(lhs.list, rhs.list) + && deepEqualsCoreTests(lhs.stringList, rhs.stringList) + && deepEqualsCoreTests(lhs.intList, rhs.intList) + && deepEqualsCoreTests(lhs.doubleList, rhs.doubleList) + && deepEqualsCoreTests(lhs.boolList, rhs.boolList) + && deepEqualsCoreTests(lhs.enumList, rhs.enumList) + && deepEqualsCoreTests(lhs.objectList, rhs.objectList) + && deepEqualsCoreTests(lhs.listList, rhs.listList) + && deepEqualsCoreTests(lhs.mapList, rhs.mapList) && deepEqualsCoreTests(lhs.map, rhs.map) + && deepEqualsCoreTests(lhs.stringMap, rhs.stringMap) + && deepEqualsCoreTests(lhs.intMap, rhs.intMap) + && deepEqualsCoreTests(lhs.enumMap, rhs.enumMap) + && deepEqualsCoreTests(lhs.objectMap, rhs.objectMap) + && deepEqualsCoreTests(lhs.listMap, rhs.listMap) + && deepEqualsCoreTests(lhs.mapMap, rhs.mapMap) } + func hash(into hasher: inout Hasher) { - deepHashCoreTests(value: toList(), hasher: &hasher) + hasher.combine("AllTypes") + deepHashCoreTests(value: aBool, hasher: &hasher) + deepHashCoreTests(value: anInt, hasher: &hasher) + deepHashCoreTests(value: anInt64, hasher: &hasher) + deepHashCoreTests(value: aDouble, hasher: &hasher) + deepHashCoreTests(value: aByteArray, hasher: &hasher) + deepHashCoreTests(value: a4ByteArray, hasher: &hasher) + deepHashCoreTests(value: a8ByteArray, hasher: &hasher) + deepHashCoreTests(value: aFloatArray, hasher: &hasher) + deepHashCoreTests(value: anEnum, hasher: &hasher) + deepHashCoreTests(value: anotherEnum, hasher: &hasher) + deepHashCoreTests(value: aString, hasher: &hasher) + deepHashCoreTests(value: anObject, hasher: &hasher) + deepHashCoreTests(value: list, hasher: &hasher) + deepHashCoreTests(value: stringList, hasher: &hasher) + deepHashCoreTests(value: intList, hasher: &hasher) + deepHashCoreTests(value: doubleList, hasher: &hasher) + deepHashCoreTests(value: boolList, hasher: &hasher) + deepHashCoreTests(value: enumList, hasher: &hasher) + deepHashCoreTests(value: objectList, hasher: &hasher) + deepHashCoreTests(value: listList, hasher: &hasher) + deepHashCoreTests(value: mapList, hasher: &hasher) + deepHashCoreTests(value: map, hasher: &hasher) + deepHashCoreTests(value: stringMap, hasher: &hasher) + deepHashCoreTests(value: intMap, hasher: &hasher) + deepHashCoreTests(value: enumMap, hasher: &hasher) + deepHashCoreTests(value: objectMap, hasher: &hasher) + deepHashCoreTests(value: listMap, hasher: &hasher) + deepHashCoreTests(value: mapMap, hasher: &hasher) } } @@ -513,13 +621,77 @@ class AllNullableTypes: Hashable { ] } static func == (lhs: AllNullableTypes, rhs: AllNullableTypes) -> Bool { + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } if lhs === rhs { return true } - return deepEqualsCoreTests(lhs.toList(), rhs.toList()) + return deepEqualsCoreTests(lhs.aNullableBool, rhs.aNullableBool) + && deepEqualsCoreTests(lhs.aNullableInt, rhs.aNullableInt) + && deepEqualsCoreTests(lhs.aNullableInt64, rhs.aNullableInt64) + && deepEqualsCoreTests(lhs.aNullableDouble, rhs.aNullableDouble) + && deepEqualsCoreTests(lhs.aNullableByteArray, rhs.aNullableByteArray) + && deepEqualsCoreTests(lhs.aNullable4ByteArray, rhs.aNullable4ByteArray) + && deepEqualsCoreTests(lhs.aNullable8ByteArray, rhs.aNullable8ByteArray) + && deepEqualsCoreTests(lhs.aNullableFloatArray, rhs.aNullableFloatArray) + && deepEqualsCoreTests(lhs.aNullableEnum, rhs.aNullableEnum) + && deepEqualsCoreTests(lhs.anotherNullableEnum, rhs.anotherNullableEnum) + && deepEqualsCoreTests(lhs.aNullableString, rhs.aNullableString) + && deepEqualsCoreTests(lhs.aNullableObject, rhs.aNullableObject) + && deepEqualsCoreTests(lhs.allNullableTypes, rhs.allNullableTypes) + && deepEqualsCoreTests(lhs.list, rhs.list) + && deepEqualsCoreTests(lhs.stringList, rhs.stringList) + && deepEqualsCoreTests(lhs.intList, rhs.intList) + && deepEqualsCoreTests(lhs.doubleList, rhs.doubleList) + && deepEqualsCoreTests(lhs.boolList, rhs.boolList) + && deepEqualsCoreTests(lhs.enumList, rhs.enumList) + && deepEqualsCoreTests(lhs.objectList, rhs.objectList) + && deepEqualsCoreTests(lhs.listList, rhs.listList) + && deepEqualsCoreTests(lhs.mapList, rhs.mapList) + && deepEqualsCoreTests(lhs.recursiveClassList, rhs.recursiveClassList) + && deepEqualsCoreTests(lhs.map, rhs.map) && deepEqualsCoreTests(lhs.stringMap, rhs.stringMap) + && deepEqualsCoreTests(lhs.intMap, rhs.intMap) + && deepEqualsCoreTests(lhs.enumMap, rhs.enumMap) + && deepEqualsCoreTests(lhs.objectMap, rhs.objectMap) + && deepEqualsCoreTests(lhs.listMap, rhs.listMap) + && deepEqualsCoreTests(lhs.mapMap, rhs.mapMap) + && deepEqualsCoreTests(lhs.recursiveClassMap, rhs.recursiveClassMap) } + func hash(into hasher: inout Hasher) { - deepHashCoreTests(value: toList(), hasher: &hasher) + hasher.combine("AllNullableTypes") + deepHashCoreTests(value: aNullableBool, hasher: &hasher) + deepHashCoreTests(value: aNullableInt, hasher: &hasher) + deepHashCoreTests(value: aNullableInt64, hasher: &hasher) + deepHashCoreTests(value: aNullableDouble, hasher: &hasher) + deepHashCoreTests(value: aNullableByteArray, hasher: &hasher) + deepHashCoreTests(value: aNullable4ByteArray, hasher: &hasher) + deepHashCoreTests(value: aNullable8ByteArray, hasher: &hasher) + deepHashCoreTests(value: aNullableFloatArray, hasher: &hasher) + deepHashCoreTests(value: aNullableEnum, hasher: &hasher) + deepHashCoreTests(value: anotherNullableEnum, hasher: &hasher) + deepHashCoreTests(value: aNullableString, hasher: &hasher) + deepHashCoreTests(value: aNullableObject, hasher: &hasher) + deepHashCoreTests(value: allNullableTypes, hasher: &hasher) + deepHashCoreTests(value: list, hasher: &hasher) + deepHashCoreTests(value: stringList, hasher: &hasher) + deepHashCoreTests(value: intList, hasher: &hasher) + deepHashCoreTests(value: doubleList, hasher: &hasher) + deepHashCoreTests(value: boolList, hasher: &hasher) + deepHashCoreTests(value: enumList, hasher: &hasher) + deepHashCoreTests(value: objectList, hasher: &hasher) + deepHashCoreTests(value: listList, hasher: &hasher) + deepHashCoreTests(value: mapList, hasher: &hasher) + deepHashCoreTests(value: recursiveClassList, hasher: &hasher) + deepHashCoreTests(value: map, hasher: &hasher) + deepHashCoreTests(value: stringMap, hasher: &hasher) + deepHashCoreTests(value: intMap, hasher: &hasher) + deepHashCoreTests(value: enumMap, hasher: &hasher) + deepHashCoreTests(value: objectMap, hasher: &hasher) + deepHashCoreTests(value: listMap, hasher: &hasher) + deepHashCoreTests(value: mapMap, hasher: &hasher) + deepHashCoreTests(value: recursiveClassMap, hasher: &hasher) } } @@ -655,10 +827,68 @@ struct AllNullableTypesWithoutRecursion: Hashable { static func == (lhs: AllNullableTypesWithoutRecursion, rhs: AllNullableTypesWithoutRecursion) -> Bool { - return deepEqualsCoreTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsCoreTests(lhs.aNullableBool, rhs.aNullableBool) + && deepEqualsCoreTests(lhs.aNullableInt, rhs.aNullableInt) + && deepEqualsCoreTests(lhs.aNullableInt64, rhs.aNullableInt64) + && deepEqualsCoreTests(lhs.aNullableDouble, rhs.aNullableDouble) + && deepEqualsCoreTests(lhs.aNullableByteArray, rhs.aNullableByteArray) + && deepEqualsCoreTests(lhs.aNullable4ByteArray, rhs.aNullable4ByteArray) + && deepEqualsCoreTests(lhs.aNullable8ByteArray, rhs.aNullable8ByteArray) + && deepEqualsCoreTests(lhs.aNullableFloatArray, rhs.aNullableFloatArray) + && deepEqualsCoreTests(lhs.aNullableEnum, rhs.aNullableEnum) + && deepEqualsCoreTests(lhs.anotherNullableEnum, rhs.anotherNullableEnum) + && deepEqualsCoreTests(lhs.aNullableString, rhs.aNullableString) + && deepEqualsCoreTests(lhs.aNullableObject, rhs.aNullableObject) + && deepEqualsCoreTests(lhs.list, rhs.list) + && deepEqualsCoreTests(lhs.stringList, rhs.stringList) + && deepEqualsCoreTests(lhs.intList, rhs.intList) + && deepEqualsCoreTests(lhs.doubleList, rhs.doubleList) + && deepEqualsCoreTests(lhs.boolList, rhs.boolList) + && deepEqualsCoreTests(lhs.enumList, rhs.enumList) + && deepEqualsCoreTests(lhs.objectList, rhs.objectList) + && deepEqualsCoreTests(lhs.listList, rhs.listList) + && deepEqualsCoreTests(lhs.mapList, rhs.mapList) && deepEqualsCoreTests(lhs.map, rhs.map) + && deepEqualsCoreTests(lhs.stringMap, rhs.stringMap) + && deepEqualsCoreTests(lhs.intMap, rhs.intMap) + && deepEqualsCoreTests(lhs.enumMap, rhs.enumMap) + && deepEqualsCoreTests(lhs.objectMap, rhs.objectMap) + && deepEqualsCoreTests(lhs.listMap, rhs.listMap) + && deepEqualsCoreTests(lhs.mapMap, rhs.mapMap) } + func hash(into hasher: inout Hasher) { - deepHashCoreTests(value: toList(), hasher: &hasher) + hasher.combine("AllNullableTypesWithoutRecursion") + deepHashCoreTests(value: aNullableBool, hasher: &hasher) + deepHashCoreTests(value: aNullableInt, hasher: &hasher) + deepHashCoreTests(value: aNullableInt64, hasher: &hasher) + deepHashCoreTests(value: aNullableDouble, hasher: &hasher) + deepHashCoreTests(value: aNullableByteArray, hasher: &hasher) + deepHashCoreTests(value: aNullable4ByteArray, hasher: &hasher) + deepHashCoreTests(value: aNullable8ByteArray, hasher: &hasher) + deepHashCoreTests(value: aNullableFloatArray, hasher: &hasher) + deepHashCoreTests(value: aNullableEnum, hasher: &hasher) + deepHashCoreTests(value: anotherNullableEnum, hasher: &hasher) + deepHashCoreTests(value: aNullableString, hasher: &hasher) + deepHashCoreTests(value: aNullableObject, hasher: &hasher) + deepHashCoreTests(value: list, hasher: &hasher) + deepHashCoreTests(value: stringList, hasher: &hasher) + deepHashCoreTests(value: intList, hasher: &hasher) + deepHashCoreTests(value: doubleList, hasher: &hasher) + deepHashCoreTests(value: boolList, hasher: &hasher) + deepHashCoreTests(value: enumList, hasher: &hasher) + deepHashCoreTests(value: objectList, hasher: &hasher) + deepHashCoreTests(value: listList, hasher: &hasher) + deepHashCoreTests(value: mapList, hasher: &hasher) + deepHashCoreTests(value: map, hasher: &hasher) + deepHashCoreTests(value: stringMap, hasher: &hasher) + deepHashCoreTests(value: intMap, hasher: &hasher) + deepHashCoreTests(value: enumMap, hasher: &hasher) + deepHashCoreTests(value: objectMap, hasher: &hasher) + deepHashCoreTests(value: listMap, hasher: &hasher) + deepHashCoreTests(value: mapMap, hasher: &hasher) } } @@ -712,10 +942,28 @@ struct AllClassesWrapper: Hashable { ] } static func == (lhs: AllClassesWrapper, rhs: AllClassesWrapper) -> Bool { - return deepEqualsCoreTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsCoreTests(lhs.allNullableTypes, rhs.allNullableTypes) + && deepEqualsCoreTests( + lhs.allNullableTypesWithoutRecursion, rhs.allNullableTypesWithoutRecursion) + && deepEqualsCoreTests(lhs.allTypes, rhs.allTypes) + && deepEqualsCoreTests(lhs.classList, rhs.classList) + && deepEqualsCoreTests(lhs.nullableClassList, rhs.nullableClassList) + && deepEqualsCoreTests(lhs.classMap, rhs.classMap) + && deepEqualsCoreTests(lhs.nullableClassMap, rhs.nullableClassMap) } + func hash(into hasher: inout Hasher) { - deepHashCoreTests(value: toList(), hasher: &hasher) + hasher.combine("AllClassesWrapper") + deepHashCoreTests(value: allNullableTypes, hasher: &hasher) + deepHashCoreTests(value: allNullableTypesWithoutRecursion, hasher: &hasher) + deepHashCoreTests(value: allTypes, hasher: &hasher) + deepHashCoreTests(value: classList, hasher: &hasher) + deepHashCoreTests(value: nullableClassList, hasher: &hasher) + deepHashCoreTests(value: classMap, hasher: &hasher) + deepHashCoreTests(value: nullableClassMap, hasher: &hasher) } } @@ -739,10 +987,15 @@ struct TestMessage: Hashable { ] } static func == (lhs: TestMessage, rhs: TestMessage) -> Bool { - return deepEqualsCoreTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsCoreTests(lhs.testList, rhs.testList) } + func hash(into hasher: inout Hasher) { - deepHashCoreTests(value: toList(), hasher: &hasher) + hasher.combine("TestMessage") + deepHashCoreTests(value: testList, hasher: &hasher) } } @@ -893,6 +1146,13 @@ protocol HostIntegrationCoreApi { func echoOptionalDefault(_ aDouble: Double) throws -> Double /// Returns passed in int. func echoRequired(_ anInt: Int64) throws -> Int64 + /// Returns the result of platform-side equality check. + func areAllNullableTypesEqual(a: AllNullableTypes, b: AllNullableTypes) throws -> Bool + /// Returns the platform-side hash code for the given object. + func getAllNullableTypesHash(value: AllNullableTypes) throws -> Int64 + /// Returns the platform-side hash code for the given object. + func getAllNullableTypesWithoutRecursionHash(value: AllNullableTypesWithoutRecursion) throws + -> Int64 /// Returns the passed object, to test serialization and deserialization. func echo(_ everything: AllNullableTypes?) throws -> AllNullableTypes? /// Returns the passed object, to test serialization and deserialization. @@ -1785,6 +2045,64 @@ class HostIntegrationCoreApiSetup { } else { echoRequiredIntChannel.setMessageHandler(nil) } + /// Returns the result of platform-side equality check. + let areAllNullableTypesEqualChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.areAllNullableTypesEqual\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + areAllNullableTypesEqualChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let aArg = args[0] as! AllNullableTypes + let bArg = args[1] as! AllNullableTypes + do { + let result = try api.areAllNullableTypesEqual(a: aArg, b: bArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + areAllNullableTypesEqualChannel.setMessageHandler(nil) + } + /// Returns the platform-side hash code for the given object. + let getAllNullableTypesHashChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesHash\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getAllNullableTypesHashChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let valueArg = args[0] as! AllNullableTypes + do { + let result = try api.getAllNullableTypesHash(value: valueArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getAllNullableTypesHashChannel.setMessageHandler(nil) + } + /// Returns the platform-side hash code for the given object. + let getAllNullableTypesWithoutRecursionHashChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi.getAllNullableTypesWithoutRecursionHash\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getAllNullableTypesWithoutRecursionHashChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let valueArg = args[0] as! AllNullableTypesWithoutRecursion + do { + let result = try api.getAllNullableTypesWithoutRecursionHash(value: valueArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getAllNullableTypesWithoutRecursionHashChannel.setMessageHandler(nil) + } /// Returns the passed object, to test serialization and deserialization. let echoAllNullableTypesChannel = FlutterBasicMessageChannel( name: diff --git a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/EventChannelTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/EventChannelTests.gen.swift index 6eeace16d903..da3e19626382 100644 --- a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/EventChannelTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/EventChannelTests.gen.swift @@ -42,6 +42,19 @@ private func nilOrValue(_ value: Any?) -> T? { return value as! T? } +private func doubleEqualsEventChannelTests(_ lhs: Double, _ rhs: Double) -> Bool { + return (lhs.isNaN && rhs.isNaN) || lhs == rhs +} + +private func doubleHashEventChannelTests(_ value: Double, _ hasher: inout Hasher) { + if value.isNaN { + hasher.combine(0x7FF8_0000_0000_0000) + } else { + // Normalize -0.0 to 0.0 + hasher.combine(value == 0 ? 0 : value) + } +} + func deepEqualsEventChannelTests(_ lhs: Any?, _ rhs: Any?) -> Bool { let cleanLhs = nilOrValue(lhs) as Any? let cleanRhs = nilOrValue(rhs) as Any? @@ -52,56 +65,90 @@ func deepEqualsEventChannelTests(_ lhs: Any?, _ rhs: Any?) -> Bool { case (nil, _), (_, nil): return false - case is (Void, Void): + case (let lhs as AnyObject, let rhs as AnyObject) where lhs === rhs: return true - case let (cleanLhsHashable, cleanRhsHashable) as (AnyHashable, AnyHashable): - return cleanLhsHashable == cleanRhsHashable + case is (Void, Void): + return true - case let (cleanLhsArray, cleanRhsArray) as ([Any?], [Any?]): - guard cleanLhsArray.count == cleanRhsArray.count else { return false } - for (index, element) in cleanLhsArray.enumerated() { - if !deepEqualsEventChannelTests(element, cleanRhsArray[index]) { + case (let lhsArray, let rhsArray) as ([Any?], [Any?]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !deepEqualsEventChannelTests(element, rhsArray[index]) { return false } } return true - case let (cleanLhsDictionary, cleanRhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): - guard cleanLhsDictionary.count == cleanRhsDictionary.count else { return false } - for (key, cleanLhsValue) in cleanLhsDictionary { - guard cleanRhsDictionary.index(forKey: key) != nil else { return false } - if !deepEqualsEventChannelTests(cleanLhsValue, cleanRhsDictionary[key]!) { + case (let lhsArray, let rhsArray) as ([Double], [Double]): + guard lhsArray.count == rhsArray.count else { return false } + for (index, element) in lhsArray.enumerated() { + if !doubleEqualsEventChannelTests(element, rhsArray[index]) { return false } } return true + case (let lhsDictionary, let rhsDictionary) as ([AnyHashable: Any?], [AnyHashable: Any?]): + guard lhsDictionary.count == rhsDictionary.count else { return false } + for (lhsKey, lhsValue) in lhsDictionary { + var found = false + for (rhsKey, rhsValue) in rhsDictionary { + if deepEqualsEventChannelTests(lhsKey, rhsKey) { + if deepEqualsEventChannelTests(lhsValue, rhsValue) { + found = true + break + } else { + return false + } + } + } + if !found { return false } + } + return true + + case (let lhs as Double, let rhs as Double): + return doubleEqualsEventChannelTests(lhs, rhs) + + case (let lhsHashable, let rhsHashable) as (AnyHashable, AnyHashable): + return lhsHashable == rhsHashable + default: - // Any other type shouldn't be able to be used with pigeon. File an issue if you find this to be untrue. return false } } func deepHashEventChannelTests(value: Any?, hasher: inout Hasher) { - if let valueList = value as? [AnyHashable] { - for item in valueList { deepHashEventChannelTests(value: item, hasher: &hasher) } - return - } - - if let valueDict = value as? [AnyHashable: AnyHashable] { - for key in valueDict.keys { - hasher.combine(key) - deepHashEventChannelTests(value: valueDict[key]!, hasher: &hasher) + let cleanValue = nilOrValue(value) as Any? + if let cleanValue = cleanValue { + if let doubleValue = cleanValue as? Double { + doubleHashEventChannelTests(doubleValue, &hasher) + } else if let valueList = cleanValue as? [Any?] { + for item in valueList { + deepHashEventChannelTests(value: item, hasher: &hasher) + } + } else if let valueList = cleanValue as? [Double] { + for item in valueList { + doubleHashEventChannelTests(item, &hasher) + } + } else if let valueDict = cleanValue as? [AnyHashable: Any?] { + var result = 0 + for (key, value) in valueDict { + var entryKeyHasher = Hasher() + deepHashEventChannelTests(value: key, hasher: &entryKeyHasher) + var entryValueHasher = Hasher() + deepHashEventChannelTests(value: value, hasher: &entryValueHasher) + result = result &+ ((entryKeyHasher.finalize() &* 31) ^ entryValueHasher.finalize()) + } + hasher.combine(result) + } else if let hashableValue = cleanValue as? AnyHashable { + hasher.combine(hashableValue) + } else { + hasher.combine(String(describing: cleanValue)) } - return - } - - if let hashableValue = value as? AnyHashable { - hasher.combine(hashableValue.hashValue) + } else { + hasher.combine(0) } - - return hasher.combine(String(describing: value)) } enum EventEnum: Int { @@ -321,13 +368,78 @@ class EventAllNullableTypes: Hashable { ] } static func == (lhs: EventAllNullableTypes, rhs: EventAllNullableTypes) -> Bool { + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } if lhs === rhs { return true } - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + return deepEqualsEventChannelTests(lhs.aNullableBool, rhs.aNullableBool) + && deepEqualsEventChannelTests(lhs.aNullableInt, rhs.aNullableInt) + && deepEqualsEventChannelTests(lhs.aNullableInt64, rhs.aNullableInt64) + && deepEqualsEventChannelTests(lhs.aNullableDouble, rhs.aNullableDouble) + && deepEqualsEventChannelTests(lhs.aNullableByteArray, rhs.aNullableByteArray) + && deepEqualsEventChannelTests(lhs.aNullable4ByteArray, rhs.aNullable4ByteArray) + && deepEqualsEventChannelTests(lhs.aNullable8ByteArray, rhs.aNullable8ByteArray) + && deepEqualsEventChannelTests(lhs.aNullableFloatArray, rhs.aNullableFloatArray) + && deepEqualsEventChannelTests(lhs.aNullableEnum, rhs.aNullableEnum) + && deepEqualsEventChannelTests(lhs.anotherNullableEnum, rhs.anotherNullableEnum) + && deepEqualsEventChannelTests(lhs.aNullableString, rhs.aNullableString) + && deepEqualsEventChannelTests(lhs.aNullableObject, rhs.aNullableObject) + && deepEqualsEventChannelTests(lhs.allNullableTypes, rhs.allNullableTypes) + && deepEqualsEventChannelTests(lhs.list, rhs.list) + && deepEqualsEventChannelTests(lhs.stringList, rhs.stringList) + && deepEqualsEventChannelTests(lhs.intList, rhs.intList) + && deepEqualsEventChannelTests(lhs.doubleList, rhs.doubleList) + && deepEqualsEventChannelTests(lhs.boolList, rhs.boolList) + && deepEqualsEventChannelTests(lhs.enumList, rhs.enumList) + && deepEqualsEventChannelTests(lhs.objectList, rhs.objectList) + && deepEqualsEventChannelTests(lhs.listList, rhs.listList) + && deepEqualsEventChannelTests(lhs.mapList, rhs.mapList) + && deepEqualsEventChannelTests(lhs.recursiveClassList, rhs.recursiveClassList) + && deepEqualsEventChannelTests(lhs.map, rhs.map) + && deepEqualsEventChannelTests(lhs.stringMap, rhs.stringMap) + && deepEqualsEventChannelTests(lhs.intMap, rhs.intMap) + && deepEqualsEventChannelTests(lhs.enumMap, rhs.enumMap) + && deepEqualsEventChannelTests(lhs.objectMap, rhs.objectMap) + && deepEqualsEventChannelTests(lhs.listMap, rhs.listMap) + && deepEqualsEventChannelTests(lhs.mapMap, rhs.mapMap) + && deepEqualsEventChannelTests(lhs.recursiveClassMap, rhs.recursiveClassMap) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("EventAllNullableTypes") + deepHashEventChannelTests(value: aNullableBool, hasher: &hasher) + deepHashEventChannelTests(value: aNullableInt, hasher: &hasher) + deepHashEventChannelTests(value: aNullableInt64, hasher: &hasher) + deepHashEventChannelTests(value: aNullableDouble, hasher: &hasher) + deepHashEventChannelTests(value: aNullableByteArray, hasher: &hasher) + deepHashEventChannelTests(value: aNullable4ByteArray, hasher: &hasher) + deepHashEventChannelTests(value: aNullable8ByteArray, hasher: &hasher) + deepHashEventChannelTests(value: aNullableFloatArray, hasher: &hasher) + deepHashEventChannelTests(value: aNullableEnum, hasher: &hasher) + deepHashEventChannelTests(value: anotherNullableEnum, hasher: &hasher) + deepHashEventChannelTests(value: aNullableString, hasher: &hasher) + deepHashEventChannelTests(value: aNullableObject, hasher: &hasher) + deepHashEventChannelTests(value: allNullableTypes, hasher: &hasher) + deepHashEventChannelTests(value: list, hasher: &hasher) + deepHashEventChannelTests(value: stringList, hasher: &hasher) + deepHashEventChannelTests(value: intList, hasher: &hasher) + deepHashEventChannelTests(value: doubleList, hasher: &hasher) + deepHashEventChannelTests(value: boolList, hasher: &hasher) + deepHashEventChannelTests(value: enumList, hasher: &hasher) + deepHashEventChannelTests(value: objectList, hasher: &hasher) + deepHashEventChannelTests(value: listList, hasher: &hasher) + deepHashEventChannelTests(value: mapList, hasher: &hasher) + deepHashEventChannelTests(value: recursiveClassList, hasher: &hasher) + deepHashEventChannelTests(value: map, hasher: &hasher) + deepHashEventChannelTests(value: stringMap, hasher: &hasher) + deepHashEventChannelTests(value: intMap, hasher: &hasher) + deepHashEventChannelTests(value: enumMap, hasher: &hasher) + deepHashEventChannelTests(value: objectMap, hasher: &hasher) + deepHashEventChannelTests(value: listMap, hasher: &hasher) + deepHashEventChannelTests(value: mapMap, hasher: &hasher) + deepHashEventChannelTests(value: recursiveClassMap, hasher: &hasher) } } @@ -355,10 +467,15 @@ struct IntEvent: PlatformEvent { ] } static func == (lhs: IntEvent, rhs: IntEvent) -> Bool { - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelTests(lhs.value, rhs.value) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("IntEvent") + deepHashEventChannelTests(value: value, hasher: &hasher) } } @@ -380,10 +497,15 @@ struct StringEvent: PlatformEvent { ] } static func == (lhs: StringEvent, rhs: StringEvent) -> Bool { - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelTests(lhs.value, rhs.value) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("StringEvent") + deepHashEventChannelTests(value: value, hasher: &hasher) } } @@ -405,10 +527,15 @@ struct BoolEvent: PlatformEvent { ] } static func == (lhs: BoolEvent, rhs: BoolEvent) -> Bool { - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelTests(lhs.value, rhs.value) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("BoolEvent") + deepHashEventChannelTests(value: value, hasher: &hasher) } } @@ -430,10 +557,15 @@ struct DoubleEvent: PlatformEvent { ] } static func == (lhs: DoubleEvent, rhs: DoubleEvent) -> Bool { - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelTests(lhs.value, rhs.value) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("DoubleEvent") + deepHashEventChannelTests(value: value, hasher: &hasher) } } @@ -455,10 +587,15 @@ struct ObjectsEvent: PlatformEvent { ] } static func == (lhs: ObjectsEvent, rhs: ObjectsEvent) -> Bool { - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelTests(lhs.value, rhs.value) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("ObjectsEvent") + deepHashEventChannelTests(value: value, hasher: &hasher) } } @@ -480,10 +617,15 @@ struct EnumEvent: PlatformEvent { ] } static func == (lhs: EnumEvent, rhs: EnumEvent) -> Bool { - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelTests(lhs.value, rhs.value) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("EnumEvent") + deepHashEventChannelTests(value: value, hasher: &hasher) } } @@ -505,10 +647,15 @@ struct ClassEvent: PlatformEvent { ] } static func == (lhs: ClassEvent, rhs: ClassEvent) -> Bool { - return deepEqualsEventChannelTests(lhs.toList(), rhs.toList()) + if Swift.type(of: lhs) != Swift.type(of: rhs) { + return false + } + return deepEqualsEventChannelTests(lhs.value, rhs.value) } + func hash(into hasher: inout Hasher) { - deepHashEventChannelTests(value: toList(), hasher: &hasher) + hasher.combine("ClassEvent") + deepHashEventChannelTests(value: value, hasher: &hasher) } } diff --git a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/ProxyApiTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/ProxyApiTests.gen.swift index 3e392185d448..5eb4b81803ad 100644 --- a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/ProxyApiTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/ProxyApiTests.gen.swift @@ -54,7 +54,7 @@ private func wrapError(_ error: Any) -> [Any?] { } return [ "\(error)", - "\(type(of: error))", + "\(Swift.type(of: error))", "Stacktrace: \(Thread.callStackSymbols)", ] } diff --git a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/TestPlugin.swift b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/TestPlugin.swift index fec488571752..89d25d32f58e 100644 --- a/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/TestPlugin.swift +++ b/packages/pigeon/platform_tests/test_plugin/darwin/test_plugin/Sources/test_plugin/TestPlugin.swift @@ -70,6 +70,22 @@ public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { func echo(_ everything: AllNullableTypes?) -> AllNullableTypes? { return everything } + + func areAllNullableTypesEqual(a: AllNullableTypes, b: AllNullableTypes) -> Bool { + return a == b + } + + func getAllNullableTypesHash(value: AllNullableTypes) -> Int64 { + var hasher = Hasher() + value.hash(into: &hasher) + return Int64(hasher.finalize()) + } + + func getAllNullableTypesWithoutRecursionHash(value: AllNullableTypesWithoutRecursion) -> Int64 { + var hasher = Hasher() + value.hash(into: &hasher) + return Int64(hasher.finalize()) + } func echo(_ everything: AllNullableTypesWithoutRecursion?) throws -> AllNullableTypesWithoutRecursion? { diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift index bd9ab4ae67e2..e855f673fd29 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift @@ -187,4 +187,141 @@ struct AllDatatypesTests { withMapInList == withMatchingMapInList, "Instances with equivalent nested maps in lists should be equal") } + + @Test + func equalityWithNaN() throws { + let list = [Double.nan] + let map: [Int64: Double?] = [1: Double.nan] + let a = AllNullableTypes( + aNullableDouble: Double.nan, + doubleList: list, + recursiveClassList: [AllNullableTypes(aNullableDouble: Double.nan)], + map: map + ) + let b = AllNullableTypes( + aNullableDouble: Double.nan, + doubleList: list, + recursiveClassList: [AllNullableTypes(aNullableDouble: Double.nan)], + map: map + ) + #expect(a == b) + } + + @Test + func hashWithNaN() throws { + let a = AllNullableTypes(aNullableDouble: Double.nan) + let b = AllNullableTypes(aNullableDouble: Double.nan) + + var hasherA = Hasher() + a.hash(into: &hasherA) + let hashA = hasherA.finalize() + + var hasherB = Hasher() + b.hash(into: &hasherB) + let hashB = hasherB.finalize() + + #expect(hashA == hashB) + } + + @Test + func structEquality() { + let a = AllNullableTypesWithoutRecursion(aNullableInt: 1) + let b = AllNullableTypesWithoutRecursion(aNullableInt: 1) + let c = AllNullableTypesWithoutRecursion(aNullableInt: 2) + #expect(a == b) + #expect(a != c) + } + + @Test + func crossTypeEquality() { + let a = AllNullableTypes(aNullableInt: 1) + let b = AllNullableTypesWithoutRecursion(aNullableInt: 1) + // They are different types, so they shouldn't be equal even if we cast to Any + let anyA: Any = a + let anyB: Any = b + #expect(!(anyA as? AllNullableTypesWithoutRecursion == b)) + #expect(!(anyB as? AllNullableTypes == a)) + } + + @Test + func typedDataEquality() { + let data1 = "1234".data(using: .utf8)! + let data2 = "1234".data(using: .utf8)! + // Ensure they are different instances in memory if possible, + // though Data in Swift is a value type. + // FlutterStandardTypedData is a class. + let a = AllNullableTypes(aNullableByteArray: FlutterStandardTypedData(bytes: data1)) + let c = a + c.aNullableByteArray = FlutterStandardTypedData(bytes: data2) + + #expect(a == c) + } + + @Test + func signedZeroEquality() { + let a = AllNullableTypes(aNullableDouble: 0.0) + let b = AllNullableTypes(aNullableDouble: -0.0) + #expect(a == b) + + var hasherA = Hasher() + a.hash(into: &hasherA) + let hashA = hasherA.finalize() + + var hasherB = Hasher() + b.hash(into: &hasherB) + let hashB = hasherB.finalize() + + #expect(hashA == hashB) + } + + @Test + func nestedZeroListEquality() { + let a = AllNullableTypes(doubleList: [0.0]) + let b = AllNullableTypes(doubleList: [-0.0]) + #expect(a == b) + + var hasherA = Hasher() + a.hash(into: &hasherA) + let hashA = hasherA.finalize() + + var hasherB = Hasher() + b.hash(into: &hasherB) + let hashB = hasherB.finalize() + + #expect(hashA == hashB) + } + + @Test + func zeroMapKeyEquality() { + let a = AllNullableTypes(map: [0.0: "a"]) + let b = AllNullableTypes(map: [-0.0: "a"]) + #expect(a == b) + + var hasherA = Hasher() + a.hash(into: &hasherA) + let hashA = hasherA.finalize() + + var hasherB = Hasher() + b.hash(into: &hasherB) + let hashB = hasherB.finalize() + + #expect(hashA == hashB) + } + + @Test + func zeroMapValueEquality() { + let a = AllNullableTypes(map: ["a": 0.0]) + let b = AllNullableTypes(map: ["a": -0.0]) + #expect(a == b) + + var hasherA = Hasher() + a.hash(into: &hasherA) + let hashA = hasherA.finalize() + + var hasherB = Hasher() + b.hash(into: &hasherB) + let hashB = hasherB.finalize() + + #expect(hashA == hashB) + } } diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/MultipleArityTests.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/MultipleArityTests.swift index dec835076052..7a87a0052231 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/MultipleArityTests.swift +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/MultipleArityTests.swift @@ -15,7 +15,7 @@ class MockMultipleArityHostApi: MultipleArityHostApi { @MainActor struct MultipleArityTests { - var codec = FlutterStandardMessageCodec.sharedInstance() + let codec = FlutterStandardMessageCodec.sharedInstance() @Test func simpleHost() async throws { diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NonNullFieldsTest.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NonNullFieldsTest.swift index 927117fa0874..bb06e1bbf2b2 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NonNullFieldsTest.swift +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NonNullFieldsTest.swift @@ -12,4 +12,15 @@ struct NonNullFieldsTests { let request = NonNullFieldSearchRequest(query: "hello") #expect(request.query == "hello") } + + @Test + func testEquality() { + let request1 = NonNullFieldSearchRequest(query: "hello") + let request2 = NonNullFieldSearchRequest(query: "hello") + let request3 = NonNullFieldSearchRequest(query: "world") + + #expect(request1 == request2) + #expect(request1 != request3) + #expect(request1.hashValue == request2.hashValue) + } } diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NullableReturnsTests.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NullableReturnsTests.swift index 6d12dbae93ca..e2925038f6b9 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NullableReturnsTests.swift +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/NullableReturnsTests.swift @@ -20,7 +20,7 @@ class MockNullableArgHostApi: NullableArgHostApi { @MainActor struct NullableReturnsTests { - var codec = FlutterStandardMessageCodec.sharedInstance() + let codec = FlutterStandardMessageCodec.sharedInstance() @Test func nullableParameterWithFlutterApi() async throws { diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/PrimitiveTests.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/PrimitiveTests.swift index 62b300b9ab5b..0a3228e86eaf 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/PrimitiveTests.swift +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/PrimitiveTests.swift @@ -21,7 +21,7 @@ class MockPrimitiveHostApi: PrimitiveHostApi { @MainActor struct PrimitiveTests { - var codec = FlutterStandardMessageCodec.sharedInstance() + let codec = FlutterStandardMessageCodec.sharedInstance() @Test func intPrimitiveHost() async throws { diff --git a/packages/pigeon/platform_tests/test_plugin/linux/CMakeLists.txt b/packages/pigeon/platform_tests/test_plugin/linux/CMakeLists.txt index 3d2845f8d3e4..c2cdee101723 100644 --- a/packages/pigeon/platform_tests/test_plugin/linux/CMakeLists.txt +++ b/packages/pigeon/platform_tests/test_plugin/linux/CMakeLists.txt @@ -100,6 +100,7 @@ add_executable(${TEST_RUNNER} test/nullable_returns_test.cc test/null_fields_test.cc test/primitive_test.cc + test/equality_test.cc # Test utilities. test/utils/fake_host_messenger.cc test/utils/fake_host_messenger.h diff --git a/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.cc b/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.cc index ae3763bf5e0e..023cd1ed85db 100644 --- a/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.cc +++ b/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.cc @@ -7,6 +7,197 @@ #include "core_tests.gen.h" +#include + +#include +static guint G_GNUC_UNUSED flpigeon_hash_double(double v) { + if (std::isnan(v)) { + return static_cast(0x7FF80000); + } + if (v == 0.0) { + v = 0.0; + } + union { + double d; + uint64_t u; + } u; + u.d = v; + return static_cast(u.u ^ (u.u >> 32)); +} +static gboolean G_GNUC_UNUSED flpigeon_equals_double(double a, double b) { + return (a == b) || (std::isnan(a) && std::isnan(b)); +} +static gboolean G_GNUC_UNUSED flpigeon_deep_equals(FlValue* a, FlValue* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if (fl_value_get_type(a) != fl_value_get_type(b)) { + return FALSE; + } + switch (fl_value_get_type(a)) { + case FL_VALUE_TYPE_NULL: + return TRUE; + case FL_VALUE_TYPE_BOOL: + return fl_value_get_bool(a) == fl_value_get_bool(b); + case FL_VALUE_TYPE_INT: + return fl_value_get_int(a) == fl_value_get_int(b); + case FL_VALUE_TYPE_FLOAT: { + return flpigeon_equals_double(fl_value_get_float(a), + fl_value_get_float(b)); + } + case FL_VALUE_TYPE_STRING: + return g_strcmp0(fl_value_get_string(a), fl_value_get_string(b)) == 0; + case FL_VALUE_TYPE_UINT8_LIST: + return fl_value_get_length(a) == fl_value_get_length(b) && + memcmp(fl_value_get_uint8_list(a), fl_value_get_uint8_list(b), + fl_value_get_length(a)) == 0; + case FL_VALUE_TYPE_INT32_LIST: + return fl_value_get_length(a) == fl_value_get_length(b) && + memcmp(fl_value_get_int32_list(a), fl_value_get_int32_list(b), + fl_value_get_length(a) * sizeof(int32_t)) == 0; + case FL_VALUE_TYPE_INT64_LIST: + return fl_value_get_length(a) == fl_value_get_length(b) && + memcmp(fl_value_get_int64_list(a), fl_value_get_int64_list(b), + fl_value_get_length(a) * sizeof(int64_t)) == 0; + case FL_VALUE_TYPE_FLOAT_LIST: { + size_t len = fl_value_get_length(a); + if (len != fl_value_get_length(b)) { + return FALSE; + } + const double* a_data = fl_value_get_float_list(a); + const double* b_data = fl_value_get_float_list(b); + for (size_t i = 0; i < len; i++) { + if (!flpigeon_equals_double(a_data[i], b_data[i])) { + return FALSE; + } + } + return TRUE; + } + case FL_VALUE_TYPE_LIST: { + size_t len = fl_value_get_length(a); + if (len != fl_value_get_length(b)) { + return FALSE; + } + for (size_t i = 0; i < len; i++) { + if (!flpigeon_deep_equals(fl_value_get_list_value(a, i), + fl_value_get_list_value(b, i))) { + return FALSE; + } + } + return TRUE; + } + case FL_VALUE_TYPE_MAP: { + size_t len = fl_value_get_length(a); + if (len != fl_value_get_length(b)) { + return FALSE; + } + for (size_t i = 0; i < len; i++) { + FlValue* key = fl_value_get_map_key(a, i); + FlValue* val = fl_value_get_map_value(a, i); + gboolean found = FALSE; + for (size_t j = 0; j < len; j++) { + FlValue* b_key = fl_value_get_map_key(b, j); + if (flpigeon_deep_equals(key, b_key)) { + FlValue* b_val = fl_value_get_map_value(b, j); + if (flpigeon_deep_equals(val, b_val)) { + found = TRUE; + break; + } else { + return FALSE; + } + } + } + if (!found) { + return FALSE; + } + } + return TRUE; + } + default: + return FALSE; + } + return FALSE; +} +static guint G_GNUC_UNUSED flpigeon_deep_hash(FlValue* value) { + if (value == nullptr) { + return 0; + } + switch (fl_value_get_type(value)) { + case FL_VALUE_TYPE_NULL: + return 0; + case FL_VALUE_TYPE_BOOL: + return fl_value_get_bool(value) ? 1231 : 1237; + case FL_VALUE_TYPE_INT: { + int64_t v = fl_value_get_int(value); + return static_cast(v ^ (v >> 32)); + } + case FL_VALUE_TYPE_FLOAT: + return flpigeon_hash_double(fl_value_get_float(value)); + case FL_VALUE_TYPE_STRING: + return g_str_hash(fl_value_get_string(value)); + case FL_VALUE_TYPE_UINT8_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const uint8_t* data = fl_value_get_uint8_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + data[i]; + } + return result; + } + case FL_VALUE_TYPE_INT32_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const int32_t* data = fl_value_get_int32_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + return result; + } + case FL_VALUE_TYPE_INT64_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const int64_t* data = fl_value_get_int64_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i] ^ (data[i] >> 32)); + } + return result; + } + case FL_VALUE_TYPE_FLOAT_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + const double* data = fl_value_get_float_list(value); + for (size_t i = 0; i < len; i++) { + result = result * 31 + flpigeon_hash_double(data[i]); + } + return result; + } + case FL_VALUE_TYPE_LIST: { + guint result = 1; + size_t len = fl_value_get_length(value); + for (size_t i = 0; i < len; i++) { + result = + result * 31 + flpigeon_deep_hash(fl_value_get_list_value(value, i)); + } + return result; + } + case FL_VALUE_TYPE_MAP: { + guint result = 0; + size_t len = fl_value_get_length(value); + for (size_t i = 0; i < len; i++) { + result += ((flpigeon_deep_hash(fl_value_get_map_key(value, i)) * 31) ^ + flpigeon_deep_hash(fl_value_get_map_value(value, i))); + } + return result; + } + default: + return static_cast(fl_value_get_type(value)); + } + return 0; +} + struct _CoreTestsPigeonTestUnusedClass { GObject parent_instance; @@ -69,6 +260,28 @@ core_tests_pigeon_test_unused_class_new_from_list(FlValue* values) { return core_tests_pigeon_test_unused_class_new(a_field); } +gboolean core_tests_pigeon_test_unused_class_equals( + CoreTestsPigeonTestUnusedClass* a, CoreTestsPigeonTestUnusedClass* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if (!flpigeon_deep_equals(a->a_field, b->a_field)) { + return FALSE; + } + return TRUE; +} + +guint core_tests_pigeon_test_unused_class_hash( + CoreTestsPigeonTestUnusedClass* self) { + g_return_val_if_fail(CORE_TESTS_PIGEON_TEST_IS_UNUSED_CLASS(self), 0); + guint result = 0; + result = result * 31 + flpigeon_deep_hash(self->a_field); + return result; +} + struct _CoreTestsPigeonTestAllTypes { GObject parent_instance; @@ -497,6 +710,205 @@ core_tests_pigeon_test_all_types_new_from_list(FlValue* values) { object_map, list_map, map_map); } +gboolean core_tests_pigeon_test_all_types_equals( + CoreTestsPigeonTestAllTypes* a, CoreTestsPigeonTestAllTypes* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if (a->a_bool != b->a_bool) { + return FALSE; + } + if (a->an_int != b->an_int) { + return FALSE; + } + if (a->an_int64 != b->an_int64) { + return FALSE; + } + if (!flpigeon_equals_double(a->a_double, b->a_double)) { + return FALSE; + } + if (a->a_byte_array != b->a_byte_array) { + if (a->a_byte_array == nullptr || b->a_byte_array == nullptr) { + return FALSE; + } + if (a->a_byte_array_length != b->a_byte_array_length) { + return FALSE; + } + if (memcmp(a->a_byte_array, b->a_byte_array, + a->a_byte_array_length * sizeof(uint8_t)) != 0) { + return FALSE; + } + } + if (a->a4_byte_array != b->a4_byte_array) { + if (a->a4_byte_array == nullptr || b->a4_byte_array == nullptr) { + return FALSE; + } + if (a->a4_byte_array_length != b->a4_byte_array_length) { + return FALSE; + } + if (memcmp(a->a4_byte_array, b->a4_byte_array, + a->a4_byte_array_length * sizeof(int32_t)) != 0) { + return FALSE; + } + } + if (a->a8_byte_array != b->a8_byte_array) { + if (a->a8_byte_array == nullptr || b->a8_byte_array == nullptr) { + return FALSE; + } + if (a->a8_byte_array_length != b->a8_byte_array_length) { + return FALSE; + } + if (memcmp(a->a8_byte_array, b->a8_byte_array, + a->a8_byte_array_length * sizeof(int64_t)) != 0) { + return FALSE; + } + } + if (a->a_float_array != b->a_float_array) { + if (a->a_float_array == nullptr || b->a_float_array == nullptr) { + return FALSE; + } + if (a->a_float_array_length != b->a_float_array_length) { + return FALSE; + } + for (size_t i = 0; i < a->a_float_array_length; i++) { + if (!flpigeon_equals_double(a->a_float_array[i], b->a_float_array[i])) { + return FALSE; + } + } + } + if (a->an_enum != b->an_enum) { + return FALSE; + } + if (a->another_enum != b->another_enum) { + return FALSE; + } + if (g_strcmp0(a->a_string, b->a_string) != 0) { + return FALSE; + } + if (!flpigeon_deep_equals(a->an_object, b->an_object)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list, b->list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->string_list, b->string_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->int_list, b->int_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->double_list, b->double_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->bool_list, b->bool_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->enum_list, b->enum_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->object_list, b->object_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list_list, b->list_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map_list, b->map_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map, b->map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->string_map, b->string_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->int_map, b->int_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->enum_map, b->enum_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->object_map, b->object_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list_map, b->list_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map_map, b->map_map)) { + return FALSE; + } + return TRUE; +} + +guint core_tests_pigeon_test_all_types_hash(CoreTestsPigeonTestAllTypes* self) { + g_return_val_if_fail(CORE_TESTS_PIGEON_TEST_IS_ALL_TYPES(self), 0); + guint result = 0; + result = result * 31 + static_cast(self->a_bool); + result = result * 31 + static_cast(self->an_int); + result = result * 31 + static_cast(self->an_int64); + result = result * 31 + flpigeon_hash_double(self->a_double); + { + size_t len = self->a_byte_array_length; + const uint8_t* data = self->a_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + } + } + { + size_t len = self->a4_byte_array_length; + const int32_t* data = self->a4_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + } + } + { + size_t len = self->a8_byte_array_length; + const int64_t* data = self->a8_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i] ^ (data[i] >> 32)); + } + } + } + { + size_t len = self->a_float_array_length; + const double* data = self->a_float_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + flpigeon_hash_double(data[i]); + } + } + } + result = result * 31 + static_cast(self->an_enum); + result = result * 31 + static_cast(self->another_enum); + result = result * 31 + + (self->a_string != nullptr ? g_str_hash(self->a_string) : 0); + result = result * 31 + flpigeon_deep_hash(self->an_object); + result = result * 31 + flpigeon_deep_hash(self->list); + result = result * 31 + flpigeon_deep_hash(self->string_list); + result = result * 31 + flpigeon_deep_hash(self->int_list); + result = result * 31 + flpigeon_deep_hash(self->double_list); + result = result * 31 + flpigeon_deep_hash(self->bool_list); + result = result * 31 + flpigeon_deep_hash(self->enum_list); + result = result * 31 + flpigeon_deep_hash(self->object_list); + result = result * 31 + flpigeon_deep_hash(self->list_list); + result = result * 31 + flpigeon_deep_hash(self->map_list); + result = result * 31 + flpigeon_deep_hash(self->map); + result = result * 31 + flpigeon_deep_hash(self->string_map); + result = result * 31 + flpigeon_deep_hash(self->int_map); + result = result * 31 + flpigeon_deep_hash(self->enum_map); + result = result * 31 + flpigeon_deep_hash(self->object_map); + result = result * 31 + flpigeon_deep_hash(self->list_map); + result = result * 31 + flpigeon_deep_hash(self->map_map); + return result; +} + struct _CoreTestsPigeonTestAllNullableTypes { GObject parent_instance; @@ -1331,6 +1743,264 @@ core_tests_pigeon_test_all_nullable_types_new_from_list(FlValue* values) { recursive_class_map); } +gboolean core_tests_pigeon_test_all_nullable_types_equals( + CoreTestsPigeonTestAllNullableTypes* a, + CoreTestsPigeonTestAllNullableTypes* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if ((a->a_nullable_bool == nullptr) != (b->a_nullable_bool == nullptr)) { + return FALSE; + } + if (a->a_nullable_bool != nullptr && + *a->a_nullable_bool != *b->a_nullable_bool) { + return FALSE; + } + if ((a->a_nullable_int == nullptr) != (b->a_nullable_int == nullptr)) { + return FALSE; + } + if (a->a_nullable_int != nullptr && + *a->a_nullable_int != *b->a_nullable_int) { + return FALSE; + } + if ((a->a_nullable_int64 == nullptr) != (b->a_nullable_int64 == nullptr)) { + return FALSE; + } + if (a->a_nullable_int64 != nullptr && + *a->a_nullable_int64 != *b->a_nullable_int64) { + return FALSE; + } + if ((a->a_nullable_double == nullptr) != (b->a_nullable_double == nullptr)) { + return FALSE; + } + if (a->a_nullable_double != nullptr && + !flpigeon_equals_double(*a->a_nullable_double, *b->a_nullable_double)) { + return FALSE; + } + if (a->a_nullable_byte_array != b->a_nullable_byte_array) { + if (a->a_nullable_byte_array == nullptr || + b->a_nullable_byte_array == nullptr) { + return FALSE; + } + if (a->a_nullable_byte_array_length != b->a_nullable_byte_array_length) { + return FALSE; + } + if (memcmp(a->a_nullable_byte_array, b->a_nullable_byte_array, + a->a_nullable_byte_array_length * sizeof(uint8_t)) != 0) { + return FALSE; + } + } + if (a->a_nullable4_byte_array != b->a_nullable4_byte_array) { + if (a->a_nullable4_byte_array == nullptr || + b->a_nullable4_byte_array == nullptr) { + return FALSE; + } + if (a->a_nullable4_byte_array_length != b->a_nullable4_byte_array_length) { + return FALSE; + } + if (memcmp(a->a_nullable4_byte_array, b->a_nullable4_byte_array, + a->a_nullable4_byte_array_length * sizeof(int32_t)) != 0) { + return FALSE; + } + } + if (a->a_nullable8_byte_array != b->a_nullable8_byte_array) { + if (a->a_nullable8_byte_array == nullptr || + b->a_nullable8_byte_array == nullptr) { + return FALSE; + } + if (a->a_nullable8_byte_array_length != b->a_nullable8_byte_array_length) { + return FALSE; + } + if (memcmp(a->a_nullable8_byte_array, b->a_nullable8_byte_array, + a->a_nullable8_byte_array_length * sizeof(int64_t)) != 0) { + return FALSE; + } + } + if (a->a_nullable_float_array != b->a_nullable_float_array) { + if (a->a_nullable_float_array == nullptr || + b->a_nullable_float_array == nullptr) { + return FALSE; + } + if (a->a_nullable_float_array_length != b->a_nullable_float_array_length) { + return FALSE; + } + for (size_t i = 0; i < a->a_nullable_float_array_length; i++) { + if (!flpigeon_equals_double(a->a_nullable_float_array[i], + b->a_nullable_float_array[i])) { + return FALSE; + } + } + } + if ((a->a_nullable_enum == nullptr) != (b->a_nullable_enum == nullptr)) { + return FALSE; + } + if (a->a_nullable_enum != nullptr && + *a->a_nullable_enum != *b->a_nullable_enum) { + return FALSE; + } + if ((a->another_nullable_enum == nullptr) != + (b->another_nullable_enum == nullptr)) { + return FALSE; + } + if (a->another_nullable_enum != nullptr && + *a->another_nullable_enum != *b->another_nullable_enum) { + return FALSE; + } + if (g_strcmp0(a->a_nullable_string, b->a_nullable_string) != 0) { + return FALSE; + } + if (!flpigeon_deep_equals(a->a_nullable_object, b->a_nullable_object)) { + return FALSE; + } + if (!core_tests_pigeon_test_all_nullable_types_equals( + a->all_nullable_types, b->all_nullable_types)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list, b->list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->string_list, b->string_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->int_list, b->int_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->double_list, b->double_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->bool_list, b->bool_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->enum_list, b->enum_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->object_list, b->object_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list_list, b->list_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map_list, b->map_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->recursive_class_list, b->recursive_class_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map, b->map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->string_map, b->string_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->int_map, b->int_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->enum_map, b->enum_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->object_map, b->object_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list_map, b->list_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map_map, b->map_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->recursive_class_map, b->recursive_class_map)) { + return FALSE; + } + return TRUE; +} + +guint core_tests_pigeon_test_all_nullable_types_hash( + CoreTestsPigeonTestAllNullableTypes* self) { + g_return_val_if_fail(CORE_TESTS_PIGEON_TEST_IS_ALL_NULLABLE_TYPES(self), 0); + guint result = 0; + result = result * 31 + (self->a_nullable_bool != nullptr + ? static_cast(*self->a_nullable_bool) + : 0); + result = result * 31 + (self->a_nullable_int != nullptr + ? static_cast(*self->a_nullable_int) + : 0); + result = result * 31 + (self->a_nullable_int64 != nullptr + ? static_cast(*self->a_nullable_int64) + : 0); + result = result * 31 + (self->a_nullable_double != nullptr + ? flpigeon_hash_double(*self->a_nullable_double) + : 0); + { + size_t len = self->a_nullable_byte_array_length; + const uint8_t* data = self->a_nullable_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + } + } + { + size_t len = self->a_nullable4_byte_array_length; + const int32_t* data = self->a_nullable4_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + } + } + { + size_t len = self->a_nullable8_byte_array_length; + const int64_t* data = self->a_nullable8_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i] ^ (data[i] >> 32)); + } + } + } + { + size_t len = self->a_nullable_float_array_length; + const double* data = self->a_nullable_float_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + flpigeon_hash_double(data[i]); + } + } + } + result = result * 31 + (self->a_nullable_enum != nullptr + ? static_cast(*self->a_nullable_enum) + : 0); + result = result * 31 + (self->another_nullable_enum != nullptr + ? static_cast(*self->another_nullable_enum) + : 0); + result = result * 31 + (self->a_nullable_string != nullptr + ? g_str_hash(self->a_nullable_string) + : 0); + result = result * 31 + flpigeon_deep_hash(self->a_nullable_object); + result = result * 31 + core_tests_pigeon_test_all_nullable_types_hash( + self->all_nullable_types); + result = result * 31 + flpigeon_deep_hash(self->list); + result = result * 31 + flpigeon_deep_hash(self->string_list); + result = result * 31 + flpigeon_deep_hash(self->int_list); + result = result * 31 + flpigeon_deep_hash(self->double_list); + result = result * 31 + flpigeon_deep_hash(self->bool_list); + result = result * 31 + flpigeon_deep_hash(self->enum_list); + result = result * 31 + flpigeon_deep_hash(self->object_list); + result = result * 31 + flpigeon_deep_hash(self->list_list); + result = result * 31 + flpigeon_deep_hash(self->map_list); + result = result * 31 + flpigeon_deep_hash(self->recursive_class_list); + result = result * 31 + flpigeon_deep_hash(self->map); + result = result * 31 + flpigeon_deep_hash(self->string_map); + result = result * 31 + flpigeon_deep_hash(self->int_map); + result = result * 31 + flpigeon_deep_hash(self->enum_map); + result = result * 31 + flpigeon_deep_hash(self->object_map); + result = result * 31 + flpigeon_deep_hash(self->list_map); + result = result * 31 + flpigeon_deep_hash(self->map_map); + result = result * 31 + flpigeon_deep_hash(self->recursive_class_map); + return result; +} + struct _CoreTestsPigeonTestAllNullableTypesWithoutRecursion { GObject parent_instance; @@ -2145,6 +2815,251 @@ core_tests_pigeon_test_all_nullable_types_without_recursion_new_from_list( list_map, map_map); } +gboolean core_tests_pigeon_test_all_nullable_types_without_recursion_equals( + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* a, + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if ((a->a_nullable_bool == nullptr) != (b->a_nullable_bool == nullptr)) { + return FALSE; + } + if (a->a_nullable_bool != nullptr && + *a->a_nullable_bool != *b->a_nullable_bool) { + return FALSE; + } + if ((a->a_nullable_int == nullptr) != (b->a_nullable_int == nullptr)) { + return FALSE; + } + if (a->a_nullable_int != nullptr && + *a->a_nullable_int != *b->a_nullable_int) { + return FALSE; + } + if ((a->a_nullable_int64 == nullptr) != (b->a_nullable_int64 == nullptr)) { + return FALSE; + } + if (a->a_nullable_int64 != nullptr && + *a->a_nullable_int64 != *b->a_nullable_int64) { + return FALSE; + } + if ((a->a_nullable_double == nullptr) != (b->a_nullable_double == nullptr)) { + return FALSE; + } + if (a->a_nullable_double != nullptr && + !flpigeon_equals_double(*a->a_nullable_double, *b->a_nullable_double)) { + return FALSE; + } + if (a->a_nullable_byte_array != b->a_nullable_byte_array) { + if (a->a_nullable_byte_array == nullptr || + b->a_nullable_byte_array == nullptr) { + return FALSE; + } + if (a->a_nullable_byte_array_length != b->a_nullable_byte_array_length) { + return FALSE; + } + if (memcmp(a->a_nullable_byte_array, b->a_nullable_byte_array, + a->a_nullable_byte_array_length * sizeof(uint8_t)) != 0) { + return FALSE; + } + } + if (a->a_nullable4_byte_array != b->a_nullable4_byte_array) { + if (a->a_nullable4_byte_array == nullptr || + b->a_nullable4_byte_array == nullptr) { + return FALSE; + } + if (a->a_nullable4_byte_array_length != b->a_nullable4_byte_array_length) { + return FALSE; + } + if (memcmp(a->a_nullable4_byte_array, b->a_nullable4_byte_array, + a->a_nullable4_byte_array_length * sizeof(int32_t)) != 0) { + return FALSE; + } + } + if (a->a_nullable8_byte_array != b->a_nullable8_byte_array) { + if (a->a_nullable8_byte_array == nullptr || + b->a_nullable8_byte_array == nullptr) { + return FALSE; + } + if (a->a_nullable8_byte_array_length != b->a_nullable8_byte_array_length) { + return FALSE; + } + if (memcmp(a->a_nullable8_byte_array, b->a_nullable8_byte_array, + a->a_nullable8_byte_array_length * sizeof(int64_t)) != 0) { + return FALSE; + } + } + if (a->a_nullable_float_array != b->a_nullable_float_array) { + if (a->a_nullable_float_array == nullptr || + b->a_nullable_float_array == nullptr) { + return FALSE; + } + if (a->a_nullable_float_array_length != b->a_nullable_float_array_length) { + return FALSE; + } + for (size_t i = 0; i < a->a_nullable_float_array_length; i++) { + if (!flpigeon_equals_double(a->a_nullable_float_array[i], + b->a_nullable_float_array[i])) { + return FALSE; + } + } + } + if ((a->a_nullable_enum == nullptr) != (b->a_nullable_enum == nullptr)) { + return FALSE; + } + if (a->a_nullable_enum != nullptr && + *a->a_nullable_enum != *b->a_nullable_enum) { + return FALSE; + } + if ((a->another_nullable_enum == nullptr) != + (b->another_nullable_enum == nullptr)) { + return FALSE; + } + if (a->another_nullable_enum != nullptr && + *a->another_nullable_enum != *b->another_nullable_enum) { + return FALSE; + } + if (g_strcmp0(a->a_nullable_string, b->a_nullable_string) != 0) { + return FALSE; + } + if (!flpigeon_deep_equals(a->a_nullable_object, b->a_nullable_object)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list, b->list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->string_list, b->string_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->int_list, b->int_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->double_list, b->double_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->bool_list, b->bool_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->enum_list, b->enum_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->object_list, b->object_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list_list, b->list_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map_list, b->map_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map, b->map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->string_map, b->string_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->int_map, b->int_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->enum_map, b->enum_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->object_map, b->object_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->list_map, b->list_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->map_map, b->map_map)) { + return FALSE; + } + return TRUE; +} + +guint core_tests_pigeon_test_all_nullable_types_without_recursion_hash( + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* self) { + g_return_val_if_fail( + CORE_TESTS_PIGEON_TEST_IS_ALL_NULLABLE_TYPES_WITHOUT_RECURSION(self), 0); + guint result = 0; + result = result * 31 + (self->a_nullable_bool != nullptr + ? static_cast(*self->a_nullable_bool) + : 0); + result = result * 31 + (self->a_nullable_int != nullptr + ? static_cast(*self->a_nullable_int) + : 0); + result = result * 31 + (self->a_nullable_int64 != nullptr + ? static_cast(*self->a_nullable_int64) + : 0); + result = result * 31 + (self->a_nullable_double != nullptr + ? flpigeon_hash_double(*self->a_nullable_double) + : 0); + { + size_t len = self->a_nullable_byte_array_length; + const uint8_t* data = self->a_nullable_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + } + } + { + size_t len = self->a_nullable4_byte_array_length; + const int32_t* data = self->a_nullable4_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i]); + } + } + } + { + size_t len = self->a_nullable8_byte_array_length; + const int64_t* data = self->a_nullable8_byte_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + static_cast(data[i] ^ (data[i] >> 32)); + } + } + } + { + size_t len = self->a_nullable_float_array_length; + const double* data = self->a_nullable_float_array; + if (data != nullptr) { + for (size_t i = 0; i < len; i++) { + result = result * 31 + flpigeon_hash_double(data[i]); + } + } + } + result = result * 31 + (self->a_nullable_enum != nullptr + ? static_cast(*self->a_nullable_enum) + : 0); + result = result * 31 + (self->another_nullable_enum != nullptr + ? static_cast(*self->another_nullable_enum) + : 0); + result = result * 31 + (self->a_nullable_string != nullptr + ? g_str_hash(self->a_nullable_string) + : 0); + result = result * 31 + flpigeon_deep_hash(self->a_nullable_object); + result = result * 31 + flpigeon_deep_hash(self->list); + result = result * 31 + flpigeon_deep_hash(self->string_list); + result = result * 31 + flpigeon_deep_hash(self->int_list); + result = result * 31 + flpigeon_deep_hash(self->double_list); + result = result * 31 + flpigeon_deep_hash(self->bool_list); + result = result * 31 + flpigeon_deep_hash(self->enum_list); + result = result * 31 + flpigeon_deep_hash(self->object_list); + result = result * 31 + flpigeon_deep_hash(self->list_list); + result = result * 31 + flpigeon_deep_hash(self->map_list); + result = result * 31 + flpigeon_deep_hash(self->map); + result = result * 31 + flpigeon_deep_hash(self->string_map); + result = result * 31 + flpigeon_deep_hash(self->int_map); + result = result * 31 + flpigeon_deep_hash(self->enum_map); + result = result * 31 + flpigeon_deep_hash(self->object_map); + result = result * 31 + flpigeon_deep_hash(self->list_map); + result = result * 31 + flpigeon_deep_hash(self->map_map); + return result; +} + struct _CoreTestsPigeonTestAllClassesWrapper { GObject parent_instance; @@ -2347,6 +3262,59 @@ core_tests_pigeon_test_all_classes_wrapper_new_from_list(FlValue* values) { class_list, nullable_class_list, class_map, nullable_class_map); } +gboolean core_tests_pigeon_test_all_classes_wrapper_equals( + CoreTestsPigeonTestAllClassesWrapper* a, + CoreTestsPigeonTestAllClassesWrapper* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if (!core_tests_pigeon_test_all_nullable_types_equals( + a->all_nullable_types, b->all_nullable_types)) { + return FALSE; + } + if (!core_tests_pigeon_test_all_nullable_types_without_recursion_equals( + a->all_nullable_types_without_recursion, + b->all_nullable_types_without_recursion)) { + return FALSE; + } + if (!core_tests_pigeon_test_all_types_equals(a->all_types, b->all_types)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->class_list, b->class_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->nullable_class_list, b->nullable_class_list)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->class_map, b->class_map)) { + return FALSE; + } + if (!flpigeon_deep_equals(a->nullable_class_map, b->nullable_class_map)) { + return FALSE; + } + return TRUE; +} + +guint core_tests_pigeon_test_all_classes_wrapper_hash( + CoreTestsPigeonTestAllClassesWrapper* self) { + g_return_val_if_fail(CORE_TESTS_PIGEON_TEST_IS_ALL_CLASSES_WRAPPER(self), 0); + guint result = 0; + result = result * 31 + core_tests_pigeon_test_all_nullable_types_hash( + self->all_nullable_types); + result = result * 31 + + core_tests_pigeon_test_all_nullable_types_without_recursion_hash( + self->all_nullable_types_without_recursion); + result = result * 31 + core_tests_pigeon_test_all_types_hash(self->all_types); + result = result * 31 + flpigeon_deep_hash(self->class_list); + result = result * 31 + flpigeon_deep_hash(self->nullable_class_list); + result = result * 31 + flpigeon_deep_hash(self->class_map); + result = result * 31 + flpigeon_deep_hash(self->nullable_class_map); + return result; +} + struct _CoreTestsPigeonTestTestMessage { GObject parent_instance; @@ -2409,6 +3377,28 @@ core_tests_pigeon_test_test_message_new_from_list(FlValue* values) { return core_tests_pigeon_test_test_message_new(test_list); } +gboolean core_tests_pigeon_test_test_message_equals( + CoreTestsPigeonTestTestMessage* a, CoreTestsPigeonTestTestMessage* b) { + if (a == b) { + return TRUE; + } + if (a == nullptr || b == nullptr) { + return FALSE; + } + if (!flpigeon_deep_equals(a->test_list, b->test_list)) { + return FALSE; + } + return TRUE; +} + +guint core_tests_pigeon_test_test_message_hash( + CoreTestsPigeonTestTestMessage* self) { + g_return_val_if_fail(CORE_TESTS_PIGEON_TEST_IS_TEST_MESSAGE(self), 0); + guint result = 0; + result = result * 31 + flpigeon_deep_hash(self->test_list); + return result; +} + struct _CoreTestsPigeonTestMessageCodec { FlStandardMessageCodec parent_instance; }; @@ -4840,6 +5830,208 @@ core_tests_pigeon_test_host_integration_core_api_echo_required_int_response_new_ return self; } +struct + _CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse { + GObject parent_instance; + + FlValue* value; +}; + +G_DEFINE_TYPE( + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse, + core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response, + G_TYPE_OBJECT) + +static void +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_dispose( + GObject* object) { + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_ARE_ALL_NULLABLE_TYPES_EQUAL_RESPONSE( + object); + g_clear_pointer(&self->value, fl_value_unref); + G_OBJECT_CLASS( + core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_parent_class) + ->dispose(object); +} + +static void +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_init( + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* + self) {} + +static void +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_class_init( + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponseClass* + klass) { + G_OBJECT_CLASS(klass)->dispose = + core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_dispose; +} + +CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_new( + gboolean return_value) { + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_ARE_ALL_NULLABLE_TYPES_EQUAL_RESPONSE( + g_object_new( + core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_get_type(), + nullptr)); + self->value = fl_value_new_list(); + fl_value_append_take(self->value, fl_value_new_bool(return_value)); + return self; +} + +CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_new_error( + const gchar* code, const gchar* message, FlValue* details) { + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_ARE_ALL_NULLABLE_TYPES_EQUAL_RESPONSE( + g_object_new( + core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_get_type(), + nullptr)); + self->value = fl_value_new_list(); + fl_value_append_take(self->value, fl_value_new_string(code)); + fl_value_append_take(self->value, + fl_value_new_string(message != nullptr ? message : "")); + fl_value_append_take(self->value, details != nullptr ? fl_value_ref(details) + : fl_value_new_null()); + return self; +} + +struct + _CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse { + GObject parent_instance; + + FlValue* value; +}; + +G_DEFINE_TYPE( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse, + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response, + G_TYPE_OBJECT) + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_dispose( + GObject* object) { + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_HASH_RESPONSE( + object); + g_clear_pointer(&self->value, fl_value_unref); + G_OBJECT_CLASS( + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_parent_class) + ->dispose(object); +} + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_init( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* + self) {} + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_class_init( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponseClass* + klass) { + G_OBJECT_CLASS(klass)->dispose = + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_dispose; +} + +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_new( + int64_t return_value) { + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_HASH_RESPONSE( + g_object_new( + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_get_type(), + nullptr)); + self->value = fl_value_new_list(); + fl_value_append_take(self->value, fl_value_new_int(return_value)); + return self; +} + +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_new_error( + const gchar* code, const gchar* message, FlValue* details) { + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_HASH_RESPONSE( + g_object_new( + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_get_type(), + nullptr)); + self->value = fl_value_new_list(); + fl_value_append_take(self->value, fl_value_new_string(code)); + fl_value_append_take(self->value, + fl_value_new_string(message != nullptr ? message : "")); + fl_value_append_take(self->value, details != nullptr ? fl_value_ref(details) + : fl_value_new_null()); + return self; +} + +struct + _CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse { + GObject parent_instance; + + FlValue* value; +}; + +G_DEFINE_TYPE( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse, + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response, + G_TYPE_OBJECT) + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_dispose( + GObject* object) { + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* + self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_WITHOUT_RECURSION_HASH_RESPONSE( + object); + g_clear_pointer(&self->value, fl_value_unref); + G_OBJECT_CLASS( + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_parent_class) + ->dispose(object); +} + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_init( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* + self) {} + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_class_init( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponseClass* + klass) { + G_OBJECT_CLASS(klass)->dispose = + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_dispose; +} + +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_new( + int64_t return_value) { + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* + self = CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_WITHOUT_RECURSION_HASH_RESPONSE( + g_object_new( + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_get_type(), + nullptr)); + self->value = fl_value_new_list(); + fl_value_append_take(self->value, fl_value_new_int(return_value)); + return self; +} + +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_new_error( + const gchar* code, const gchar* message, FlValue* details) { + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* + self = CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_WITHOUT_RECURSION_HASH_RESPONSE( + g_object_new( + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_get_type(), + nullptr)); + self->value = fl_value_new_list(); + fl_value_append_take(self->value, fl_value_new_string(code)); + fl_value_append_take(self->value, + fl_value_new_string(message != nullptr ? message : "")); + fl_value_append_take(self->value, details != nullptr ? fl_value_ref(details) + : fl_value_new_null()); + return self; +} + struct _CoreTestsPigeonTestHostIntegrationCoreApiEchoAllNullableTypesResponse { GObject parent_instance; @@ -14726,6 +15918,112 @@ core_tests_pigeon_test_host_integration_core_api_echo_required_int_cb( } } +static void +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_cb( + FlBasicMessageChannel* channel, FlValue* message_, + FlBasicMessageChannelResponseHandle* response_handle, gpointer user_data) { + CoreTestsPigeonTestHostIntegrationCoreApi* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API(user_data); + + if (self->vtable == nullptr || + self->vtable->are_all_nullable_types_equal == nullptr) { + return; + } + + FlValue* value0 = fl_value_get_list_value(message_, 0); + CoreTestsPigeonTestAllNullableTypes* a = + CORE_TESTS_PIGEON_TEST_ALL_NULLABLE_TYPES( + fl_value_get_custom_value_object(value0)); + FlValue* value1 = fl_value_get_list_value(message_, 1); + CoreTestsPigeonTestAllNullableTypes* b = + CORE_TESTS_PIGEON_TEST_ALL_NULLABLE_TYPES( + fl_value_get_custom_value_object(value1)); + g_autoptr( + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse) + response = + self->vtable->are_all_nullable_types_equal(a, b, self->user_data); + if (response == nullptr) { + g_warning("No response returned to %s.%s", "HostIntegrationCoreApi", + "areAllNullableTypesEqual"); + return; + } + + g_autoptr(GError) error = NULL; + if (!fl_basic_message_channel_respond(channel, response_handle, + response->value, &error)) { + g_warning("Failed to send response to %s.%s: %s", "HostIntegrationCoreApi", + "areAllNullableTypesEqual", error->message); + } +} + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_cb( + FlBasicMessageChannel* channel, FlValue* message_, + FlBasicMessageChannelResponseHandle* response_handle, gpointer user_data) { + CoreTestsPigeonTestHostIntegrationCoreApi* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API(user_data); + + if (self->vtable == nullptr || + self->vtable->get_all_nullable_types_hash == nullptr) { + return; + } + + FlValue* value0 = fl_value_get_list_value(message_, 0); + CoreTestsPigeonTestAllNullableTypes* value = + CORE_TESTS_PIGEON_TEST_ALL_NULLABLE_TYPES( + fl_value_get_custom_value_object(value0)); + g_autoptr( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse) + response = + self->vtable->get_all_nullable_types_hash(value, self->user_data); + if (response == nullptr) { + g_warning("No response returned to %s.%s", "HostIntegrationCoreApi", + "getAllNullableTypesHash"); + return; + } + + g_autoptr(GError) error = NULL; + if (!fl_basic_message_channel_respond(channel, response_handle, + response->value, &error)) { + g_warning("Failed to send response to %s.%s: %s", "HostIntegrationCoreApi", + "getAllNullableTypesHash", error->message); + } +} + +static void +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_cb( + FlBasicMessageChannel* channel, FlValue* message_, + FlBasicMessageChannelResponseHandle* response_handle, gpointer user_data) { + CoreTestsPigeonTestHostIntegrationCoreApi* self = + CORE_TESTS_PIGEON_TEST_HOST_INTEGRATION_CORE_API(user_data); + + if (self->vtable == nullptr || + self->vtable->get_all_nullable_types_without_recursion_hash == nullptr) { + return; + } + + FlValue* value0 = fl_value_get_list_value(message_, 0); + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* value = + CORE_TESTS_PIGEON_TEST_ALL_NULLABLE_TYPES_WITHOUT_RECURSION( + fl_value_get_custom_value_object(value0)); + g_autoptr( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse) + response = self->vtable->get_all_nullable_types_without_recursion_hash( + value, self->user_data); + if (response == nullptr) { + g_warning("No response returned to %s.%s", "HostIntegrationCoreApi", + "getAllNullableTypesWithoutRecursionHash"); + return; + } + + g_autoptr(GError) error = NULL; + if (!fl_basic_message_channel_respond(channel, response_handle, + response->value, &error)) { + g_warning("Failed to send response to %s.%s: %s", "HostIntegrationCoreApi", + "getAllNullableTypesWithoutRecursionHash", error->message); + } +} + static void core_tests_pigeon_test_host_integration_core_api_echo_all_nullable_types_cb( FlBasicMessageChannel* channel, FlValue* message_, @@ -18082,6 +19380,45 @@ void core_tests_pigeon_test_host_integration_core_api_set_method_handlers( echo_required_int_channel, core_tests_pigeon_test_host_integration_core_api_echo_required_int_cb, g_object_ref(api_data), g_object_unref); + g_autofree gchar* are_all_nullable_types_equal_channel_name = g_strdup_printf( + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "areAllNullableTypesEqual%s", + dot_suffix); + g_autoptr(FlBasicMessageChannel) are_all_nullable_types_equal_channel = + fl_basic_message_channel_new(messenger, + are_all_nullable_types_equal_channel_name, + FL_MESSAGE_CODEC(codec)); + fl_basic_message_channel_set_message_handler( + are_all_nullable_types_equal_channel, + core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_cb, + g_object_ref(api_data), g_object_unref); + g_autofree gchar* get_all_nullable_types_hash_channel_name = g_strdup_printf( + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "getAllNullableTypesHash%s", + dot_suffix); + g_autoptr(FlBasicMessageChannel) get_all_nullable_types_hash_channel = + fl_basic_message_channel_new(messenger, + get_all_nullable_types_hash_channel_name, + FL_MESSAGE_CODEC(codec)); + fl_basic_message_channel_set_message_handler( + get_all_nullable_types_hash_channel, + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_cb, + g_object_ref(api_data), g_object_unref); + g_autofree gchar* get_all_nullable_types_without_recursion_hash_channel_name = + g_strdup_printf( + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "getAllNullableTypesWithoutRecursionHash%s", + dot_suffix); + g_autoptr(FlBasicMessageChannel) + get_all_nullable_types_without_recursion_hash_channel = + fl_basic_message_channel_new( + messenger, + get_all_nullable_types_without_recursion_hash_channel_name, + FL_MESSAGE_CODEC(codec)); + fl_basic_message_channel_set_message_handler( + get_all_nullable_types_without_recursion_hash_channel, + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_cb, + g_object_ref(api_data), g_object_unref); g_autofree gchar* echo_all_nullable_types_channel_name = g_strdup_printf( "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." "echoAllNullableTypes%s", @@ -19917,6 +21254,40 @@ void core_tests_pigeon_test_host_integration_core_api_clear_method_handlers( FL_MESSAGE_CODEC(codec)); fl_basic_message_channel_set_message_handler(echo_required_int_channel, nullptr, nullptr, nullptr); + g_autofree gchar* are_all_nullable_types_equal_channel_name = g_strdup_printf( + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "areAllNullableTypesEqual%s", + dot_suffix); + g_autoptr(FlBasicMessageChannel) are_all_nullable_types_equal_channel = + fl_basic_message_channel_new(messenger, + are_all_nullable_types_equal_channel_name, + FL_MESSAGE_CODEC(codec)); + fl_basic_message_channel_set_message_handler( + are_all_nullable_types_equal_channel, nullptr, nullptr, nullptr); + g_autofree gchar* get_all_nullable_types_hash_channel_name = g_strdup_printf( + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "getAllNullableTypesHash%s", + dot_suffix); + g_autoptr(FlBasicMessageChannel) get_all_nullable_types_hash_channel = + fl_basic_message_channel_new(messenger, + get_all_nullable_types_hash_channel_name, + FL_MESSAGE_CODEC(codec)); + fl_basic_message_channel_set_message_handler( + get_all_nullable_types_hash_channel, nullptr, nullptr, nullptr); + g_autofree gchar* get_all_nullable_types_without_recursion_hash_channel_name = + g_strdup_printf( + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "getAllNullableTypesWithoutRecursionHash%s", + dot_suffix); + g_autoptr(FlBasicMessageChannel) + get_all_nullable_types_without_recursion_hash_channel = + fl_basic_message_channel_new( + messenger, + get_all_nullable_types_without_recursion_hash_channel_name, + FL_MESSAGE_CODEC(codec)); + fl_basic_message_channel_set_message_handler( + get_all_nullable_types_without_recursion_hash_channel, nullptr, nullptr, + nullptr); g_autofree gchar* echo_all_nullable_types_channel_name = g_strdup_printf( "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." "echoAllNullableTypes%s", diff --git a/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.h index f0f342e75439..322b9bc8a6b5 100644 --- a/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/linux/pigeon/core_tests.gen.h @@ -69,6 +69,29 @@ CoreTestsPigeonTestUnusedClass* core_tests_pigeon_test_unused_class_new( FlValue* core_tests_pigeon_test_unused_class_get_a_field( CoreTestsPigeonTestUnusedClass* object); +/** + * core_tests_pigeon_test_unused_class_equals: + * @a: a #CoreTestsPigeonTestUnusedClass. + * @b: another #CoreTestsPigeonTestUnusedClass. + * + * Checks if two #CoreTestsPigeonTestUnusedClass objects are equal. + * + * Returns: TRUE if @a and @b are equal. + */ +gboolean core_tests_pigeon_test_unused_class_equals( + CoreTestsPigeonTestUnusedClass* a, CoreTestsPigeonTestUnusedClass* b); + +/** + * core_tests_pigeon_test_unused_class_hash: + * @object: a #CoreTestsPigeonTestUnusedClass. + * + * Calculates a hash code for a #CoreTestsPigeonTestUnusedClass object. + * + * Returns: the hash code. + */ +guint core_tests_pigeon_test_unused_class_hash( + CoreTestsPigeonTestUnusedClass* object); + /** * CoreTestsPigeonTestAllTypes: * @@ -445,6 +468,29 @@ FlValue* core_tests_pigeon_test_all_types_get_list_map( FlValue* core_tests_pigeon_test_all_types_get_map_map( CoreTestsPigeonTestAllTypes* object); +/** + * core_tests_pigeon_test_all_types_equals: + * @a: a #CoreTestsPigeonTestAllTypes. + * @b: another #CoreTestsPigeonTestAllTypes. + * + * Checks if two #CoreTestsPigeonTestAllTypes objects are equal. + * + * Returns: TRUE if @a and @b are equal. + */ +gboolean core_tests_pigeon_test_all_types_equals( + CoreTestsPigeonTestAllTypes* a, CoreTestsPigeonTestAllTypes* b); + +/** + * core_tests_pigeon_test_all_types_hash: + * @object: a #CoreTestsPigeonTestAllTypes. + * + * Calculates a hash code for a #CoreTestsPigeonTestAllTypes object. + * + * Returns: the hash code. + */ +guint core_tests_pigeon_test_all_types_hash( + CoreTestsPigeonTestAllTypes* object); + /** * CoreTestsPigeonTestAllNullableTypes: * @@ -868,6 +914,30 @@ FlValue* core_tests_pigeon_test_all_nullable_types_get_map_map( FlValue* core_tests_pigeon_test_all_nullable_types_get_recursive_class_map( CoreTestsPigeonTestAllNullableTypes* object); +/** + * core_tests_pigeon_test_all_nullable_types_equals: + * @a: a #CoreTestsPigeonTestAllNullableTypes. + * @b: another #CoreTestsPigeonTestAllNullableTypes. + * + * Checks if two #CoreTestsPigeonTestAllNullableTypes objects are equal. + * + * Returns: TRUE if @a and @b are equal. + */ +gboolean core_tests_pigeon_test_all_nullable_types_equals( + CoreTestsPigeonTestAllNullableTypes* a, + CoreTestsPigeonTestAllNullableTypes* b); + +/** + * core_tests_pigeon_test_all_nullable_types_hash: + * @object: a #CoreTestsPigeonTestAllNullableTypes. + * + * Calculates a hash code for a #CoreTestsPigeonTestAllNullableTypes object. + * + * Returns: the hash code. + */ +guint core_tests_pigeon_test_all_nullable_types_hash( + CoreTestsPigeonTestAllNullableTypes* object); + /** * CoreTestsPigeonTestAllNullableTypesWithoutRecursion: * @@ -1279,6 +1349,32 @@ FlValue* core_tests_pigeon_test_all_nullable_types_without_recursion_get_map_map( CoreTestsPigeonTestAllNullableTypesWithoutRecursion* object); +/** + * core_tests_pigeon_test_all_nullable_types_without_recursion_equals: + * @a: a #CoreTestsPigeonTestAllNullableTypesWithoutRecursion. + * @b: another #CoreTestsPigeonTestAllNullableTypesWithoutRecursion. + * + * Checks if two #CoreTestsPigeonTestAllNullableTypesWithoutRecursion objects + * are equal. + * + * Returns: TRUE if @a and @b are equal. + */ +gboolean core_tests_pigeon_test_all_nullable_types_without_recursion_equals( + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* a, + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* b); + +/** + * core_tests_pigeon_test_all_nullable_types_without_recursion_hash: + * @object: a #CoreTestsPigeonTestAllNullableTypesWithoutRecursion. + * + * Calculates a hash code for a + * #CoreTestsPigeonTestAllNullableTypesWithoutRecursion object. + * + * Returns: the hash code. + */ +guint core_tests_pigeon_test_all_nullable_types_without_recursion_hash( + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* object); + /** * CoreTestsPigeonTestAllClassesWrapper: * @@ -1396,6 +1492,30 @@ FlValue* core_tests_pigeon_test_all_classes_wrapper_get_class_map( FlValue* core_tests_pigeon_test_all_classes_wrapper_get_nullable_class_map( CoreTestsPigeonTestAllClassesWrapper* object); +/** + * core_tests_pigeon_test_all_classes_wrapper_equals: + * @a: a #CoreTestsPigeonTestAllClassesWrapper. + * @b: another #CoreTestsPigeonTestAllClassesWrapper. + * + * Checks if two #CoreTestsPigeonTestAllClassesWrapper objects are equal. + * + * Returns: TRUE if @a and @b are equal. + */ +gboolean core_tests_pigeon_test_all_classes_wrapper_equals( + CoreTestsPigeonTestAllClassesWrapper* a, + CoreTestsPigeonTestAllClassesWrapper* b); + +/** + * core_tests_pigeon_test_all_classes_wrapper_hash: + * @object: a #CoreTestsPigeonTestAllClassesWrapper. + * + * Calculates a hash code for a #CoreTestsPigeonTestAllClassesWrapper object. + * + * Returns: the hash code. + */ +guint core_tests_pigeon_test_all_classes_wrapper_hash( + CoreTestsPigeonTestAllClassesWrapper* object); + /** * CoreTestsPigeonTestTestMessage: * @@ -1428,6 +1548,29 @@ CoreTestsPigeonTestTestMessage* core_tests_pigeon_test_test_message_new( FlValue* core_tests_pigeon_test_test_message_get_test_list( CoreTestsPigeonTestTestMessage* object); +/** + * core_tests_pigeon_test_test_message_equals: + * @a: a #CoreTestsPigeonTestTestMessage. + * @b: another #CoreTestsPigeonTestTestMessage. + * + * Checks if two #CoreTestsPigeonTestTestMessage objects are equal. + * + * Returns: TRUE if @a and @b are equal. + */ +gboolean core_tests_pigeon_test_test_message_equals( + CoreTestsPigeonTestTestMessage* a, CoreTestsPigeonTestTestMessage* b); + +/** + * core_tests_pigeon_test_test_message_hash: + * @object: a #CoreTestsPigeonTestTestMessage. + * + * Calculates a hash code for a #CoreTestsPigeonTestTestMessage object. + * + * Returns: the hash code. + */ +guint core_tests_pigeon_test_test_message_hash( + CoreTestsPigeonTestTestMessage* object); + G_DECLARE_FINAL_TYPE(CoreTestsPigeonTestMessageCodec, core_tests_pigeon_test_message_codec, CORE_TESTS_PIGEON_TEST, MESSAGE_CODEC, @@ -2451,6 +2594,110 @@ CoreTestsPigeonTestHostIntegrationCoreApiEchoRequiredIntResponse* core_tests_pigeon_test_host_integration_core_api_echo_required_int_response_new_error( const gchar* code, const gchar* message, FlValue* details); +G_DECLARE_FINAL_TYPE( + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse, + core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response, + CORE_TESTS_PIGEON_TEST, + HOST_INTEGRATION_CORE_API_ARE_ALL_NULLABLE_TYPES_EQUAL_RESPONSE, GObject) + +/** + * core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_new: + * + * Creates a new response to HostIntegrationCoreApi.areAllNullableTypesEqual. + * + * Returns: a new + * #CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse + */ +CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_new( + gboolean return_value); + +/** + * core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_new_error: + * @code: error code. + * @message: error message. + * @details: (allow-none): error details or %NULL. + * + * Creates a new error response to + * HostIntegrationCoreApi.areAllNullableTypesEqual. + * + * Returns: a new + * #CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse + */ +CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* +core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_new_error( + const gchar* code, const gchar* message, FlValue* details); + +G_DECLARE_FINAL_TYPE( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse, + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response, + CORE_TESTS_PIGEON_TEST, + HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_HASH_RESPONSE, GObject) + +/** + * core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_new: + * + * Creates a new response to HostIntegrationCoreApi.getAllNullableTypesHash. + * + * Returns: a new + * #CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse + */ +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_new( + int64_t return_value); + +/** + * core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_new_error: + * @code: error code. + * @message: error message. + * @details: (allow-none): error details or %NULL. + * + * Creates a new error response to + * HostIntegrationCoreApi.getAllNullableTypesHash. + * + * Returns: a new + * #CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse + */ +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_new_error( + const gchar* code, const gchar* message, FlValue* details); + +G_DECLARE_FINAL_TYPE( + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse, + core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response, + CORE_TESTS_PIGEON_TEST, + HOST_INTEGRATION_CORE_API_GET_ALL_NULLABLE_TYPES_WITHOUT_RECURSION_HASH_RESPONSE, + GObject) + +/** + * core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_new: + * + * Creates a new response to + * HostIntegrationCoreApi.getAllNullableTypesWithoutRecursionHash. + * + * Returns: a new + * #CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse + */ +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_new( + int64_t return_value); + +/** + * core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_new_error: + * @code: error code. + * @message: error message. + * @details: (allow-none): error details or %NULL. + * + * Creates a new error response to + * HostIntegrationCoreApi.getAllNullableTypesWithoutRecursionHash. + * + * Returns: a new + * #CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse + */ +CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* +core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_new_error( + const gchar* code, const gchar* message, FlValue* details); + G_DECLARE_FINAL_TYPE( CoreTestsPigeonTestHostIntegrationCoreApiEchoAllNullableTypesResponse, core_tests_pigeon_test_host_integration_core_api_echo_all_nullable_types_response, @@ -3605,6 +3852,17 @@ typedef struct { *echo_optional_default_double)(double a_double, gpointer user_data); CoreTestsPigeonTestHostIntegrationCoreApiEchoRequiredIntResponse* ( *echo_required_int)(int64_t an_int, gpointer user_data); + CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* ( + *are_all_nullable_types_equal)(CoreTestsPigeonTestAllNullableTypes* a, + CoreTestsPigeonTestAllNullableTypes* b, + gpointer user_data); + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* ( + *get_all_nullable_types_hash)(CoreTestsPigeonTestAllNullableTypes* value, + gpointer user_data); + CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* ( + *get_all_nullable_types_without_recursion_hash)( + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* value, + gpointer user_data); CoreTestsPigeonTestHostIntegrationCoreApiEchoAllNullableTypesResponse* ( *echo_all_nullable_types)(CoreTestsPigeonTestAllNullableTypes* everything, gpointer user_data); diff --git a/packages/pigeon/platform_tests/test_plugin/linux/test/equality_test.cc b/packages/pigeon/platform_tests/test_plugin/linux/test/equality_test.cc new file mode 100644 index 000000000000..349c4bdd34cb --- /dev/null +++ b/packages/pigeon/platform_tests/test_plugin/linux/test/equality_test.cc @@ -0,0 +1,238 @@ +// 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. + +#include + +#include + +#include "pigeon/core_tests.gen.h" + +static CoreTestsPigeonTestAllNullableTypes* create_empty_all_nullable_types() { + return core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, 0, + nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); +} + +TEST(Equality, AllNullableTypesNaN) { + double nan_val = NAN; + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all1 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, &nan_val, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all2 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, &nan_val, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_nullable_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_nullable_types_hash(all1), + core_tests_pigeon_test_all_nullable_types_hash(all2)); +} + +TEST(Equality, AllNullableTypesCollectionNaN) { + g_autoptr(FlValue) list1 = fl_value_new_list(); + fl_value_append_take(list1, fl_value_new_float(NAN)); + + g_autoptr(FlValue) list2 = fl_value_new_list(); + fl_value_append_take(list2, fl_value_new_float(NAN)); + + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all1 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, list1, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all2 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, list2, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_nullable_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_nullable_types_hash(all1), + core_tests_pigeon_test_all_nullable_types_hash(all2)); +} + +TEST(Equality, AllNullableTypesRecursive) { + g_autoptr(CoreTestsPigeonTestAllNullableTypes) nested1 = + create_empty_all_nullable_types(); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all1 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nested1, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + + g_autoptr(CoreTestsPigeonTestAllNullableTypes) nested2 = + create_empty_all_nullable_types(); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all2 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nested2, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_nullable_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_nullable_types_hash(all1), + core_tests_pigeon_test_all_nullable_types_hash(all2)); +} + +TEST(Equality, AllTypesNumericLists) { + uint8_t bytes[] = {1, 2, 3}; + int32_t ints32[] = {4, 5}; + double doubles[] = {1.1, 2.2}; + + g_autoptr(CoreTestsPigeonTestAllTypes) all1 = + core_tests_pigeon_test_all_types_new( + TRUE, 1, 2, 3.3, bytes, 3, ints32, 2, nullptr, 0, doubles, 2, + PIGEON_INTEGRATION_TESTS_AN_ENUM_ONE, + PIGEON_INTEGRATION_TESTS_ANOTHER_ENUM_JUST_IN_CASE, "hello", nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr); + + g_autoptr(CoreTestsPigeonTestAllTypes) all2 = + core_tests_pigeon_test_all_types_new( + TRUE, 1, 2, 3.3, bytes, 3, ints32, 2, nullptr, 0, doubles, 2, + PIGEON_INTEGRATION_TESTS_AN_ENUM_ONE, + PIGEON_INTEGRATION_TESTS_ANOTHER_ENUM_JUST_IN_CASE, "hello", nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_types_hash(all1), + core_tests_pigeon_test_all_types_hash(all2)); + + // Change one element in a numeric list + doubles[1] = 2.3; + g_autoptr(CoreTestsPigeonTestAllTypes) all3 = + core_tests_pigeon_test_all_types_new( + TRUE, 1, 2, 3.3, bytes, 3, ints32, 2, nullptr, 0, doubles, 2, + PIGEON_INTEGRATION_TESTS_AN_ENUM_ONE, + PIGEON_INTEGRATION_TESTS_ANOTHER_ENUM_JUST_IN_CASE, "hello", nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr); + + EXPECT_FALSE(core_tests_pigeon_test_all_types_equals(all1, all3)); + EXPECT_NE(core_tests_pigeon_test_all_types_hash(all1), + core_tests_pigeon_test_all_types_hash(all3)); +} + +TEST(Equality, SignedZero) { + double p_zero = 0.0; + double n_zero = -0.0; + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all1 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, &p_zero, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all2 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, &n_zero, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_nullable_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_nullable_types_hash(all1), + core_tests_pigeon_test_all_nullable_types_hash(all2)); +} + +TEST(Equality, SignedZeroMapKey) { + double p_zero = 0.0; + double n_zero = -0.0; + g_autoptr(FlValue) map1 = fl_value_new_map(); + fl_value_set_take(map1, fl_value_new_float(p_zero), fl_value_new_string("a")); + g_autoptr(FlValue) map2 = fl_value_new_map(); + fl_value_set_take(map2, fl_value_new_float(n_zero), fl_value_new_string("a")); + + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all1 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, map1, nullptr, + nullptr, nullptr); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all2 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, map2, nullptr, + nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_nullable_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_nullable_types_hash(all1), + core_tests_pigeon_test_all_nullable_types_hash(all2)); +} + +TEST(Equality, SignedZeroList) { + g_autoptr(FlValue) list1 = fl_value_new_list(); + fl_value_append_take(list1, fl_value_new_float(0.0)); + g_autoptr(FlValue) list2 = fl_value_new_list(); + fl_value_append_take(list2, fl_value_new_float(-0.0)); + + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all1 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, list1, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all2 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, list2, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_nullable_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_nullable_types_hash(all1), + core_tests_pigeon_test_all_nullable_types_hash(all2)); +} + +TEST(Equality, SignedZeroMapValue) { + g_autoptr(FlValue) map1 = fl_value_new_map(); + fl_value_set_take(map1, fl_value_new_string("a"), fl_value_new_float(0.0)); + g_autoptr(FlValue) map2 = fl_value_new_map(); + fl_value_set_take(map2, fl_value_new_string("a"), fl_value_new_float(-0.0)); + + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all1 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, map1, nullptr, + nullptr, nullptr); + g_autoptr(CoreTestsPigeonTestAllNullableTypes) all2 = + core_tests_pigeon_test_all_nullable_types_new( + nullptr, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0, nullptr, + 0, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, map2, nullptr, + nullptr, nullptr); + + EXPECT_TRUE(core_tests_pigeon_test_all_nullable_types_equals(all1, all2)); + EXPECT_EQ(core_tests_pigeon_test_all_nullable_types_hash(all1), + core_tests_pigeon_test_all_nullable_types_hash(all2)); +} diff --git a/packages/pigeon/platform_tests/test_plugin/linux/test_plugin.cc b/packages/pigeon/platform_tests/test_plugin/linux/test_plugin.cc index 95c7aa410da0..693bb17eefee 100644 --- a/packages/pigeon/platform_tests/test_plugin/linux/test_plugin.cc +++ b/packages/pigeon/platform_tests/test_plugin/linux/test_plugin.cc @@ -253,6 +253,29 @@ echo_all_nullable_types(CoreTestsPigeonTestAllNullableTypes* everything, everything); } +static CoreTestsPigeonTestHostIntegrationCoreApiAreAllNullableTypesEqualResponse* +are_all_nullable_types_equal(CoreTestsPigeonTestAllNullableTypes* a, + CoreTestsPigeonTestAllNullableTypes* b, + gpointer user_data) { + return core_tests_pigeon_test_host_integration_core_api_are_all_nullable_types_equal_response_new( + core_tests_pigeon_test_all_nullable_types_equals(a, b)); +} + +static CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesHashResponse* +get_all_nullable_types_hash(CoreTestsPigeonTestAllNullableTypes* value, + gpointer user_data) { + return core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_hash_response_new( + core_tests_pigeon_test_all_nullable_types_hash(value)); +} + +static CoreTestsPigeonTestHostIntegrationCoreApiGetAllNullableTypesWithoutRecursionHashResponse* +get_all_nullable_types_without_recursion_hash( + CoreTestsPigeonTestAllNullableTypesWithoutRecursion* value, + gpointer user_data) { + return core_tests_pigeon_test_host_integration_core_api_get_all_nullable_types_without_recursion_hash_response_new( + core_tests_pigeon_test_all_nullable_types_without_recursion_hash(value)); +} + static CoreTestsPigeonTestHostIntegrationCoreApiEchoAllNullableTypesWithoutRecursionResponse* echo_all_nullable_types_without_recursion( @@ -3224,6 +3247,10 @@ static CoreTestsPigeonTestHostIntegrationCoreApiVTable host_core_api_vtable = { .echo_named_default_string = echo_named_default_string, .echo_optional_default_double = echo_optional_default_double, .echo_required_int = echo_required_int, + .are_all_nullable_types_equal = are_all_nullable_types_equal, + .get_all_nullable_types_hash = get_all_nullable_types_hash, + .get_all_nullable_types_without_recursion_hash = + get_all_nullable_types_without_recursion_hash, .echo_all_nullable_types = echo_all_nullable_types, .echo_all_nullable_types_without_recursion = echo_all_nullable_types_without_recursion, diff --git a/packages/pigeon/platform_tests/test_plugin/windows/CMakeLists.txt b/packages/pigeon/platform_tests/test_plugin/windows/CMakeLists.txt index e69e6bc75130..fff3f37c5d5c 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/CMakeLists.txt +++ b/packages/pigeon/platform_tests/test_plugin/windows/CMakeLists.txt @@ -66,6 +66,9 @@ target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin) # https://developercommunity.visualstudio.com/t/stdany-doesnt-link-when-exceptions-are-disabled/376072 # TODO(stuartmorgan): Remove this once CI is using VS 2022 or later. target_compile_definitions(${PLUGIN_NAME} PRIVATE "_HAS_EXCEPTIONS=1") +if (MSVC) + target_compile_options(${PLUGIN_NAME} PRIVATE "/bigobj") +endif() # List of absolute paths to libraries that should be bundled with the plugin. # This list could contain prebuilt libraries, or libraries created by an @@ -126,6 +129,9 @@ add_custom_command(TARGET ${TEST_RUNNER} POST_BUILD # https://developercommunity.visualstudio.com/t/stdany-doesnt-link-when-exceptions-are-disabled/376072 # TODO(stuartmorgan): Remove this once CI is using VS 2022 or later. target_compile_definitions(${TEST_RUNNER} PRIVATE "_HAS_EXCEPTIONS=1") +if (MSVC) + target_compile_options(${TEST_RUNNER} PRIVATE "/bigobj") +endif() include(GoogleTest) gtest_discover_tests(${TEST_RUNNER}) diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp index b8c9e6860572..f50c8eff918c 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp @@ -14,16 +14,18 @@ #include #include +#include +#include #include #include #include namespace core_tests_pigeontest { -using flutter::BasicMessageChannel; -using flutter::CustomEncodableValue; -using flutter::EncodableList; -using flutter::EncodableMap; -using flutter::EncodableValue; +using ::flutter::BasicMessageChannel; +using ::flutter::CustomEncodableValue; +using ::flutter::EncodableList; +using ::flutter::EncodableMap; +using ::flutter::EncodableValue; FlutterError CreateConnectionError(const std::string channel_name) { return FlutterError( @@ -32,6 +34,212 @@ FlutterError CreateConnectionError(const std::string channel_name) { EncodableValue("")); } +namespace { +template +bool PigeonInternalDeepEquals(const T& a, const T& b); + +bool PigeonInternalDeepEquals(const double& a, const double& b); + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b); + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b); + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b); + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b); + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b); + +template +bool PigeonInternalDeepEquals(const T& a, const T& b) { + return a == b; +} + +template +bool PigeonInternalDeepEquals(const std::vector& a, + const std::vector& b) { + if (a.size() != b.size()) { + return false; + } + for (size_t i = 0; i < a.size(); ++i) { + if (!PigeonInternalDeepEquals(a[i], b[i])) { + return false; + } + } + return true; +} + +template +bool PigeonInternalDeepEquals(const std::map& a, + const std::map& b) { + if (a.size() != b.size()) { + return false; + } + for (const auto& kv : a) { + bool found = false; + for (const auto& b_kv : b) { + if (PigeonInternalDeepEquals(kv.first, b_kv.first)) { + if (PigeonInternalDeepEquals(kv.second, b_kv.second)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; +} + +bool PigeonInternalDeepEquals(const double& a, const double& b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == b) || (std::isnan(a) && std::isnan(b)); +} + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b) { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b) { + if (a.get() == b.get()) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b) { + if (a.index() != b.index()) { + return false; + } + if (const double* da = std::get_if(&a)) { + return PigeonInternalDeepEquals(*da, std::get(b)); + } else if (const ::flutter::EncodableList* la = + std::get_if<::flutter::EncodableList>(&a)) { + return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b)); + } else if (const ::flutter::EncodableMap* ma = + std::get_if<::flutter::EncodableMap>(&a)) { + return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b)); + } + return a == b; +} + +template +size_t PigeonInternalDeepHash(const T& v); + +size_t PigeonInternalDeepHash(const double& v); + +template +size_t PigeonInternalDeepHash(const std::vector& v); + +template +size_t PigeonInternalDeepHash(const std::map& v); + +template +size_t PigeonInternalDeepHash(const std::optional& v); + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v); + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v); + +template +size_t PigeonInternalDeepHash(const T& v) { + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::vector& v) { + size_t result = 1; + for (const auto& item : v) { + result = result * 31 + PigeonInternalDeepHash(item); + } + return result; +} + +template +size_t PigeonInternalDeepHash(const std::map& v) { + size_t result = 0; + for (const auto& kv : v) { + result += ((PigeonInternalDeepHash(kv.first) * 31) ^ + PigeonInternalDeepHash(kv.second)); + } + return result; +} + +size_t PigeonInternalDeepHash(const double& v) { + if (std::isnan(v)) { + // Normalize NaN to a consistent hash. + return std::hash()(std::numeric_limits::quiet_NaN()); + } + if (v == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return std::hash()(0.0); + } + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::optional& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) { + size_t result = v.index(); + if (const double* dv = std::get_if(&v)) { + result = result * 31 + PigeonInternalDeepHash(*dv); + } else if (const ::flutter::EncodableList* lv = + std::get_if<::flutter::EncodableList>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*lv); + } else if (const ::flutter::EncodableMap* mv = + std::get_if<::flutter::EncodableMap>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*mv); + } else { + std::visit( + [&result](const auto& val) { + using T = std::decay_t; + if constexpr (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v) { + result = result * 31 + PigeonInternalDeepHash(val); + } + }, + v); + } + return result; +} + +} // namespace // UnusedClass UnusedClass::UnusedClass() {} @@ -69,6 +277,22 @@ UnusedClass UnusedClass::FromEncodableList(const EncodableList& list) { return decoded; } +bool UnusedClass::operator==(const UnusedClass& other) const { + return PigeonInternalDeepEquals(a_field_, other.a_field_); +} + +bool UnusedClass::operator!=(const UnusedClass& other) const { + return !(*this == other); +} + +size_t UnusedClass::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(a_field_); + return result; +} + +size_t PigeonInternalDeepHash(const UnusedClass& v) { return v.Hash(); } + // AllTypes AllTypes::AllTypes(bool a_bool, int64_t an_int, int64_t an_int64, @@ -337,6 +561,76 @@ AllTypes AllTypes::FromEncodableList(const EncodableList& list) { return decoded; } +bool AllTypes::operator==(const AllTypes& other) const { + return PigeonInternalDeepEquals(a_bool_, other.a_bool_) && + PigeonInternalDeepEquals(an_int_, other.an_int_) && + PigeonInternalDeepEquals(an_int64_, other.an_int64_) && + PigeonInternalDeepEquals(a_double_, other.a_double_) && + PigeonInternalDeepEquals(a_byte_array_, other.a_byte_array_) && + PigeonInternalDeepEquals(a4_byte_array_, other.a4_byte_array_) && + PigeonInternalDeepEquals(a8_byte_array_, other.a8_byte_array_) && + PigeonInternalDeepEquals(a_float_array_, other.a_float_array_) && + PigeonInternalDeepEquals(an_enum_, other.an_enum_) && + PigeonInternalDeepEquals(another_enum_, other.another_enum_) && + PigeonInternalDeepEquals(a_string_, other.a_string_) && + PigeonInternalDeepEquals(an_object_, other.an_object_) && + PigeonInternalDeepEquals(list_, other.list_) && + PigeonInternalDeepEquals(string_list_, other.string_list_) && + PigeonInternalDeepEquals(int_list_, other.int_list_) && + PigeonInternalDeepEquals(double_list_, other.double_list_) && + PigeonInternalDeepEquals(bool_list_, other.bool_list_) && + PigeonInternalDeepEquals(enum_list_, other.enum_list_) && + PigeonInternalDeepEquals(object_list_, other.object_list_) && + PigeonInternalDeepEquals(list_list_, other.list_list_) && + PigeonInternalDeepEquals(map_list_, other.map_list_) && + PigeonInternalDeepEquals(map_, other.map_) && + PigeonInternalDeepEquals(string_map_, other.string_map_) && + PigeonInternalDeepEquals(int_map_, other.int_map_) && + PigeonInternalDeepEquals(enum_map_, other.enum_map_) && + PigeonInternalDeepEquals(object_map_, other.object_map_) && + PigeonInternalDeepEquals(list_map_, other.list_map_) && + PigeonInternalDeepEquals(map_map_, other.map_map_); +} + +bool AllTypes::operator!=(const AllTypes& other) const { + return !(*this == other); +} + +size_t AllTypes::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(a_bool_); + result = result * 31 + PigeonInternalDeepHash(an_int_); + result = result * 31 + PigeonInternalDeepHash(an_int64_); + result = result * 31 + PigeonInternalDeepHash(a_double_); + result = result * 31 + PigeonInternalDeepHash(a_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a4_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a8_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a_float_array_); + result = result * 31 + PigeonInternalDeepHash(an_enum_); + result = result * 31 + PigeonInternalDeepHash(another_enum_); + result = result * 31 + PigeonInternalDeepHash(a_string_); + result = result * 31 + PigeonInternalDeepHash(an_object_); + result = result * 31 + PigeonInternalDeepHash(list_); + result = result * 31 + PigeonInternalDeepHash(string_list_); + result = result * 31 + PigeonInternalDeepHash(int_list_); + result = result * 31 + PigeonInternalDeepHash(double_list_); + result = result * 31 + PigeonInternalDeepHash(bool_list_); + result = result * 31 + PigeonInternalDeepHash(enum_list_); + result = result * 31 + PigeonInternalDeepHash(object_list_); + result = result * 31 + PigeonInternalDeepHash(list_list_); + result = result * 31 + PigeonInternalDeepHash(map_list_); + result = result * 31 + PigeonInternalDeepHash(map_); + result = result * 31 + PigeonInternalDeepHash(string_map_); + result = result * 31 + PigeonInternalDeepHash(int_map_); + result = result * 31 + PigeonInternalDeepHash(enum_map_); + result = result * 31 + PigeonInternalDeepHash(object_map_); + result = result * 31 + PigeonInternalDeepHash(list_map_); + result = result * 31 + PigeonInternalDeepHash(map_map_); + return result; +} + +size_t PigeonInternalDeepHash(const AllTypes& v) { return v.Hash(); } + // AllNullableTypes AllNullableTypes::AllNullableTypes() {} @@ -1187,6 +1481,93 @@ AllNullableTypes AllNullableTypes::FromEncodableList( return decoded; } +bool AllNullableTypes::operator==(const AllNullableTypes& other) const { + return PigeonInternalDeepEquals(a_nullable_bool_, other.a_nullable_bool_) && + PigeonInternalDeepEquals(a_nullable_int_, other.a_nullable_int_) && + PigeonInternalDeepEquals(a_nullable_int64_, other.a_nullable_int64_) && + PigeonInternalDeepEquals(a_nullable_double_, + other.a_nullable_double_) && + PigeonInternalDeepEquals(a_nullable_byte_array_, + other.a_nullable_byte_array_) && + PigeonInternalDeepEquals(a_nullable4_byte_array_, + other.a_nullable4_byte_array_) && + PigeonInternalDeepEquals(a_nullable8_byte_array_, + other.a_nullable8_byte_array_) && + PigeonInternalDeepEquals(a_nullable_float_array_, + other.a_nullable_float_array_) && + PigeonInternalDeepEquals(a_nullable_enum_, other.a_nullable_enum_) && + PigeonInternalDeepEquals(another_nullable_enum_, + other.another_nullable_enum_) && + PigeonInternalDeepEquals(a_nullable_string_, + other.a_nullable_string_) && + PigeonInternalDeepEquals(a_nullable_object_, + other.a_nullable_object_) && + PigeonInternalDeepEquals(all_nullable_types_, + other.all_nullable_types_) && + PigeonInternalDeepEquals(list_, other.list_) && + PigeonInternalDeepEquals(string_list_, other.string_list_) && + PigeonInternalDeepEquals(int_list_, other.int_list_) && + PigeonInternalDeepEquals(double_list_, other.double_list_) && + PigeonInternalDeepEquals(bool_list_, other.bool_list_) && + PigeonInternalDeepEquals(enum_list_, other.enum_list_) && + PigeonInternalDeepEquals(object_list_, other.object_list_) && + PigeonInternalDeepEquals(list_list_, other.list_list_) && + PigeonInternalDeepEquals(map_list_, other.map_list_) && + PigeonInternalDeepEquals(recursive_class_list_, + other.recursive_class_list_) && + PigeonInternalDeepEquals(map_, other.map_) && + PigeonInternalDeepEquals(string_map_, other.string_map_) && + PigeonInternalDeepEquals(int_map_, other.int_map_) && + PigeonInternalDeepEquals(enum_map_, other.enum_map_) && + PigeonInternalDeepEquals(object_map_, other.object_map_) && + PigeonInternalDeepEquals(list_map_, other.list_map_) && + PigeonInternalDeepEquals(map_map_, other.map_map_) && + PigeonInternalDeepEquals(recursive_class_map_, + other.recursive_class_map_); +} + +bool AllNullableTypes::operator!=(const AllNullableTypes& other) const { + return !(*this == other); +} + +size_t AllNullableTypes::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(a_nullable_bool_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_int_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_int64_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_double_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable4_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable8_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_float_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_enum_); + result = result * 31 + PigeonInternalDeepHash(another_nullable_enum_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_string_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_object_); + result = result * 31 + PigeonInternalDeepHash(all_nullable_types_); + result = result * 31 + PigeonInternalDeepHash(list_); + result = result * 31 + PigeonInternalDeepHash(string_list_); + result = result * 31 + PigeonInternalDeepHash(int_list_); + result = result * 31 + PigeonInternalDeepHash(double_list_); + result = result * 31 + PigeonInternalDeepHash(bool_list_); + result = result * 31 + PigeonInternalDeepHash(enum_list_); + result = result * 31 + PigeonInternalDeepHash(object_list_); + result = result * 31 + PigeonInternalDeepHash(list_list_); + result = result * 31 + PigeonInternalDeepHash(map_list_); + result = result * 31 + PigeonInternalDeepHash(recursive_class_list_); + result = result * 31 + PigeonInternalDeepHash(map_); + result = result * 31 + PigeonInternalDeepHash(string_map_); + result = result * 31 + PigeonInternalDeepHash(int_map_); + result = result * 31 + PigeonInternalDeepHash(enum_map_); + result = result * 31 + PigeonInternalDeepHash(object_map_); + result = result * 31 + PigeonInternalDeepHash(list_map_); + result = result * 31 + PigeonInternalDeepHash(map_map_); + result = result * 31 + PigeonInternalDeepHash(recursive_class_map_); + return result; +} + +size_t PigeonInternalDeepHash(const AllNullableTypes& v) { return v.Hash(); } + // AllNullableTypesWithoutRecursion AllNullableTypesWithoutRecursion::AllNullableTypesWithoutRecursion() {} @@ -1873,6 +2254,88 @@ AllNullableTypesWithoutRecursion::FromEncodableList(const EncodableList& list) { return decoded; } +bool AllNullableTypesWithoutRecursion::operator==( + const AllNullableTypesWithoutRecursion& other) const { + return PigeonInternalDeepEquals(a_nullable_bool_, other.a_nullable_bool_) && + PigeonInternalDeepEquals(a_nullable_int_, other.a_nullable_int_) && + PigeonInternalDeepEquals(a_nullable_int64_, other.a_nullable_int64_) && + PigeonInternalDeepEquals(a_nullable_double_, + other.a_nullable_double_) && + PigeonInternalDeepEquals(a_nullable_byte_array_, + other.a_nullable_byte_array_) && + PigeonInternalDeepEquals(a_nullable4_byte_array_, + other.a_nullable4_byte_array_) && + PigeonInternalDeepEquals(a_nullable8_byte_array_, + other.a_nullable8_byte_array_) && + PigeonInternalDeepEquals(a_nullable_float_array_, + other.a_nullable_float_array_) && + PigeonInternalDeepEquals(a_nullable_enum_, other.a_nullable_enum_) && + PigeonInternalDeepEquals(another_nullable_enum_, + other.another_nullable_enum_) && + PigeonInternalDeepEquals(a_nullable_string_, + other.a_nullable_string_) && + PigeonInternalDeepEquals(a_nullable_object_, + other.a_nullable_object_) && + PigeonInternalDeepEquals(list_, other.list_) && + PigeonInternalDeepEquals(string_list_, other.string_list_) && + PigeonInternalDeepEquals(int_list_, other.int_list_) && + PigeonInternalDeepEquals(double_list_, other.double_list_) && + PigeonInternalDeepEquals(bool_list_, other.bool_list_) && + PigeonInternalDeepEquals(enum_list_, other.enum_list_) && + PigeonInternalDeepEquals(object_list_, other.object_list_) && + PigeonInternalDeepEquals(list_list_, other.list_list_) && + PigeonInternalDeepEquals(map_list_, other.map_list_) && + PigeonInternalDeepEquals(map_, other.map_) && + PigeonInternalDeepEquals(string_map_, other.string_map_) && + PigeonInternalDeepEquals(int_map_, other.int_map_) && + PigeonInternalDeepEquals(enum_map_, other.enum_map_) && + PigeonInternalDeepEquals(object_map_, other.object_map_) && + PigeonInternalDeepEquals(list_map_, other.list_map_) && + PigeonInternalDeepEquals(map_map_, other.map_map_); +} + +bool AllNullableTypesWithoutRecursion::operator!=( + const AllNullableTypesWithoutRecursion& other) const { + return !(*this == other); +} + +size_t AllNullableTypesWithoutRecursion::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(a_nullable_bool_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_int_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_int64_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_double_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable4_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable8_byte_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_float_array_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_enum_); + result = result * 31 + PigeonInternalDeepHash(another_nullable_enum_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_string_); + result = result * 31 + PigeonInternalDeepHash(a_nullable_object_); + result = result * 31 + PigeonInternalDeepHash(list_); + result = result * 31 + PigeonInternalDeepHash(string_list_); + result = result * 31 + PigeonInternalDeepHash(int_list_); + result = result * 31 + PigeonInternalDeepHash(double_list_); + result = result * 31 + PigeonInternalDeepHash(bool_list_); + result = result * 31 + PigeonInternalDeepHash(enum_list_); + result = result * 31 + PigeonInternalDeepHash(object_list_); + result = result * 31 + PigeonInternalDeepHash(list_list_); + result = result * 31 + PigeonInternalDeepHash(map_list_); + result = result * 31 + PigeonInternalDeepHash(map_); + result = result * 31 + PigeonInternalDeepHash(string_map_); + result = result * 31 + PigeonInternalDeepHash(int_map_); + result = result * 31 + PigeonInternalDeepHash(enum_map_); + result = result * 31 + PigeonInternalDeepHash(object_map_); + result = result * 31 + PigeonInternalDeepHash(list_map_); + result = result * 31 + PigeonInternalDeepHash(map_map_); + return result; +} + +size_t PigeonInternalDeepHash(const AllNullableTypesWithoutRecursion& v) { + return v.Hash(); +} + // AllClassesWrapper AllClassesWrapper::AllClassesWrapper(const AllNullableTypes& all_nullable_types, @@ -2079,6 +2542,40 @@ AllClassesWrapper AllClassesWrapper::FromEncodableList( return decoded; } +bool AllClassesWrapper::operator==(const AllClassesWrapper& other) const { + return PigeonInternalDeepEquals(all_nullable_types_, + other.all_nullable_types_) && + PigeonInternalDeepEquals( + all_nullable_types_without_recursion_, + other.all_nullable_types_without_recursion_) && + PigeonInternalDeepEquals(all_types_, other.all_types_) && + PigeonInternalDeepEquals(class_list_, other.class_list_) && + PigeonInternalDeepEquals(nullable_class_list_, + other.nullable_class_list_) && + PigeonInternalDeepEquals(class_map_, other.class_map_) && + PigeonInternalDeepEquals(nullable_class_map_, + other.nullable_class_map_); +} + +bool AllClassesWrapper::operator!=(const AllClassesWrapper& other) const { + return !(*this == other); +} + +size_t AllClassesWrapper::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(all_nullable_types_); + result = result * 31 + + PigeonInternalDeepHash(all_nullable_types_without_recursion_); + result = result * 31 + PigeonInternalDeepHash(all_types_); + result = result * 31 + PigeonInternalDeepHash(class_list_); + result = result * 31 + PigeonInternalDeepHash(nullable_class_list_); + result = result * 31 + PigeonInternalDeepHash(class_map_); + result = result * 31 + PigeonInternalDeepHash(nullable_class_map_); + return result; +} + +size_t PigeonInternalDeepHash(const AllClassesWrapper& v) { return v.Hash(); } + // TestMessage TestMessage::TestMessage() {} @@ -2116,10 +2613,26 @@ TestMessage TestMessage::FromEncodableList(const EncodableList& list) { return decoded; } +bool TestMessage::operator==(const TestMessage& other) const { + return PigeonInternalDeepEquals(test_list_, other.test_list_); +} + +bool TestMessage::operator!=(const TestMessage& other) const { + return !(*this == other); +} + +size_t TestMessage::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(test_list_); + return result; +} + +size_t PigeonInternalDeepHash(const TestMessage& v) { return v.Hash(); } + PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {} EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( - uint8_t type, flutter::ByteStreamReader* stream) const { + uint8_t type, ::flutter::ByteStreamReader* stream) const { switch (type) { case 129: { const auto& encodable_enum_arg = ReadValue(stream); @@ -2164,12 +2677,12 @@ EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( std::get(ReadValue(stream)))); } default: - return flutter::StandardCodecSerializer::ReadValueOfType(type, stream); + return ::flutter::StandardCodecSerializer::ReadValueOfType(type, stream); } } void PigeonInternalCodecSerializer::WriteValue( - const EncodableValue& value, flutter::ByteStreamWriter* stream) const { + const EncodableValue& value, ::flutter::ByteStreamWriter* stream) const { if (const CustomEncodableValue* custom_value = std::get_if(&value)) { if (custom_value->type() == typeid(AnEnum)) { @@ -2233,23 +2746,23 @@ void PigeonInternalCodecSerializer::WriteValue( return; } } - flutter::StandardCodecSerializer::WriteValue(value, stream); + ::flutter::StandardCodecSerializer::WriteValue(value, stream); } /// The codec used by HostIntegrationCoreApi. -const flutter::StandardMessageCodec& HostIntegrationCoreApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( +const ::flutter::StandardMessageCodec& HostIntegrationCoreApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( &PigeonInternalCodecSerializer::GetInstance()); } // Sets up an instance of `HostIntegrationCoreApi` to handle messages through // the `binary_messenger`. -void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void HostIntegrationCoreApi::SetUp(::flutter::BinaryMessenger* binary_messenger, HostIntegrationCoreApi* api) { HostIntegrationCoreApi::SetUp(binary_messenger, api, ""); } -void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void HostIntegrationCoreApi::SetUp(::flutter::BinaryMessenger* binary_messenger, HostIntegrationCoreApi* api, const std::string& message_channel_suffix) { const std::string prepended_suffix = @@ -2265,7 +2778,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { std::optional output = api->Noop(); if (output.has_value()) { @@ -2292,7 +2805,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -2328,7 +2841,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { ErrorOr> output = api->ThrowError(); if (output.has_error()) { @@ -2361,7 +2874,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { std::optional output = api->ThrowErrorFromVoid(); if (output.has_value()) { @@ -2388,7 +2901,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { ErrorOr> output = api->ThrowFlutterError(); @@ -2422,7 +2935,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_int_arg = args.at(0); @@ -2456,7 +2969,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_double_arg = args.at(0); @@ -2491,7 +3004,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_bool_arg = args.at(0); @@ -2525,7 +3038,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -2560,7 +3073,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_uint8_list_arg = args.at(0); @@ -2596,7 +3109,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_object_arg = args.at(0); @@ -2630,7 +3143,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_list_arg = args.at(0); @@ -2665,7 +3178,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -2700,7 +3213,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -2736,7 +3249,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -2773,7 +3286,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -2809,7 +3322,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_map_arg = args.at(0); @@ -2843,7 +3356,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -2878,7 +3391,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -2913,7 +3426,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -2948,7 +3461,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -2984,7 +3497,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -3020,7 +3533,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -3056,7 +3569,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -3092,7 +3605,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -3128,7 +3641,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_wrapper_arg = args.at(0); @@ -3165,7 +3678,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_enum_arg = args.at(0); @@ -3201,7 +3714,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_another_enum_arg = args.at(0); @@ -3239,7 +3752,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -3276,7 +3789,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_double_arg = args.at(0); @@ -3312,7 +3825,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_int_arg = args.at(0); @@ -3337,6 +3850,124 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, channel.SetMessageHandler(nullptr); } } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "areAllNullableTypesEqual" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_a_arg = args.at(0); + if (encodable_a_arg.IsNull()) { + reply(WrapError("a_arg unexpectedly null.")); + return; + } + const auto& a_arg = std::any_cast( + std::get(encodable_a_arg)); + const auto& encodable_b_arg = args.at(1); + if (encodable_b_arg.IsNull()) { + reply(WrapError("b_arg unexpectedly null.")); + return; + } + const auto& b_arg = std::any_cast( + std::get(encodable_b_arg)); + ErrorOr output = + api->AreAllNullableTypesEqual(a_arg, b_arg); + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "getAllNullableTypesHash" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_value_arg = args.at(0); + if (encodable_value_arg.IsNull()) { + reply(WrapError("value_arg unexpectedly null.")); + return; + } + const auto& value_arg = std::any_cast( + std::get(encodable_value_arg)); + ErrorOr output = api->GetAllNullableTypesHash(value_arg); + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.pigeon_integration_tests.HostIntegrationCoreApi." + "getAllNullableTypesWithoutRecursionHash" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_value_arg = args.at(0); + if (encodable_value_arg.IsNull()) { + reply(WrapError("value_arg unexpectedly null.")); + return; + } + const auto& value_arg = + std::any_cast( + std::get(encodable_value_arg)); + ErrorOr output = + api->GetAllNullableTypesWithoutRecursionHash(value_arg); + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } { BasicMessageChannel<> channel( binary_messenger, @@ -3347,7 +3978,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -3388,10 +4019,9 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, prepended_suffix, &GetCodec()); if (api != nullptr) { - channel.SetMessageHandler([api]( - const EncodableValue& message, - const flutter::MessageReply& - reply) { + channel.SetMessageHandler([api](const EncodableValue& message, + const ::flutter::MessageReply< + EncodableValue>& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -3434,7 +4064,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_wrapper_arg = args.at(0); @@ -3477,7 +4107,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_nullable_string_arg = args.at(0); @@ -3511,7 +4141,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_bool_arg = args.at(0); @@ -3552,7 +4182,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_bool_arg = args.at(0); @@ -3593,7 +4223,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_int_arg = args.at(0); @@ -3631,7 +4261,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_double_arg = args.at(0); @@ -3669,7 +4299,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_bool_arg = args.at(0); @@ -3707,7 +4337,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_string_arg = args.at(0); @@ -3746,7 +4376,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_uint8_list_arg = args.at(0); @@ -3785,7 +4415,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_object_arg = args.at(0); @@ -3823,7 +4453,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_list_arg = args.at(0); @@ -3862,7 +4492,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -3901,7 +4531,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -3940,7 +4570,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -3979,7 +4609,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -4017,7 +4647,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_map_arg = args.at(0); @@ -4056,7 +4686,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -4094,7 +4724,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -4132,7 +4762,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -4171,7 +4801,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -4210,7 +4840,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -4249,7 +4879,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -4288,7 +4918,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -4327,7 +4957,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -4365,7 +4995,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_enum_arg = args.at(0); @@ -4409,7 +5039,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_another_enum_arg = args.at(0); @@ -4454,7 +5084,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_int_arg = args.at(0); @@ -4493,7 +5123,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_string_arg = args.at(0); @@ -4531,7 +5161,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->NoopAsync([reply](std::optional&& output) { if (output.has_value()) { @@ -4559,7 +5189,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_int_arg = args.at(0); @@ -4595,7 +5225,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_double_arg = args.at(0); @@ -4633,7 +5263,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_bool_arg = args.at(0); @@ -4669,7 +5299,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -4707,7 +5337,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_uint8_list_arg = args.at(0); @@ -4746,7 +5376,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_object_arg = args.at(0); @@ -4783,7 +5413,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_list_arg = args.at(0); @@ -4821,7 +5451,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -4859,7 +5489,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -4897,7 +5527,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_map_arg = args.at(0); @@ -4934,7 +5564,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -4972,7 +5602,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -5010,7 +5640,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -5048,7 +5678,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -5086,7 +5716,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_enum_arg = args.at(0); @@ -5125,7 +5755,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_another_enum_arg = args.at(0); @@ -5163,7 +5793,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->ThrowAsyncError( [reply](ErrorOr>&& output) { @@ -5199,7 +5829,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->ThrowAsyncErrorFromVoid( [reply](std::optional&& output) { @@ -5229,7 +5859,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->ThrowAsyncFlutterError( [reply](ErrorOr>&& output) { @@ -5264,7 +5894,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -5303,7 +5933,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -5346,10 +5976,9 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, prepended_suffix, &GetCodec()); if (api != nullptr) { - channel.SetMessageHandler([api]( - const EncodableValue& message, - const flutter::MessageReply& - reply) { + channel.SetMessageHandler([api](const EncodableValue& message, + const ::flutter::MessageReply< + EncodableValue>& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -5395,7 +6024,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_int_arg = args.at(0); @@ -5436,7 +6065,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_double_arg = args.at(0); @@ -5477,7 +6106,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_bool_arg = args.at(0); @@ -5516,7 +6145,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -5557,7 +6186,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_uint8_list_arg = args.at(0); @@ -5599,7 +6228,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_object_arg = args.at(0); @@ -5639,7 +6268,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_list_arg = args.at(0); @@ -5680,7 +6309,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -5721,7 +6350,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -5762,7 +6391,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_map_arg = args.at(0); @@ -5803,7 +6432,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -5844,7 +6473,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -5885,7 +6514,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -5926,7 +6555,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -5967,7 +6596,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_enum_arg = args.at(0); @@ -6013,7 +6642,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_another_enum_arg = args.at(0); @@ -6058,7 +6687,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { ErrorOr output = api->DefaultIsMainThread(); if (output.has_error()) { @@ -6086,7 +6715,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { ErrorOr output = api->TaskQueueIsBackgroundThread(); if (output.has_error()) { @@ -6113,7 +6742,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->CallFlutterNoop( [reply](std::optional&& output) { @@ -6143,7 +6772,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->CallFlutterThrowError( [reply](ErrorOr>&& output) { @@ -6179,7 +6808,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->CallFlutterThrowErrorFromVoid( [reply](std::optional&& output) { @@ -6209,7 +6838,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -6248,7 +6877,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -6293,7 +6922,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_bool_arg = args.at(0); @@ -6334,10 +6963,9 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, prepended_suffix, &GetCodec()); if (api != nullptr) { - channel.SetMessageHandler([api]( - const EncodableValue& message, - const flutter::MessageReply& - reply) { + channel.SetMessageHandler([api](const EncodableValue& message, + const ::flutter::MessageReply< + EncodableValue>& reply) { try { const auto& args = std::get(message); const auto& encodable_everything_arg = args.at(0); @@ -6383,7 +7011,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_nullable_bool_arg = args.at(0); @@ -6425,7 +7053,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_bool_arg = args.at(0); @@ -6462,7 +7090,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_int_arg = args.at(0); @@ -6500,7 +7128,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_double_arg = args.at(0); @@ -6539,7 +7167,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -6578,7 +7206,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_list_arg = args.at(0); @@ -6616,7 +7244,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_list_arg = args.at(0); @@ -6655,7 +7283,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -6694,7 +7322,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -6733,7 +7361,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -6772,7 +7400,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -6810,7 +7438,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_map_arg = args.at(0); @@ -6848,7 +7476,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -6887,7 +7515,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -6926,7 +7554,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -6965,7 +7593,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -7004,7 +7632,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -7043,7 +7671,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -7082,7 +7710,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -7121,7 +7749,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -7159,7 +7787,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_enum_arg = args.at(0); @@ -7198,7 +7826,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_another_enum_arg = args.at(0); @@ -7237,7 +7865,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_bool_arg = args.at(0); @@ -7276,7 +7904,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_int_arg = args.at(0); @@ -7317,7 +7945,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_double_arg = args.at(0); @@ -7358,7 +7986,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -7399,7 +8027,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_list_arg = args.at(0); @@ -7441,7 +8069,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_list_arg = args.at(0); @@ -7482,7 +8110,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -7523,7 +8151,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -7564,7 +8192,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_list_arg = args.at(0); @@ -7605,7 +8233,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_list_arg = args.at(0); @@ -7646,7 +8274,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_map_arg = args.at(0); @@ -7687,7 +8315,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -7728,7 +8356,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -7769,7 +8397,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -7810,7 +8438,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -7851,7 +8479,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_string_map_arg = args.at(0); @@ -7892,7 +8520,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_int_map_arg = args.at(0); @@ -7933,7 +8561,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_enum_map_arg = args.at(0); @@ -7974,7 +8602,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_class_map_arg = args.at(0); @@ -8015,7 +8643,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_an_enum_arg = args.at(0); @@ -8061,7 +8689,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_another_enum_arg = args.at(0); @@ -8107,7 +8735,7 @@ void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -8154,19 +8782,19 @@ EncodableValue HostIntegrationCoreApi::WrapError(const FlutterError& error) { // Generated class from Pigeon that represents Flutter messages that can be // called from C++. FlutterIntegrationCoreApi::FlutterIntegrationCoreApi( - flutter::BinaryMessenger* binary_messenger) + ::flutter::BinaryMessenger* binary_messenger) : binary_messenger_(binary_messenger), message_channel_suffix_("") {} FlutterIntegrationCoreApi::FlutterIntegrationCoreApi( - flutter::BinaryMessenger* binary_messenger, + ::flutter::BinaryMessenger* binary_messenger, const std::string& message_channel_suffix) : binary_messenger_(binary_messenger), message_channel_suffix_(message_channel_suffix.length() > 0 ? std::string(".") + message_channel_suffix : "") {} -const flutter::StandardMessageCodec& FlutterIntegrationCoreApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( +const ::flutter::StandardMessageCodec& FlutterIntegrationCoreApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( &PigeonInternalCodecSerializer::GetInstance()); } @@ -10148,19 +10776,19 @@ void FlutterIntegrationCoreApi::EchoAsyncString( } /// The codec used by HostTrivialApi. -const flutter::StandardMessageCodec& HostTrivialApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( +const ::flutter::StandardMessageCodec& HostTrivialApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( &PigeonInternalCodecSerializer::GetInstance()); } // Sets up an instance of `HostTrivialApi` to handle messages through the // `binary_messenger`. -void HostTrivialApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void HostTrivialApi::SetUp(::flutter::BinaryMessenger* binary_messenger, HostTrivialApi* api) { HostTrivialApi::SetUp(binary_messenger, api, ""); } -void HostTrivialApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void HostTrivialApi::SetUp(::flutter::BinaryMessenger* binary_messenger, HostTrivialApi* api, const std::string& message_channel_suffix) { const std::string prepended_suffix = @@ -10176,7 +10804,7 @@ void HostTrivialApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { std::optional output = api->Noop(); if (output.has_value()) { @@ -10209,19 +10837,19 @@ EncodableValue HostTrivialApi::WrapError(const FlutterError& error) { } /// The codec used by HostSmallApi. -const flutter::StandardMessageCodec& HostSmallApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( +const ::flutter::StandardMessageCodec& HostSmallApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( &PigeonInternalCodecSerializer::GetInstance()); } // Sets up an instance of `HostSmallApi` to handle messages through the // `binary_messenger`. -void HostSmallApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void HostSmallApi::SetUp(::flutter::BinaryMessenger* binary_messenger, HostSmallApi* api) { HostSmallApi::SetUp(binary_messenger, api, ""); } -void HostSmallApi::SetUp(flutter::BinaryMessenger* binary_messenger, +void HostSmallApi::SetUp(::flutter::BinaryMessenger* binary_messenger, HostSmallApi* api, const std::string& message_channel_suffix) { const std::string prepended_suffix = @@ -10237,7 +10865,7 @@ void HostSmallApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { const auto& args = std::get(message); const auto& encodable_a_string_arg = args.at(0); @@ -10274,7 +10902,7 @@ void HostSmallApi::SetUp(flutter::BinaryMessenger* binary_messenger, if (api != nullptr) { channel.SetMessageHandler( [api](const EncodableValue& message, - const flutter::MessageReply& reply) { + const ::flutter::MessageReply& reply) { try { api->VoidVoid([reply](std::optional&& output) { if (output.has_value()) { @@ -10309,18 +10937,18 @@ EncodableValue HostSmallApi::WrapError(const FlutterError& error) { // Generated class from Pigeon that represents Flutter messages that can be // called from C++. -FlutterSmallApi::FlutterSmallApi(flutter::BinaryMessenger* binary_messenger) +FlutterSmallApi::FlutterSmallApi(::flutter::BinaryMessenger* binary_messenger) : binary_messenger_(binary_messenger), message_channel_suffix_("") {} -FlutterSmallApi::FlutterSmallApi(flutter::BinaryMessenger* binary_messenger, +FlutterSmallApi::FlutterSmallApi(::flutter::BinaryMessenger* binary_messenger, const std::string& message_channel_suffix) : binary_messenger_(binary_messenger), message_channel_suffix_(message_channel_suffix.length() > 0 ? std::string(".") + message_channel_suffix : "") {} -const flutter::StandardMessageCodec& FlutterSmallApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( +const ::flutter::StandardMessageCodec& FlutterSmallApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( &PigeonInternalCodecSerializer::GetInstance()); } diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h index 450a1dfcf068..24ca4540d6a8 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h @@ -28,17 +28,17 @@ class FlutterError { explicit FlutterError(const std::string& code, const std::string& message) : code_(code), message_(message) {} explicit FlutterError(const std::string& code, const std::string& message, - const flutter::EncodableValue& details) + const ::flutter::EncodableValue& details) : code_(code), message_(message), details_(details) {} const std::string& code() const { return code_; } const std::string& message() const { return message_; } - const flutter::EncodableValue& details() const { return details_; } + const ::flutter::EncodableValue& details() const { return details_; } private: std::string code_; std::string message_; - flutter::EncodableValue details_; + ::flutter::EncodableValue details_; }; template @@ -82,15 +82,21 @@ class UnusedClass { UnusedClass(); // Constructs an object setting all fields. - explicit UnusedClass(const flutter::EncodableValue* a_field); + explicit UnusedClass(const ::flutter::EncodableValue* a_field); - const flutter::EncodableValue* a_field() const; - void set_a_field(const flutter::EncodableValue* value_arg); - void set_a_field(const flutter::EncodableValue& value_arg); + const ::flutter::EncodableValue* a_field() const; + void set_a_field(const ::flutter::EncodableValue* value_arg); + void set_a_field(const ::flutter::EncodableValue& value_arg); + + bool operator==(const UnusedClass& other) const; + bool operator!=(const UnusedClass& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; private: - static UnusedClass FromEncodableList(const flutter::EncodableList& list); - flutter::EncodableList ToEncodableList() const; + static UnusedClass FromEncodableList(const ::flutter::EncodableList& list); + ::flutter::EncodableList ToEncodableList() const; friend class HostIntegrationCoreApi; friend class FlutterIntegrationCoreApi; friend class HostTrivialApi; @@ -98,7 +104,7 @@ class UnusedClass { friend class FlutterSmallApi; friend class PigeonInternalCodecSerializer; friend class CoreTestsTest; - std::optional a_field_; + std::optional<::flutter::EncodableValue> a_field_; }; // A class containing all supported types. @@ -114,23 +120,23 @@ class AllTypes { const std::vector& a_float_array, const AnEnum& an_enum, const AnotherEnum& another_enum, const std::string& a_string, - const flutter::EncodableValue& an_object, - const flutter::EncodableList& list, - const flutter::EncodableList& string_list, - const flutter::EncodableList& int_list, - const flutter::EncodableList& double_list, - const flutter::EncodableList& bool_list, - const flutter::EncodableList& enum_list, - const flutter::EncodableList& object_list, - const flutter::EncodableList& list_list, - const flutter::EncodableList& map_list, - const flutter::EncodableMap& map, - const flutter::EncodableMap& string_map, - const flutter::EncodableMap& int_map, - const flutter::EncodableMap& enum_map, - const flutter::EncodableMap& object_map, - const flutter::EncodableMap& list_map, - const flutter::EncodableMap& map_map); + const ::flutter::EncodableValue& an_object, + const ::flutter::EncodableList& list, + const ::flutter::EncodableList& string_list, + const ::flutter::EncodableList& int_list, + const ::flutter::EncodableList& double_list, + const ::flutter::EncodableList& bool_list, + const ::flutter::EncodableList& enum_list, + const ::flutter::EncodableList& object_list, + const ::flutter::EncodableList& list_list, + const ::flutter::EncodableList& map_list, + const ::flutter::EncodableMap& map, + const ::flutter::EncodableMap& string_map, + const ::flutter::EncodableMap& int_map, + const ::flutter::EncodableMap& enum_map, + const ::flutter::EncodableMap& object_map, + const ::flutter::EncodableMap& list_map, + const ::flutter::EncodableMap& map_map); bool a_bool() const; void set_a_bool(bool value_arg); @@ -165,60 +171,66 @@ class AllTypes { const std::string& a_string() const; void set_a_string(std::string_view value_arg); - const flutter::EncodableValue& an_object() const; - void set_an_object(const flutter::EncodableValue& value_arg); + const ::flutter::EncodableValue& an_object() const; + void set_an_object(const ::flutter::EncodableValue& value_arg); + + const ::flutter::EncodableList& list() const; + void set_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& list() const; - void set_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& string_list() const; + void set_string_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& string_list() const; - void set_string_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& int_list() const; + void set_int_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& int_list() const; - void set_int_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& double_list() const; + void set_double_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& double_list() const; - void set_double_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& bool_list() const; + void set_bool_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& bool_list() const; - void set_bool_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& enum_list() const; + void set_enum_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& enum_list() const; - void set_enum_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& object_list() const; + void set_object_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& object_list() const; - void set_object_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& list_list() const; + void set_list_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& list_list() const; - void set_list_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& map_list() const; + void set_map_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList& map_list() const; - void set_map_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableMap& map() const; + void set_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& map() const; - void set_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap& string_map() const; + void set_string_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& string_map() const; - void set_string_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap& int_map() const; + void set_int_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& int_map() const; - void set_int_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap& enum_map() const; + void set_enum_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& enum_map() const; - void set_enum_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap& object_map() const; + void set_object_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& object_map() const; - void set_object_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap& list_map() const; + void set_list_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& list_map() const; - void set_list_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap& map_map() const; + void set_map_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& map_map() const; - void set_map_map(const flutter::EncodableMap& value_arg); + bool operator==(const AllTypes& other) const; + bool operator!=(const AllTypes& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; private: - static AllTypes FromEncodableList(const flutter::EncodableList& list); - flutter::EncodableList ToEncodableList() const; + static AllTypes FromEncodableList(const ::flutter::EncodableList& list); + ::flutter::EncodableList ToEncodableList() const; friend class AllClassesWrapper; friend class HostIntegrationCoreApi; friend class FlutterIntegrationCoreApi; @@ -238,23 +250,23 @@ class AllTypes { AnEnum an_enum_; AnotherEnum another_enum_; std::string a_string_; - flutter::EncodableValue an_object_; - flutter::EncodableList list_; - flutter::EncodableList string_list_; - flutter::EncodableList int_list_; - flutter::EncodableList double_list_; - flutter::EncodableList bool_list_; - flutter::EncodableList enum_list_; - flutter::EncodableList object_list_; - flutter::EncodableList list_list_; - flutter::EncodableList map_list_; - flutter::EncodableMap map_; - flutter::EncodableMap string_map_; - flutter::EncodableMap int_map_; - flutter::EncodableMap enum_map_; - flutter::EncodableMap object_map_; - flutter::EncodableMap list_map_; - flutter::EncodableMap map_map_; + ::flutter::EncodableValue an_object_; + ::flutter::EncodableList list_; + ::flutter::EncodableList string_list_; + ::flutter::EncodableList int_list_; + ::flutter::EncodableList double_list_; + ::flutter::EncodableList bool_list_; + ::flutter::EncodableList enum_list_; + ::flutter::EncodableList object_list_; + ::flutter::EncodableList list_list_; + ::flutter::EncodableList map_list_; + ::flutter::EncodableMap map_; + ::flutter::EncodableMap string_map_; + ::flutter::EncodableMap int_map_; + ::flutter::EncodableMap enum_map_; + ::flutter::EncodableMap object_map_; + ::flutter::EncodableMap list_map_; + ::flutter::EncodableMap map_map_; }; // A class containing all supported nullable types. @@ -275,25 +287,26 @@ class AllNullableTypes { const std::vector* a_nullable_float_array, const AnEnum* a_nullable_enum, const AnotherEnum* another_nullable_enum, const std::string* a_nullable_string, - const flutter::EncodableValue* a_nullable_object, + const ::flutter::EncodableValue* a_nullable_object, const AllNullableTypes* all_nullable_types, - const flutter::EncodableList* list, - const flutter::EncodableList* string_list, - const flutter::EncodableList* int_list, - const flutter::EncodableList* double_list, - const flutter::EncodableList* bool_list, - const flutter::EncodableList* enum_list, - const flutter::EncodableList* object_list, - const flutter::EncodableList* list_list, - const flutter::EncodableList* map_list, - const flutter::EncodableList* recursive_class_list, - const flutter::EncodableMap* map, const flutter::EncodableMap* string_map, - const flutter::EncodableMap* int_map, - const flutter::EncodableMap* enum_map, - const flutter::EncodableMap* object_map, - const flutter::EncodableMap* list_map, - const flutter::EncodableMap* map_map, - const flutter::EncodableMap* recursive_class_map); + const ::flutter::EncodableList* list, + const ::flutter::EncodableList* string_list, + const ::flutter::EncodableList* int_list, + const ::flutter::EncodableList* double_list, + const ::flutter::EncodableList* bool_list, + const ::flutter::EncodableList* enum_list, + const ::flutter::EncodableList* object_list, + const ::flutter::EncodableList* list_list, + const ::flutter::EncodableList* map_list, + const ::flutter::EncodableList* recursive_class_list, + const ::flutter::EncodableMap* map, + const ::flutter::EncodableMap* string_map, + const ::flutter::EncodableMap* int_map, + const ::flutter::EncodableMap* enum_map, + const ::flutter::EncodableMap* object_map, + const ::flutter::EncodableMap* list_map, + const ::flutter::EncodableMap* map_map, + const ::flutter::EncodableMap* recursive_class_map); ~AllNullableTypes() = default; AllNullableTypes(const AllNullableTypes& other); @@ -344,89 +357,96 @@ class AllNullableTypes { void set_a_nullable_string(const std::string_view* value_arg); void set_a_nullable_string(std::string_view value_arg); - const flutter::EncodableValue* a_nullable_object() const; - void set_a_nullable_object(const flutter::EncodableValue* value_arg); - void set_a_nullable_object(const flutter::EncodableValue& value_arg); + const ::flutter::EncodableValue* a_nullable_object() const; + void set_a_nullable_object(const ::flutter::EncodableValue* value_arg); + void set_a_nullable_object(const ::flutter::EncodableValue& value_arg); const AllNullableTypes* all_nullable_types() const; void set_all_nullable_types(const AllNullableTypes* value_arg); void set_all_nullable_types(const AllNullableTypes& value_arg); - const flutter::EncodableList* list() const; - void set_list(const flutter::EncodableList* value_arg); - void set_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* list() const; + void set_list(const ::flutter::EncodableList* value_arg); + void set_list(const ::flutter::EncodableList& value_arg); + + const ::flutter::EncodableList* string_list() const; + void set_string_list(const ::flutter::EncodableList* value_arg); + void set_string_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* string_list() const; - void set_string_list(const flutter::EncodableList* value_arg); - void set_string_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* int_list() const; + void set_int_list(const ::flutter::EncodableList* value_arg); + void set_int_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* int_list() const; - void set_int_list(const flutter::EncodableList* value_arg); - void set_int_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* double_list() const; + void set_double_list(const ::flutter::EncodableList* value_arg); + void set_double_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* double_list() const; - void set_double_list(const flutter::EncodableList* value_arg); - void set_double_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* bool_list() const; + void set_bool_list(const ::flutter::EncodableList* value_arg); + void set_bool_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* bool_list() const; - void set_bool_list(const flutter::EncodableList* value_arg); - void set_bool_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* enum_list() const; + void set_enum_list(const ::flutter::EncodableList* value_arg); + void set_enum_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* enum_list() const; - void set_enum_list(const flutter::EncodableList* value_arg); - void set_enum_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* object_list() const; + void set_object_list(const ::flutter::EncodableList* value_arg); + void set_object_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* object_list() const; - void set_object_list(const flutter::EncodableList* value_arg); - void set_object_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* list_list() const; + void set_list_list(const ::flutter::EncodableList* value_arg); + void set_list_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* list_list() const; - void set_list_list(const flutter::EncodableList* value_arg); - void set_list_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* map_list() const; + void set_map_list(const ::flutter::EncodableList* value_arg); + void set_map_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* map_list() const; - void set_map_list(const flutter::EncodableList* value_arg); - void set_map_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* recursive_class_list() const; + void set_recursive_class_list(const ::flutter::EncodableList* value_arg); + void set_recursive_class_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* recursive_class_list() const; - void set_recursive_class_list(const flutter::EncodableList* value_arg); - void set_recursive_class_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableMap* map() const; + void set_map(const ::flutter::EncodableMap* value_arg); + void set_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* map() const; - void set_map(const flutter::EncodableMap* value_arg); - void set_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* string_map() const; + void set_string_map(const ::flutter::EncodableMap* value_arg); + void set_string_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* string_map() const; - void set_string_map(const flutter::EncodableMap* value_arg); - void set_string_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* int_map() const; + void set_int_map(const ::flutter::EncodableMap* value_arg); + void set_int_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* int_map() const; - void set_int_map(const flutter::EncodableMap* value_arg); - void set_int_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* enum_map() const; + void set_enum_map(const ::flutter::EncodableMap* value_arg); + void set_enum_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* enum_map() const; - void set_enum_map(const flutter::EncodableMap* value_arg); - void set_enum_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* object_map() const; + void set_object_map(const ::flutter::EncodableMap* value_arg); + void set_object_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* object_map() const; - void set_object_map(const flutter::EncodableMap* value_arg); - void set_object_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* list_map() const; + void set_list_map(const ::flutter::EncodableMap* value_arg); + void set_list_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* list_map() const; - void set_list_map(const flutter::EncodableMap* value_arg); - void set_list_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* map_map() const; + void set_map_map(const ::flutter::EncodableMap* value_arg); + void set_map_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* map_map() const; - void set_map_map(const flutter::EncodableMap* value_arg); - void set_map_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* recursive_class_map() const; + void set_recursive_class_map(const ::flutter::EncodableMap* value_arg); + void set_recursive_class_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* recursive_class_map() const; - void set_recursive_class_map(const flutter::EncodableMap* value_arg); - void set_recursive_class_map(const flutter::EncodableMap& value_arg); + bool operator==(const AllNullableTypes& other) const; + bool operator!=(const AllNullableTypes& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; private: - static AllNullableTypes FromEncodableList(const flutter::EncodableList& list); - flutter::EncodableList ToEncodableList() const; + static AllNullableTypes FromEncodableList( + const ::flutter::EncodableList& list); + ::flutter::EncodableList ToEncodableList() const; friend class AllClassesWrapper; friend class HostIntegrationCoreApi; friend class FlutterIntegrationCoreApi; @@ -446,26 +466,26 @@ class AllNullableTypes { std::optional a_nullable_enum_; std::optional another_nullable_enum_; std::optional a_nullable_string_; - std::optional a_nullable_object_; + std::optional<::flutter::EncodableValue> a_nullable_object_; std::unique_ptr all_nullable_types_; - std::optional list_; - std::optional string_list_; - std::optional int_list_; - std::optional double_list_; - std::optional bool_list_; - std::optional enum_list_; - std::optional object_list_; - std::optional list_list_; - std::optional map_list_; - std::optional recursive_class_list_; - std::optional map_; - std::optional string_map_; - std::optional int_map_; - std::optional enum_map_; - std::optional object_map_; - std::optional list_map_; - std::optional map_map_; - std::optional recursive_class_map_; + std::optional<::flutter::EncodableList> list_; + std::optional<::flutter::EncodableList> string_list_; + std::optional<::flutter::EncodableList> int_list_; + std::optional<::flutter::EncodableList> double_list_; + std::optional<::flutter::EncodableList> bool_list_; + std::optional<::flutter::EncodableList> enum_list_; + std::optional<::flutter::EncodableList> object_list_; + std::optional<::flutter::EncodableList> list_list_; + std::optional<::flutter::EncodableList> map_list_; + std::optional<::flutter::EncodableList> recursive_class_list_; + std::optional<::flutter::EncodableMap> map_; + std::optional<::flutter::EncodableMap> string_map_; + std::optional<::flutter::EncodableMap> int_map_; + std::optional<::flutter::EncodableMap> enum_map_; + std::optional<::flutter::EncodableMap> object_map_; + std::optional<::flutter::EncodableMap> list_map_; + std::optional<::flutter::EncodableMap> map_map_; + std::optional<::flutter::EncodableMap> recursive_class_map_; }; // The primary purpose for this class is to ensure coverage of Swift structs @@ -488,22 +508,23 @@ class AllNullableTypesWithoutRecursion { const std::vector* a_nullable_float_array, const AnEnum* a_nullable_enum, const AnotherEnum* another_nullable_enum, const std::string* a_nullable_string, - const flutter::EncodableValue* a_nullable_object, - const flutter::EncodableList* list, - const flutter::EncodableList* string_list, - const flutter::EncodableList* int_list, - const flutter::EncodableList* double_list, - const flutter::EncodableList* bool_list, - const flutter::EncodableList* enum_list, - const flutter::EncodableList* object_list, - const flutter::EncodableList* list_list, - const flutter::EncodableList* map_list, const flutter::EncodableMap* map, - const flutter::EncodableMap* string_map, - const flutter::EncodableMap* int_map, - const flutter::EncodableMap* enum_map, - const flutter::EncodableMap* object_map, - const flutter::EncodableMap* list_map, - const flutter::EncodableMap* map_map); + const ::flutter::EncodableValue* a_nullable_object, + const ::flutter::EncodableList* list, + const ::flutter::EncodableList* string_list, + const ::flutter::EncodableList* int_list, + const ::flutter::EncodableList* double_list, + const ::flutter::EncodableList* bool_list, + const ::flutter::EncodableList* enum_list, + const ::flutter::EncodableList* object_list, + const ::flutter::EncodableList* list_list, + const ::flutter::EncodableList* map_list, + const ::flutter::EncodableMap* map, + const ::flutter::EncodableMap* string_map, + const ::flutter::EncodableMap* int_map, + const ::flutter::EncodableMap* enum_map, + const ::flutter::EncodableMap* object_map, + const ::flutter::EncodableMap* list_map, + const ::flutter::EncodableMap* map_map); const bool* a_nullable_bool() const; void set_a_nullable_bool(const bool* value_arg); @@ -549,78 +570,84 @@ class AllNullableTypesWithoutRecursion { void set_a_nullable_string(const std::string_view* value_arg); void set_a_nullable_string(std::string_view value_arg); - const flutter::EncodableValue* a_nullable_object() const; - void set_a_nullable_object(const flutter::EncodableValue* value_arg); - void set_a_nullable_object(const flutter::EncodableValue& value_arg); + const ::flutter::EncodableValue* a_nullable_object() const; + void set_a_nullable_object(const ::flutter::EncodableValue* value_arg); + void set_a_nullable_object(const ::flutter::EncodableValue& value_arg); - const flutter::EncodableList* list() const; - void set_list(const flutter::EncodableList* value_arg); - void set_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* list() const; + void set_list(const ::flutter::EncodableList* value_arg); + void set_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* string_list() const; - void set_string_list(const flutter::EncodableList* value_arg); - void set_string_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* string_list() const; + void set_string_list(const ::flutter::EncodableList* value_arg); + void set_string_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* int_list() const; - void set_int_list(const flutter::EncodableList* value_arg); - void set_int_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* int_list() const; + void set_int_list(const ::flutter::EncodableList* value_arg); + void set_int_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* double_list() const; - void set_double_list(const flutter::EncodableList* value_arg); - void set_double_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* double_list() const; + void set_double_list(const ::flutter::EncodableList* value_arg); + void set_double_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* bool_list() const; - void set_bool_list(const flutter::EncodableList* value_arg); - void set_bool_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* bool_list() const; + void set_bool_list(const ::flutter::EncodableList* value_arg); + void set_bool_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* enum_list() const; - void set_enum_list(const flutter::EncodableList* value_arg); - void set_enum_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* enum_list() const; + void set_enum_list(const ::flutter::EncodableList* value_arg); + void set_enum_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* object_list() const; - void set_object_list(const flutter::EncodableList* value_arg); - void set_object_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* object_list() const; + void set_object_list(const ::flutter::EncodableList* value_arg); + void set_object_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* list_list() const; - void set_list_list(const flutter::EncodableList* value_arg); - void set_list_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* list_list() const; + void set_list_list(const ::flutter::EncodableList* value_arg); + void set_list_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* map_list() const; - void set_map_list(const flutter::EncodableList* value_arg); - void set_map_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* map_list() const; + void set_map_list(const ::flutter::EncodableList* value_arg); + void set_map_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableMap* map() const; - void set_map(const flutter::EncodableMap* value_arg); - void set_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* map() const; + void set_map(const ::flutter::EncodableMap* value_arg); + void set_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* string_map() const; - void set_string_map(const flutter::EncodableMap* value_arg); - void set_string_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* string_map() const; + void set_string_map(const ::flutter::EncodableMap* value_arg); + void set_string_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* int_map() const; - void set_int_map(const flutter::EncodableMap* value_arg); - void set_int_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* int_map() const; + void set_int_map(const ::flutter::EncodableMap* value_arg); + void set_int_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* enum_map() const; - void set_enum_map(const flutter::EncodableMap* value_arg); - void set_enum_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* enum_map() const; + void set_enum_map(const ::flutter::EncodableMap* value_arg); + void set_enum_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* object_map() const; - void set_object_map(const flutter::EncodableMap* value_arg); - void set_object_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* object_map() const; + void set_object_map(const ::flutter::EncodableMap* value_arg); + void set_object_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* list_map() const; - void set_list_map(const flutter::EncodableMap* value_arg); - void set_list_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* list_map() const; + void set_list_map(const ::flutter::EncodableMap* value_arg); + void set_list_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* map_map() const; - void set_map_map(const flutter::EncodableMap* value_arg); - void set_map_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* map_map() const; + void set_map_map(const ::flutter::EncodableMap* value_arg); + void set_map_map(const ::flutter::EncodableMap& value_arg); + + bool operator==(const AllNullableTypesWithoutRecursion& other) const; + bool operator!=(const AllNullableTypesWithoutRecursion& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; private: static AllNullableTypesWithoutRecursion FromEncodableList( - const flutter::EncodableList& list); - flutter::EncodableList ToEncodableList() const; + const ::flutter::EncodableList& list); + ::flutter::EncodableList ToEncodableList() const; friend class AllClassesWrapper; friend class HostIntegrationCoreApi; friend class FlutterIntegrationCoreApi; @@ -640,23 +667,23 @@ class AllNullableTypesWithoutRecursion { std::optional a_nullable_enum_; std::optional another_nullable_enum_; std::optional a_nullable_string_; - std::optional a_nullable_object_; - std::optional list_; - std::optional string_list_; - std::optional int_list_; - std::optional double_list_; - std::optional bool_list_; - std::optional enum_list_; - std::optional object_list_; - std::optional list_list_; - std::optional map_list_; - std::optional map_; - std::optional string_map_; - std::optional int_map_; - std::optional enum_map_; - std::optional object_map_; - std::optional list_map_; - std::optional map_map_; + std::optional<::flutter::EncodableValue> a_nullable_object_; + std::optional<::flutter::EncodableList> list_; + std::optional<::flutter::EncodableList> string_list_; + std::optional<::flutter::EncodableList> int_list_; + std::optional<::flutter::EncodableList> double_list_; + std::optional<::flutter::EncodableList> bool_list_; + std::optional<::flutter::EncodableList> enum_list_; + std::optional<::flutter::EncodableList> object_list_; + std::optional<::flutter::EncodableList> list_list_; + std::optional<::flutter::EncodableList> map_list_; + std::optional<::flutter::EncodableMap> map_; + std::optional<::flutter::EncodableMap> string_map_; + std::optional<::flutter::EncodableMap> int_map_; + std::optional<::flutter::EncodableMap> enum_map_; + std::optional<::flutter::EncodableMap> object_map_; + std::optional<::flutter::EncodableMap> list_map_; + std::optional<::flutter::EncodableMap> map_map_; }; // A class for testing nested class handling. @@ -670,18 +697,18 @@ class AllClassesWrapper { public: // Constructs an object setting all non-nullable fields. explicit AllClassesWrapper(const AllNullableTypes& all_nullable_types, - const flutter::EncodableList& class_list, - const flutter::EncodableMap& class_map); + const ::flutter::EncodableList& class_list, + const ::flutter::EncodableMap& class_map); // Constructs an object setting all fields. - explicit AllClassesWrapper(const AllNullableTypes& all_nullable_types, - const AllNullableTypesWithoutRecursion* - all_nullable_types_without_recursion, - const AllTypes* all_types, - const flutter::EncodableList& class_list, - const flutter::EncodableList* nullable_class_list, - const flutter::EncodableMap& class_map, - const flutter::EncodableMap* nullable_class_map); + explicit AllClassesWrapper( + const AllNullableTypes& all_nullable_types, + const AllNullableTypesWithoutRecursion* + all_nullable_types_without_recursion, + const AllTypes* all_types, const ::flutter::EncodableList& class_list, + const ::flutter::EncodableList* nullable_class_list, + const ::flutter::EncodableMap& class_map, + const ::flutter::EncodableMap* nullable_class_map); ~AllClassesWrapper() = default; AllClassesWrapper(const AllClassesWrapper& other); @@ -702,24 +729,30 @@ class AllClassesWrapper { void set_all_types(const AllTypes* value_arg); void set_all_types(const AllTypes& value_arg); - const flutter::EncodableList& class_list() const; - void set_class_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList& class_list() const; + void set_class_list(const ::flutter::EncodableList& value_arg); + + const ::flutter::EncodableList* nullable_class_list() const; + void set_nullable_class_list(const ::flutter::EncodableList* value_arg); + void set_nullable_class_list(const ::flutter::EncodableList& value_arg); - const flutter::EncodableList* nullable_class_list() const; - void set_nullable_class_list(const flutter::EncodableList* value_arg); - void set_nullable_class_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableMap& class_map() const; + void set_class_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap& class_map() const; - void set_class_map(const flutter::EncodableMap& value_arg); + const ::flutter::EncodableMap* nullable_class_map() const; + void set_nullable_class_map(const ::flutter::EncodableMap* value_arg); + void set_nullable_class_map(const ::flutter::EncodableMap& value_arg); - const flutter::EncodableMap* nullable_class_map() const; - void set_nullable_class_map(const flutter::EncodableMap* value_arg); - void set_nullable_class_map(const flutter::EncodableMap& value_arg); + bool operator==(const AllClassesWrapper& other) const; + bool operator!=(const AllClassesWrapper& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; private: static AllClassesWrapper FromEncodableList( - const flutter::EncodableList& list); - flutter::EncodableList ToEncodableList() const; + const ::flutter::EncodableList& list); + ::flutter::EncodableList ToEncodableList() const; friend class HostIntegrationCoreApi; friend class FlutterIntegrationCoreApi; friend class HostTrivialApi; @@ -731,10 +764,10 @@ class AllClassesWrapper { std::unique_ptr all_nullable_types_without_recursion_; std::unique_ptr all_types_; - flutter::EncodableList class_list_; - std::optional nullable_class_list_; - flutter::EncodableMap class_map_; - std::optional nullable_class_map_; + ::flutter::EncodableList class_list_; + std::optional<::flutter::EncodableList> nullable_class_list_; + ::flutter::EncodableMap class_map_; + std::optional<::flutter::EncodableMap> nullable_class_map_; }; // A data class containing a List, used in unit tests. @@ -746,15 +779,21 @@ class TestMessage { TestMessage(); // Constructs an object setting all fields. - explicit TestMessage(const flutter::EncodableList* test_list); + explicit TestMessage(const ::flutter::EncodableList* test_list); - const flutter::EncodableList* test_list() const; - void set_test_list(const flutter::EncodableList* value_arg); - void set_test_list(const flutter::EncodableList& value_arg); + const ::flutter::EncodableList* test_list() const; + void set_test_list(const ::flutter::EncodableList* value_arg); + void set_test_list(const ::flutter::EncodableList& value_arg); + + bool operator==(const TestMessage& other) const; + bool operator!=(const TestMessage& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; private: - static TestMessage FromEncodableList(const flutter::EncodableList& list); - flutter::EncodableList ToEncodableList() const; + static TestMessage FromEncodableList(const ::flutter::EncodableList& list); + ::flutter::EncodableList ToEncodableList() const; friend class HostIntegrationCoreApi; friend class FlutterIntegrationCoreApi; friend class HostTrivialApi; @@ -762,10 +801,11 @@ class TestMessage { friend class FlutterSmallApi; friend class PigeonInternalCodecSerializer; friend class CoreTestsTest; - std::optional test_list_; + std::optional<::flutter::EncodableList> test_list_; }; -class PigeonInternalCodecSerializer : public flutter::StandardCodecSerializer { +class PigeonInternalCodecSerializer + : public ::flutter::StandardCodecSerializer { public: PigeonInternalCodecSerializer(); inline static PigeonInternalCodecSerializer& GetInstance() { @@ -773,12 +813,12 @@ class PigeonInternalCodecSerializer : public flutter::StandardCodecSerializer { return sInstance; } - void WriteValue(const flutter::EncodableValue& value, - flutter::ByteStreamWriter* stream) const override; + void WriteValue(const ::flutter::EncodableValue& value, + ::flutter::ByteStreamWriter* stream) const override; protected: - flutter::EncodableValue ReadValueOfType( - uint8_t type, flutter::ByteStreamReader* stream) const override; + ::flutter::EncodableValue ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const override; }; // The core interface that each host language plugin must implement in @@ -797,11 +837,11 @@ class HostIntegrationCoreApi { // Returns the passed object, to test serialization and deserialization. virtual ErrorOr EchoAllTypes(const AllTypes& everything) = 0; // Returns an error, to test error handling. - virtual ErrorOr> ThrowError() = 0; + virtual ErrorOr> ThrowError() = 0; // Returns an error from a void function, to test error handling. virtual std::optional ThrowErrorFromVoid() = 0; // Returns a Flutter error, to test error handling. - virtual ErrorOr> + virtual ErrorOr> ThrowFlutterError() = 0; // Returns passed in int. virtual ErrorOr EchoInt(int64_t an_int) = 0; @@ -815,50 +855,50 @@ class HostIntegrationCoreApi { virtual ErrorOr> EchoUint8List( const std::vector& a_uint8_list) = 0; // Returns the passed in generic Object. - virtual ErrorOr EchoObject( - const flutter::EncodableValue& an_object) = 0; + virtual ErrorOr<::flutter::EncodableValue> EchoObject( + const ::flutter::EncodableValue& an_object) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr EchoList( - const flutter::EncodableList& list) = 0; + virtual ErrorOr<::flutter::EncodableList> EchoList( + const ::flutter::EncodableList& list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr EchoEnumList( - const flutter::EncodableList& enum_list) = 0; + virtual ErrorOr<::flutter::EncodableList> EchoEnumList( + const ::flutter::EncodableList& enum_list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr EchoClassList( - const flutter::EncodableList& class_list) = 0; + virtual ErrorOr<::flutter::EncodableList> EchoClassList( + const ::flutter::EncodableList& class_list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr EchoNonNullEnumList( - const flutter::EncodableList& enum_list) = 0; + virtual ErrorOr<::flutter::EncodableList> EchoNonNullEnumList( + const ::flutter::EncodableList& enum_list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr EchoNonNullClassList( - const flutter::EncodableList& class_list) = 0; + virtual ErrorOr<::flutter::EncodableList> EchoNonNullClassList( + const ::flutter::EncodableList& class_list) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoMap( - const flutter::EncodableMap& map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoMap( + const ::flutter::EncodableMap& map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoStringMap( - const flutter::EncodableMap& string_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoStringMap( + const ::flutter::EncodableMap& string_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoIntMap( - const flutter::EncodableMap& int_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoIntMap( + const ::flutter::EncodableMap& int_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoEnumMap( - const flutter::EncodableMap& enum_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoEnumMap( + const ::flutter::EncodableMap& enum_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoClassMap( - const flutter::EncodableMap& class_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoClassMap( + const ::flutter::EncodableMap& class_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoNonNullStringMap( - const flutter::EncodableMap& string_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoNonNullStringMap( + const ::flutter::EncodableMap& string_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoNonNullIntMap( - const flutter::EncodableMap& int_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoNonNullIntMap( + const ::flutter::EncodableMap& int_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoNonNullEnumMap( - const flutter::EncodableMap& enum_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoNonNullEnumMap( + const ::flutter::EncodableMap& enum_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr EchoNonNullClassMap( - const flutter::EncodableMap& class_map) = 0; + virtual ErrorOr<::flutter::EncodableMap> EchoNonNullClassMap( + const ::flutter::EncodableMap& class_map) = 0; // Returns the passed class to test nested class serialization and // deserialization. virtual ErrorOr EchoClassWrapper( @@ -875,6 +915,15 @@ class HostIntegrationCoreApi { virtual ErrorOr EchoOptionalDefaultDouble(double a_double) = 0; // Returns passed in int. virtual ErrorOr EchoRequiredInt(int64_t an_int) = 0; + // Returns the result of platform-side equality check. + virtual ErrorOr AreAllNullableTypesEqual(const AllNullableTypes& a, + const AllNullableTypes& b) = 0; + // Returns the platform-side hash code for the given object. + virtual ErrorOr GetAllNullableTypesHash( + const AllNullableTypes& value) = 0; + // Returns the platform-side hash code for the given object. + virtual ErrorOr GetAllNullableTypesWithoutRecursionHash( + const AllNullableTypesWithoutRecursion& value) = 0; // Returns the passed object, to test serialization and deserialization. virtual ErrorOr> EchoAllNullableTypes( const AllNullableTypes* everything) = 0; @@ -915,50 +964,50 @@ class HostIntegrationCoreApi { virtual ErrorOr>> EchoNullableUint8List( const std::vector* a_nullable_uint8_list) = 0; // Returns the passed in generic Object. - virtual ErrorOr> EchoNullableObject( - const flutter::EncodableValue* a_nullable_object) = 0; + virtual ErrorOr> EchoNullableObject( + const ::flutter::EncodableValue* a_nullable_object) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr> EchoNullableList( - const flutter::EncodableList* a_nullable_list) = 0; + virtual ErrorOr> EchoNullableList( + const ::flutter::EncodableList* a_nullable_list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr> EchoNullableEnumList( - const flutter::EncodableList* enum_list) = 0; + virtual ErrorOr> EchoNullableEnumList( + const ::flutter::EncodableList* enum_list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr> EchoNullableClassList( - const flutter::EncodableList* class_list) = 0; + virtual ErrorOr> + EchoNullableClassList(const ::flutter::EncodableList* class_list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr> - EchoNullableNonNullEnumList(const flutter::EncodableList* enum_list) = 0; + virtual ErrorOr> + EchoNullableNonNullEnumList(const ::flutter::EncodableList* enum_list) = 0; // Returns the passed list, to test serialization and deserialization. - virtual ErrorOr> - EchoNullableNonNullClassList(const flutter::EncodableList* class_list) = 0; + virtual ErrorOr> + EchoNullableNonNullClassList(const ::flutter::EncodableList* class_list) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> EchoNullableMap( - const flutter::EncodableMap* map) = 0; + virtual ErrorOr> EchoNullableMap( + const ::flutter::EncodableMap* map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> EchoNullableStringMap( - const flutter::EncodableMap* string_map) = 0; + virtual ErrorOr> EchoNullableStringMap( + const ::flutter::EncodableMap* string_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> EchoNullableIntMap( - const flutter::EncodableMap* int_map) = 0; + virtual ErrorOr> EchoNullableIntMap( + const ::flutter::EncodableMap* int_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> EchoNullableEnumMap( - const flutter::EncodableMap* enum_map) = 0; + virtual ErrorOr> EchoNullableEnumMap( + const ::flutter::EncodableMap* enum_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> EchoNullableClassMap( - const flutter::EncodableMap* class_map) = 0; + virtual ErrorOr> EchoNullableClassMap( + const ::flutter::EncodableMap* class_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> - EchoNullableNonNullStringMap(const flutter::EncodableMap* string_map) = 0; + virtual ErrorOr> + EchoNullableNonNullStringMap(const ::flutter::EncodableMap* string_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> - EchoNullableNonNullIntMap(const flutter::EncodableMap* int_map) = 0; + virtual ErrorOr> + EchoNullableNonNullIntMap(const ::flutter::EncodableMap* int_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> - EchoNullableNonNullEnumMap(const flutter::EncodableMap* enum_map) = 0; + virtual ErrorOr> + EchoNullableNonNullEnumMap(const ::flutter::EncodableMap* enum_map) = 0; // Returns the passed map, to test serialization and deserialization. - virtual ErrorOr> - EchoNullableNonNullClassMap(const flutter::EncodableMap* class_map) = 0; + virtual ErrorOr> + EchoNullableNonNullClassMap(const ::flutter::EncodableMap* class_map) = 0; virtual ErrorOr> EchoNullableEnum( const AnEnum* an_enum) = 0; virtual ErrorOr> EchoAnotherNullableEnum( @@ -992,48 +1041,48 @@ class HostIntegrationCoreApi { std::function> reply)> result) = 0; // Returns the passed in generic Object asynchronously. virtual void EchoAsyncObject( - const flutter::EncodableValue& an_object, - std::function reply)> result) = 0; + const ::flutter::EncodableValue& an_object, + std::function reply)> result) = 0; // Returns the passed list, to test asynchronous serialization and // deserialization. virtual void EchoAsyncList( - const flutter::EncodableList& list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& list, + std::function reply)> result) = 0; // Returns the passed list, to test asynchronous serialization and // deserialization. virtual void EchoAsyncEnumList( - const flutter::EncodableList& enum_list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& enum_list, + std::function reply)> result) = 0; // Returns the passed list, to test asynchronous serialization and // deserialization. virtual void EchoAsyncClassList( - const flutter::EncodableList& class_list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& class_list, + std::function reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncMap( - const flutter::EncodableMap& map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& map, + std::function reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncStringMap( - const flutter::EncodableMap& string_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& string_map, + std::function reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncIntMap( - const flutter::EncodableMap& int_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& int_map, + std::function reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncEnumMap( - const flutter::EncodableMap& enum_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& enum_map, + std::function reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncClassMap( - const flutter::EncodableMap& class_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& class_map, + std::function reply)> result) = 0; // Returns the passed enum, to test asynchronous serialization and // deserialization. virtual void EchoAsyncEnum( @@ -1046,14 +1095,16 @@ class HostIntegrationCoreApi { std::function reply)> result) = 0; // Responds with an error from an async function returning a value. virtual void ThrowAsyncError( - std::function> reply)> + std::function< + void(ErrorOr> reply)> result) = 0; // Responds with an error from an async void function. virtual void ThrowAsyncErrorFromVoid( std::function reply)> result) = 0; // Responds with a Flutter error from an async function returning a value. virtual void ThrowAsyncFlutterError( - std::function> reply)> + std::function< + void(ErrorOr> reply)> result) = 0; // Returns the passed object, to test async serialization and deserialization. virtual void EchoAsyncAllTypes( @@ -1094,56 +1145,60 @@ class HostIntegrationCoreApi { result) = 0; // Returns the passed in generic Object asynchronously. virtual void EchoAsyncNullableObject( - const flutter::EncodableValue* an_object, - std::function> reply)> + const ::flutter::EncodableValue* an_object, + std::function< + void(ErrorOr> reply)> result) = 0; // Returns the passed list, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableList( - const flutter::EncodableList* list, - std::function> reply)> + const ::flutter::EncodableList* list, + std::function< + void(ErrorOr> reply)> result) = 0; // Returns the passed list, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableEnumList( - const flutter::EncodableList* enum_list, - std::function> reply)> + const ::flutter::EncodableList* enum_list, + std::function< + void(ErrorOr> reply)> result) = 0; // Returns the passed list, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableClassList( - const flutter::EncodableList* class_list, - std::function> reply)> + const ::flutter::EncodableList* class_list, + std::function< + void(ErrorOr> reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableMap( - const flutter::EncodableMap* map, - std::function> reply)> + const ::flutter::EncodableMap* map, + std::function> reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableStringMap( - const flutter::EncodableMap* string_map, - std::function> reply)> + const ::flutter::EncodableMap* string_map, + std::function> reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableIntMap( - const flutter::EncodableMap* int_map, - std::function> reply)> + const ::flutter::EncodableMap* int_map, + std::function> reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableEnumMap( - const flutter::EncodableMap* enum_map, - std::function> reply)> + const ::flutter::EncodableMap* enum_map, + std::function> reply)> result) = 0; // Returns the passed map, to test asynchronous serialization and // deserialization. virtual void EchoAsyncNullableClassMap( - const flutter::EncodableMap* class_map, - std::function> reply)> + const ::flutter::EncodableMap* class_map, + std::function> reply)> result) = 0; // Returns the passed enum, to test asynchronous serialization and // deserialization. @@ -1165,7 +1220,8 @@ class HostIntegrationCoreApi { virtual void CallFlutterNoop( std::function reply)> result) = 0; virtual void CallFlutterThrowError( - std::function> reply)> + std::function< + void(ErrorOr> reply)> result) = 0; virtual void CallFlutterThrowErrorFromVoid( std::function reply)> result) = 0; @@ -1203,47 +1259,47 @@ class HostIntegrationCoreApi { const std::vector& list, std::function> reply)> result) = 0; virtual void CallFlutterEchoList( - const flutter::EncodableList& list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& list, + std::function reply)> result) = 0; virtual void CallFlutterEchoEnumList( - const flutter::EncodableList& enum_list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& enum_list, + std::function reply)> result) = 0; virtual void CallFlutterEchoClassList( - const flutter::EncodableList& class_list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& class_list, + std::function reply)> result) = 0; virtual void CallFlutterEchoNonNullEnumList( - const flutter::EncodableList& enum_list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& enum_list, + std::function reply)> result) = 0; virtual void CallFlutterEchoNonNullClassList( - const flutter::EncodableList& class_list, - std::function reply)> result) = 0; + const ::flutter::EncodableList& class_list, + std::function reply)> result) = 0; virtual void CallFlutterEchoMap( - const flutter::EncodableMap& map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& map, + std::function reply)> result) = 0; virtual void CallFlutterEchoStringMap( - const flutter::EncodableMap& string_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& string_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoIntMap( - const flutter::EncodableMap& int_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& int_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoEnumMap( - const flutter::EncodableMap& enum_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& enum_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoClassMap( - const flutter::EncodableMap& class_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& class_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoNonNullStringMap( - const flutter::EncodableMap& string_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& string_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoNonNullIntMap( - const flutter::EncodableMap& int_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& int_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoNonNullEnumMap( - const flutter::EncodableMap& enum_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& enum_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoNonNullClassMap( - const flutter::EncodableMap& class_map, - std::function reply)> result) = 0; + const ::flutter::EncodableMap& class_map, + std::function reply)> result) = 0; virtual void CallFlutterEchoEnum( const AnEnum& an_enum, std::function reply)> result) = 0; @@ -1268,60 +1324,65 @@ class HostIntegrationCoreApi { std::function>> reply)> result) = 0; virtual void CallFlutterEchoNullableList( - const flutter::EncodableList* list, - std::function> reply)> + const ::flutter::EncodableList* list, + std::function< + void(ErrorOr> reply)> result) = 0; virtual void CallFlutterEchoNullableEnumList( - const flutter::EncodableList* enum_list, - std::function> reply)> + const ::flutter::EncodableList* enum_list, + std::function< + void(ErrorOr> reply)> result) = 0; virtual void CallFlutterEchoNullableClassList( - const flutter::EncodableList* class_list, - std::function> reply)> + const ::flutter::EncodableList* class_list, + std::function< + void(ErrorOr> reply)> result) = 0; virtual void CallFlutterEchoNullableNonNullEnumList( - const flutter::EncodableList* enum_list, - std::function> reply)> + const ::flutter::EncodableList* enum_list, + std::function< + void(ErrorOr> reply)> result) = 0; virtual void CallFlutterEchoNullableNonNullClassList( - const flutter::EncodableList* class_list, - std::function> reply)> + const ::flutter::EncodableList* class_list, + std::function< + void(ErrorOr> reply)> result) = 0; virtual void CallFlutterEchoNullableMap( - const flutter::EncodableMap* map, - std::function> reply)> + const ::flutter::EncodableMap* map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableStringMap( - const flutter::EncodableMap* string_map, - std::function> reply)> + const ::flutter::EncodableMap* string_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableIntMap( - const flutter::EncodableMap* int_map, - std::function> reply)> + const ::flutter::EncodableMap* int_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableEnumMap( - const flutter::EncodableMap* enum_map, - std::function> reply)> + const ::flutter::EncodableMap* enum_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableClassMap( - const flutter::EncodableMap* class_map, - std::function> reply)> + const ::flutter::EncodableMap* class_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableNonNullStringMap( - const flutter::EncodableMap* string_map, - std::function> reply)> + const ::flutter::EncodableMap* string_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableNonNullIntMap( - const flutter::EncodableMap* int_map, - std::function> reply)> + const ::flutter::EncodableMap* int_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableNonNullEnumMap( - const flutter::EncodableMap* enum_map, - std::function> reply)> + const ::flutter::EncodableMap* enum_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableNonNullClassMap( - const flutter::EncodableMap* class_map, - std::function> reply)> + const ::flutter::EncodableMap* class_map, + std::function> reply)> result) = 0; virtual void CallFlutterEchoNullableEnum( const AnEnum* an_enum, @@ -1335,16 +1396,16 @@ class HostIntegrationCoreApi { std::function reply)> result) = 0; // The codec used by HostIntegrationCoreApi. - static const flutter::StandardMessageCodec& GetCodec(); + static const ::flutter::StandardMessageCodec& GetCodec(); // Sets up an instance of `HostIntegrationCoreApi` to handle messages through // the `binary_messenger`. - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, HostIntegrationCoreApi* api); - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, HostIntegrationCoreApi* api, const std::string& message_channel_suffix); - static flutter::EncodableValue WrapError(std::string_view error_message); - static flutter::EncodableValue WrapError(const FlutterError& error); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); protected: HostIntegrationCoreApi() = default; @@ -1356,17 +1417,17 @@ class HostIntegrationCoreApi { // called from C++. class FlutterIntegrationCoreApi { public: - FlutterIntegrationCoreApi(flutter::BinaryMessenger* binary_messenger); - FlutterIntegrationCoreApi(flutter::BinaryMessenger* binary_messenger, + FlutterIntegrationCoreApi(::flutter::BinaryMessenger* binary_messenger); + FlutterIntegrationCoreApi(::flutter::BinaryMessenger* binary_messenger, const std::string& message_channel_suffix); - static const flutter::StandardMessageCodec& GetCodec(); + static const ::flutter::StandardMessageCodec& GetCodec(); // A no-op function taking no arguments and returning no value, to sanity // test basic calling. void Noop(std::function&& on_success, std::function&& on_error); // Responds with an error from an async function returning a value. void ThrowError( - std::function&& on_success, + std::function&& on_success, std::function&& on_error); // Responds with an error from an async void function. void ThrowErrorFromVoid(std::function&& on_success, @@ -1420,72 +1481,73 @@ class FlutterIntegrationCoreApi { std::function&)>&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. - void EchoList(const flutter::EncodableList& list, - std::function&& on_success, - std::function&& on_error); + void EchoList( + const ::flutter::EncodableList& list, + std::function&& on_success, + std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoEnumList( - const flutter::EncodableList& enum_list, - std::function&& on_success, + const ::flutter::EncodableList& enum_list, + std::function&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoClassList( - const flutter::EncodableList& class_list, - std::function&& on_success, + const ::flutter::EncodableList& class_list, + std::function&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoNonNullEnumList( - const flutter::EncodableList& enum_list, - std::function&& on_success, + const ::flutter::EncodableList& enum_list, + std::function&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoNonNullClassList( - const flutter::EncodableList& class_list, - std::function&& on_success, + const ::flutter::EncodableList& class_list, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. - void EchoMap(const flutter::EncodableMap& map, - std::function&& on_success, + void EchoMap(const ::flutter::EncodableMap& map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoStringMap( - const flutter::EncodableMap& string_map, - std::function&& on_success, + const ::flutter::EncodableMap& string_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoIntMap( - const flutter::EncodableMap& int_map, - std::function&& on_success, + const ::flutter::EncodableMap& int_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoEnumMap( - const flutter::EncodableMap& enum_map, - std::function&& on_success, + const ::flutter::EncodableMap& enum_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoClassMap( - const flutter::EncodableMap& class_map, - std::function&& on_success, + const ::flutter::EncodableMap& class_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNonNullStringMap( - const flutter::EncodableMap& string_map, - std::function&& on_success, + const ::flutter::EncodableMap& string_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNonNullIntMap( - const flutter::EncodableMap& int_map, - std::function&& on_success, + const ::flutter::EncodableMap& int_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNonNullEnumMap( - const flutter::EncodableMap& enum_map, - std::function&& on_success, + const ::flutter::EncodableMap& enum_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNonNullClassMap( - const flutter::EncodableMap& class_map, - std::function&& on_success, + const ::flutter::EncodableMap& class_map, + std::function&& on_success, std::function&& on_error); // Returns the passed enum to test serialization and deserialization. void EchoEnum(const AnEnum& an_enum, @@ -1518,73 +1580,73 @@ class FlutterIntegrationCoreApi { std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoNullableList( - const flutter::EncodableList* list, - std::function&& on_success, + const ::flutter::EncodableList* list, + std::function&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoNullableEnumList( - const flutter::EncodableList* enum_list, - std::function&& on_success, + const ::flutter::EncodableList* enum_list, + std::function&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoNullableClassList( - const flutter::EncodableList* class_list, - std::function&& on_success, + const ::flutter::EncodableList* class_list, + std::function&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoNullableNonNullEnumList( - const flutter::EncodableList* enum_list, - std::function&& on_success, + const ::flutter::EncodableList* enum_list, + std::function&& on_success, std::function&& on_error); // Returns the passed list, to test serialization and deserialization. void EchoNullableNonNullClassList( - const flutter::EncodableList* class_list, - std::function&& on_success, + const ::flutter::EncodableList* class_list, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableMap( - const flutter::EncodableMap* map, - std::function&& on_success, + const ::flutter::EncodableMap* map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableStringMap( - const flutter::EncodableMap* string_map, - std::function&& on_success, + const ::flutter::EncodableMap* string_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableIntMap( - const flutter::EncodableMap* int_map, - std::function&& on_success, + const ::flutter::EncodableMap* int_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableEnumMap( - const flutter::EncodableMap* enum_map, - std::function&& on_success, + const ::flutter::EncodableMap* enum_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableClassMap( - const flutter::EncodableMap* class_map, - std::function&& on_success, + const ::flutter::EncodableMap* class_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableNonNullStringMap( - const flutter::EncodableMap* string_map, - std::function&& on_success, + const ::flutter::EncodableMap* string_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableNonNullIntMap( - const flutter::EncodableMap* int_map, - std::function&& on_success, + const ::flutter::EncodableMap* int_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableNonNullEnumMap( - const flutter::EncodableMap* enum_map, - std::function&& on_success, + const ::flutter::EncodableMap* enum_map, + std::function&& on_success, std::function&& on_error); // Returns the passed map, to test serialization and deserialization. void EchoNullableNonNullClassMap( - const flutter::EncodableMap* class_map, - std::function&& on_success, + const ::flutter::EncodableMap* class_map, + std::function&& on_success, std::function&& on_error); // Returns the passed enum to test serialization and deserialization. void EchoNullableEnum(const AnEnum* an_enum, @@ -1605,7 +1667,7 @@ class FlutterIntegrationCoreApi { std::function&& on_error); private: - flutter::BinaryMessenger* binary_messenger_; + ::flutter::BinaryMessenger* binary_messenger_; std::string message_channel_suffix_; }; @@ -1621,16 +1683,16 @@ class HostTrivialApi { virtual std::optional Noop() = 0; // The codec used by HostTrivialApi. - static const flutter::StandardMessageCodec& GetCodec(); + static const ::flutter::StandardMessageCodec& GetCodec(); // Sets up an instance of `HostTrivialApi` to handle messages through the // `binary_messenger`. - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, HostTrivialApi* api); - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, HostTrivialApi* api, const std::string& message_channel_suffix); - static flutter::EncodableValue WrapError(std::string_view error_message); - static flutter::EncodableValue WrapError(const FlutterError& error); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); protected: HostTrivialApi() = default; @@ -1650,16 +1712,16 @@ class HostSmallApi { std::function reply)> result) = 0; // The codec used by HostSmallApi. - static const flutter::StandardMessageCodec& GetCodec(); + static const ::flutter::StandardMessageCodec& GetCodec(); // Sets up an instance of `HostSmallApi` to handle messages through the // `binary_messenger`. - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, HostSmallApi* api); - static void SetUp(flutter::BinaryMessenger* binary_messenger, + static void SetUp(::flutter::BinaryMessenger* binary_messenger, HostSmallApi* api, const std::string& message_channel_suffix); - static flutter::EncodableValue WrapError(std::string_view error_message); - static flutter::EncodableValue WrapError(const FlutterError& error); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); protected: HostSmallApi() = default; @@ -1670,10 +1732,10 @@ class HostSmallApi { // called from C++. class FlutterSmallApi { public: - FlutterSmallApi(flutter::BinaryMessenger* binary_messenger); - FlutterSmallApi(flutter::BinaryMessenger* binary_messenger, + FlutterSmallApi(::flutter::BinaryMessenger* binary_messenger); + FlutterSmallApi(::flutter::BinaryMessenger* binary_messenger, const std::string& message_channel_suffix); - static const flutter::StandardMessageCodec& GetCodec(); + static const ::flutter::StandardMessageCodec& GetCodec(); void EchoWrappedList(const TestMessage& msg, std::function&& on_success, std::function&& on_error); @@ -1682,7 +1744,7 @@ class FlutterSmallApi { std::function&& on_error); private: - flutter::BinaryMessenger* binary_messenger_; + ::flutter::BinaryMessenger* binary_messenger_; std::string message_channel_suffix_; }; diff --git a/packages/pigeon/platform_tests/test_plugin/windows/test/equality_test.cpp b/packages/pigeon/platform_tests/test_plugin/windows/test/equality_test.cpp new file mode 100644 index 000000000000..79cfe24f9cb8 --- /dev/null +++ b/packages/pigeon/platform_tests/test_plugin/windows/test/equality_test.cpp @@ -0,0 +1,104 @@ +// 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. + +#include + +#include + +#include "pigeon/core_tests.gen.h" + +namespace test_plugin { +namespace test { + +using namespace core_tests_pigeontest; + +TEST(EqualityTests, NaNEquality) { + AllNullableTypes all1; + all1.set_a_nullable_double(NAN); + + AllNullableTypes all2; + all2.set_a_nullable_double(NAN); + + EXPECT_EQ(all1, all2); + + AllNullableTypes all3; + all3.set_a_nullable_double(1.0); + + EXPECT_NE(all1, all3); +} + +TEST(EqualityTests, OptionalNaNEquality) { + AllNullableTypes all1; + // std::optional handled via set_a_nullable_double + all1.set_a_nullable_double(NAN); + + AllNullableTypes all2; + all2.set_a_nullable_double(NAN); + + EXPECT_EQ(all1, all2); +} + +TEST(EqualityTests, NestedNaNEquality) { + std::vector list = {NAN}; + AllNullableTypes all1; + all1.set_double_list(list); + + AllNullableTypes all2; + all2.set_double_list(list); + + EXPECT_EQ(all1, all2); +} + +TEST(EqualityTests, SignedZeroEquality) { + AllNullableTypes all1; + all1.set_a_nullable_double(0.0); + + AllNullableTypes all2; + all2.set_a_nullable_double(-0.0); + + EXPECT_EQ(all1, all2); +} + +TEST(EqualityTests, NestedZeroListEquality) { + std::vector list1 = {0.0}; + AllNullableTypes all1; + all1.set_double_list(list1); + + std::vector list2 = {-0.0}; + AllNullableTypes all2; + all2.set_double_list(list2); + + EXPECT_EQ(all1, all2); +} + +TEST(EqualityTests, ZeroMapKeyEquality) { + std::map map1; + map1[flutter::EncodableValue(0.0)] = flutter::EncodableValue("a"); + AllNullableTypes all1; + all1.set_map(map1); + + std::map map2; + map2[flutter::EncodableValue(-0.0)] = flutter::EncodableValue("a"); + AllNullableTypes all2; + all2.set_map(map2); + + EXPECT_EQ(all1, all2); +} + +TEST(EqualityTests, ZeroMapValueEquality) { + std::map map1; + map1[flutter::EncodableValue("a")] = flutter::EncodableValue(0.0); + AllNullableTypes all1; + all1.set_map(map1); + + std::map map2; + map2[flutter::EncodableValue("a")] = flutter::EncodableValue(-0.0); + AllNullableTypes all2; + all2.set_map(map2); + + EXPECT_EQ(all1, all2); +} + +} // namespace test +} // namespace test_plugin diff --git a/packages/pigeon/platform_tests/test_plugin/windows/test/non_null_fields_test.cpp b/packages/pigeon/platform_tests/test_plugin/windows/test/non_null_fields_test.cpp index 07412dc84378..d7ea926f62b3 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/test/non_null_fields_test.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/test/non_null_fields_test.cpp @@ -14,4 +14,13 @@ TEST(NonNullFields, Build) { EXPECT_EQ(request.query(), "hello"); } +TEST(NonNullFields, Equality) { + NonNullFieldSearchRequest request1("hello"); + NonNullFieldSearchRequest request2("hello"); + NonNullFieldSearchRequest request3("world"); + + EXPECT_EQ(request1, request2); + EXPECT_NE(request1, request3); +} + } // namespace non_null_fields_pigeontest diff --git a/packages/pigeon/platform_tests/test_plugin/windows/test/null_fields_test.cpp b/packages/pigeon/platform_tests/test_plugin/windows/test/null_fields_test.cpp index 9a0cf75e8259..46f16079cc45 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/test/null_fields_test.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/test/null_fields_test.cpp @@ -211,4 +211,34 @@ TEST_F(NullFieldsTest, ReplyToListWithNulls) { } } +TEST(NullFields, Equality) { + NullFieldsSearchRequest request1(1); + request1.set_query("hello"); + NullFieldsSearchRequest request2(1); + request2.set_query("hello"); + NullFieldsSearchRequest request3(2); + request3.set_query("hello"); + NullFieldsSearchRequest request4(1); + request4.set_query("world"); + + EXPECT_EQ(request1, request2); + EXPECT_FALSE(request1 == request3); + EXPECT_FALSE(request1 == request4); + + NullFieldsSearchReply reply1; + reply1.set_result("result"); + reply1.set_request(request1); + + NullFieldsSearchReply reply2; + reply2.set_result("result"); + reply2.set_request(request2); + + NullFieldsSearchReply reply3; + reply3.set_result("result"); + reply3.set_request(request3); + + EXPECT_EQ(reply1, reply2); + EXPECT_FALSE(reply1 == reply3); +} + } // namespace null_fields_pigeontest diff --git a/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.cpp b/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.cpp index bb77ea902dfc..3e6056f3a810 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.cpp @@ -97,6 +97,21 @@ ErrorOr> TestPlugin::EchoAllNullableTypes( return std::optional(*everything); } +ErrorOr TestPlugin::AreAllNullableTypesEqual(const AllNullableTypes& a, + const AllNullableTypes& b) { + return a == b; +} + +ErrorOr TestPlugin::GetAllNullableTypesHash( + const AllNullableTypes& value) { + return (int64_t)value.Hash(); +} + +ErrorOr TestPlugin::GetAllNullableTypesWithoutRecursionHash( + const AllNullableTypesWithoutRecursion& value) { + return (int64_t)value.Hash(); +} + ErrorOr> TestPlugin::EchoAllNullableTypesWithoutRecursion( const AllNullableTypesWithoutRecursion* everything) { diff --git a/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.h b/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.h index 002a73291335..a52bd83f03a2 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/test_plugin.h @@ -60,6 +60,15 @@ class TestPlugin : public flutter::Plugin, std::optional> EchoAllNullableTypes( const core_tests_pigeontest::AllNullableTypes* everything) override; + core_tests_pigeontest::ErrorOr AreAllNullableTypesEqual( + const core_tests_pigeontest::AllNullableTypes& a, + const core_tests_pigeontest::AllNullableTypes& b) override; + core_tests_pigeontest::ErrorOr GetAllNullableTypesHash( + const core_tests_pigeontest::AllNullableTypes& value) override; + core_tests_pigeontest::ErrorOr + GetAllNullableTypesWithoutRecursionHash( + const core_tests_pigeontest::AllNullableTypesWithoutRecursion& value) + override; core_tests_pigeontest::ErrorOr< std::optional> EchoAllNullableTypesWithoutRecursion( diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index d727a2368700..d674b7f4114e 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,7 +2,7 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22 -version: 26.2.3 # This must match the version in lib/src/generator_tools.dart +version: 26.3.0 # This must match the version in lib/src/generator_tools.dart environment: sdk: ^3.9.0 diff --git a/packages/pigeon/test/cpp_generator_test.dart b/packages/pigeon/test/cpp_generator_test.dart index d9a22ec657bb..0c77bed2b1de 100644 --- a/packages/pigeon/test/cpp_generator_test.dart +++ b/packages/pigeon/test/cpp_generator_test.dart @@ -124,7 +124,7 @@ void main() { contains( RegExp( r'void Api::SetUp\(\s*' - r'flutter::BinaryMessenger\* binary_messenger,\s*' + r'::flutter::BinaryMessenger\* binary_messenger,\s*' r'Api\* api\s*\)', ), ), @@ -309,12 +309,12 @@ void main() { contains(' const std::string& code() const { return code_; }'), contains(' const std::string& message() const { return message_; }'), contains( - ' const flutter::EncodableValue& details() const { return details_; }', + ' const ::flutter::EncodableValue& details() const { return details_; }', ), contains(' private:'), contains(' std::string code_;'), contains(' std::string message_;'), - contains(' flutter::EncodableValue details_;'), + contains(' ::flutter::EncodableValue details_;'), ]), ); } @@ -567,6 +567,8 @@ void main() { #include #include +#include +#include #include #include #include @@ -1174,13 +1176,13 @@ void main() { expect( code, contains( - 'ErrorOr> ReturnNullableList()', + 'ErrorOr> ReturnNullableList()', ), ); expect( code, contains( - 'ErrorOr> ReturnNullableMap()', + 'ErrorOr> ReturnNullableMap()', ), ); expect( @@ -1297,8 +1299,8 @@ void main() { expect(code, contains('ErrorOr ReturnBool()')); expect(code, contains('ErrorOr ReturnInt()')); expect(code, contains('ErrorOr ReturnString()')); - expect(code, contains('ErrorOr ReturnList()')); - expect(code, contains('ErrorOr ReturnMap()')); + expect(code, contains('ErrorOr<::flutter::EncodableList> ReturnList()')); + expect(code, contains('ErrorOr<::flutter::EncodableMap> ReturnMap()')); expect(code, contains('ErrorOr ReturnDataClass()')); } }); @@ -1415,10 +1417,10 @@ void main() { r'const bool\* a_bool,\s*' r'const int64_t\* an_int,\s*' r'const std::string\* a_string,\s*' - r'const flutter::EncodableList\* a_list,\s*' - r'const flutter::EncodableMap\* a_map,\s*' + r'const ::flutter::EncodableList\* a_list,\s*' + r'const ::flutter::EncodableMap\* a_map,\s*' r'const ParameterObject\* an_object,\s*' - r'const flutter::EncodableValue\* a_generic_object\s*\)', + r'const ::flutter::EncodableValue\* a_generic_object\s*\)', ), ), ); @@ -1611,10 +1613,10 @@ void main() { r'bool a_bool,\s*' r'int64_t an_int,\s*' r'const std::string& a_string,\s*' - r'const flutter::EncodableList& a_list,\s*' - r'const flutter::EncodableMap& a_map,\s*' + r'const ::flutter::EncodableList& a_list,\s*' + r'const ::flutter::EncodableMap& a_map,\s*' r'const ParameterObject& an_object,\s*' - r'const flutter::EncodableValue& a_generic_object\s*\)', + r'const ::flutter::EncodableValue& a_generic_object\s*\)', ), ), ); @@ -1813,10 +1815,10 @@ void main() { // Nullable strings use std::string* rather than std::string_view* // since there's no implicit conversion for pointer types. r'const std::string\* a_string,\s*' - r'const flutter::EncodableList\* a_list,\s*' - r'const flutter::EncodableMap\* a_map,\s*' + r'const ::flutter::EncodableList\* a_list,\s*' + r'const ::flutter::EncodableMap\* a_map,\s*' r'const ParameterObject\* an_object,\s*' - r'const flutter::EncodableValue\* a_generic_object,', + r'const ::flutter::EncodableValue\* a_generic_object,', ), ), ); @@ -2001,10 +2003,10 @@ void main() { // nullable strings. r'const std::string& a_string,\s*' // Non-POD types use const references. - r'const flutter::EncodableList& a_list,\s*' - r'const flutter::EncodableMap& a_map,\s*' + r'const ::flutter::EncodableList& a_list,\s*' + r'const ::flutter::EncodableMap& a_map,\s*' r'const ParameterObject& an_object,\s*' - r'const flutter::EncodableValue& a_generic_object,\s*', + r'const ::flutter::EncodableValue& a_generic_object,\s*', ), ), ); @@ -2313,7 +2315,7 @@ void main() { dartPackageName: DEFAULT_PACKAGE_NAME, ); final code = sink.toString(); - expect(code, contains(' : public flutter::StandardCodecSerializer')); + expect(code, contains(' : public ::flutter::StandardCodecSerializer')); }); test('Does not send unwrapped EncodableLists', () { @@ -2614,4 +2616,170 @@ void main() { ); expect(code, contains('channel.Send')); }); + + test('data class equality', () { + final root = Root( + apis: [], + classes: [ + Class( + name: 'Foo', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: false), + name: 'bar', + ), + ], + ), + ], + enums: [], + ); + { + final sink = StringBuffer(); + const generator = CppGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.header, + languageOptions: const InternalCppOptions( + cppHeaderOut: '', + cppSourceOut: '', + headerIncludePath: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('bool operator==(const Foo& other) const;')); + } + { + final sink = StringBuffer(); + const generator = CppGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.source, + languageOptions: const InternalCppOptions( + cppHeaderOut: '', + cppSourceOut: '', + headerIncludePath: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('bool Foo::operator==(const Foo& other) const {')); + } + }); + + test('data class equality with pointers', () { + final nested = Class( + name: 'Nested', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: false), + name: 'data', + ), + ], + ); + final root = Root( + apis: [], + classes: [ + Class( + name: 'Foo', + fields: [ + NamedType( + type: TypeDeclaration( + baseName: 'Nested', + isNullable: true, + associatedClass: nested, + ), + name: 'nested', + ), + ], + ), + nested, + ], + enums: [], + ); + final sink = StringBuffer(); + const generator = CppGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.source, + languageOptions: const InternalCppOptions( + cppHeaderOut: '', + cppSourceOut: '', + headerIncludePath: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('bool Foo::operator==(const Foo& other) const {')); + }); + + test('data classes implement Hash', () { + final root = Root( + apis: [], + classes: [ + Class( + name: 'Input', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: false), + name: 'field1', + ), + ], + ), + ], + enums: [], + ); + { + final sink = StringBuffer(); + const generator = CppGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.header, + languageOptions: const InternalCppOptions( + headerIncludePath: 'foo.h', + cppHeaderOut: '', + cppSourceOut: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('size_t Hash() const;')); + } + { + final sink = StringBuffer(); + const generator = CppGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.source, + languageOptions: const InternalCppOptions( + headerIncludePath: 'foo.h', + cppHeaderOut: '', + cppSourceOut: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('size_t Input::Hash() const {')); + } + }); } diff --git a/packages/pigeon/test/dart_generator_test.dart b/packages/pigeon/test/dart_generator_test.dart index 381838b7ac99..f3774fc75c92 100644 --- a/packages/pigeon/test/dart_generator_test.dart +++ b/packages/pigeon/test/dart_generator_test.dart @@ -2091,4 +2091,64 @@ name: foobar expect(code, contains('buffer.putUint8(4);')); expect(code, contains('buffer.putInt64(value);')); }); + + test('data class equality', () { + final classDefinition = Class( + name: 'Foobar', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: true), + name: 'field1', + ), + ], + ); + final root = Root( + apis: [], + classes: [classDefinition], + enums: [], + ); + final sink = StringBuffer(); + const generator = DartGenerator(); + generator.generate( + const InternalDartOptions(ignoreLints: false), + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('bool operator ==(Object other) {')); + expect(code, contains('int get hashCode =>')); + }); + + test('data class equality multi-field', () { + final classDefinition = Class( + name: 'Foobar', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: true), + name: 'field1', + ), + NamedType( + type: const TypeDeclaration(baseName: 'String', isNullable: true), + name: 'field2', + ), + ], + ); + final root = Root( + apis: [], + classes: [classDefinition], + enums: [], + ); + final sink = StringBuffer(); + const generator = DartGenerator(); + generator.generate( + const InternalDartOptions(ignoreLints: false), + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('bool operator ==(Object other) {')); + expect(code, contains('int get hashCode =>')); + }); } diff --git a/packages/pigeon/test/gobject_generator_test.dart b/packages/pigeon/test/gobject_generator_test.dart index c9ef46a3aa43..8f44885a4617 100644 --- a/packages/pigeon/test/gobject_generator_test.dart +++ b/packages/pigeon/test/gobject_generator_test.dart @@ -1035,4 +1035,50 @@ void main() { expect(code, contains('const int test_package_object_type_id = 131;')); } }); + + test('data classes handle equality and hashing', () { + final inputClass = Class( + name: 'Input', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'String', isNullable: true), + name: 'input', + ), + NamedType( + type: const TypeDeclaration(baseName: 'double', isNullable: false), + name: 'someDouble', + ), + NamedType( + type: const TypeDeclaration(baseName: 'Uint8List', isNullable: false), + name: 'someBytes', + ), + ], + ); + final root = Root( + apis: [], + classes: [inputClass], + enums: [], + ); + { + final sink = StringBuffer(); + const generator = GObjectGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.source, + languageOptions: const InternalGObjectOptions( + headerIncludePath: '', + gobjectHeaderOut: '', + gobjectSourceOut: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('gboolean test_package_input_equals(')); + expect(code, contains('guint test_package_input_hash(')); + } + }); } diff --git a/packages/pigeon/test/java_generator_test.dart b/packages/pigeon/test/java_generator_test.dart index 777dd4755e57..a5f0708abf58 100644 --- a/packages/pigeon/test/java_generator_test.dart +++ b/packages/pigeon/test/java_generator_test.dart @@ -1891,4 +1891,33 @@ void main() { ), ); }); + + test('data class equality', () { + final classDefinition = Class( + name: 'Foobar', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: true), + name: 'field1', + ), + ], + ); + final root = Root( + apis: [], + classes: [classDefinition], + enums: [], + ); + final sink = StringBuffer(); + const javaOptions = InternalJavaOptions(className: 'Messages', javaOut: ''); + const generator = JavaGenerator(); + generator.generate( + javaOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('public boolean equals(Object o) {')); + expect(code, contains('public int hashCode() {')); + }); } diff --git a/packages/pigeon/test/kotlin_generator_test.dart b/packages/pigeon/test/kotlin_generator_test.dart index 1de8ae95e8ae..479357d57fe3 100644 --- a/packages/pigeon/test/kotlin_generator_test.dart +++ b/packages/pigeon/test/kotlin_generator_test.dart @@ -2070,4 +2070,66 @@ void main() { // There should be only one occurrence of 'is Foo' in the block expect(count, 1); }); + + test('data class equality', () { + final classDefinition = Class( + name: 'Foobar', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: true), + name: 'field1', + ), + ], + ); + final root = Root( + apis: [], + classes: [classDefinition], + enums: [], + ); + final sink = StringBuffer(); + const kotlinOptions = InternalKotlinOptions(kotlinOut: ''); + const generator = KotlinGenerator(); + generator.generate( + kotlinOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('override fun equals(other: Any?): Boolean {')); + expect(code, contains('override fun hashCode(): Int {')); + }); + + test('data class equality multi-field', () { + final classDefinition = Class( + name: 'Foobar', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: true), + name: 'field1', + ), + NamedType( + type: const TypeDeclaration(baseName: 'String', isNullable: true), + name: 'field2', + ), + ], + ); + final root = Root( + apis: [], + classes: [classDefinition], + enums: [], + ); + final sink = StringBuffer(); + const kotlinOptions = InternalKotlinOptions(kotlinOut: ''); + const generator = KotlinGenerator(); + generator.generate( + kotlinOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('override fun equals(other: Any?): Boolean {')); + expect(code, contains('override fun hashCode(): Int {')); + }); } diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index b44f84f571d3..fb18833f77bc 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -4040,4 +4040,63 @@ void main() { expect(code, isNot(contains('FLTFLT'))); expect(code, contains('FLTEnum1Box')); }); + + test('data class equality', () { + final root = Root( + apis: [], + classes: [ + Class( + name: 'Foo', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: false), + name: 'bar', + ), + ], + ), + ], + enums: [], + ); + { + final sink = StringBuffer(); + const generator = ObjcGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.header, + languageOptions: const InternalObjcOptions( + prefix: 'ABC', + objcHeaderOut: '', + objcSourceOut: '', + headerIncludePath: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + } + { + final sink = StringBuffer(); + const generator = ObjcGenerator(); + final generatorOptions = OutputFileOptions( + fileType: FileType.source, + languageOptions: const InternalObjcOptions( + prefix: 'ABC', + objcHeaderOut: '', + objcSourceOut: '', + headerIncludePath: '', + ), + ); + generator.generate( + generatorOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect(code, contains('- (BOOL)isEqual:(id)object {')); + expect(code, contains('- (NSUInteger)hash {')); + } + }); } diff --git a/packages/pigeon/test/swift_generator_test.dart b/packages/pigeon/test/swift_generator_test.dart index c91f09e9976b..fa567e2b02c8 100644 --- a/packages/pigeon/test/swift_generator_test.dart +++ b/packages/pigeon/test/swift_generator_test.dart @@ -1785,4 +1785,72 @@ void main() { ), ); }); + + test('data class equality', () { + final classDefinition = Class( + name: 'Foobar', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: true), + name: 'field1', + ), + ], + ); + final root = Root( + apis: [], + classes: [classDefinition], + enums: [], + ); + final sink = StringBuffer(); + const swiftOptions = InternalSwiftOptions(swiftOut: ''); + const generator = SwiftGenerator(); + generator.generate( + swiftOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect( + code, + contains('static func == (lhs: Foobar, rhs: Foobar) -> Bool {'), + ); + expect(code, contains('func hash(into hasher: inout Hasher) {')); + }); + + test('data class equality multi-field', () { + final classDefinition = Class( + name: 'Foobar', + fields: [ + NamedType( + type: const TypeDeclaration(baseName: 'int', isNullable: true), + name: 'field1', + ), + NamedType( + type: const TypeDeclaration(baseName: 'String', isNullable: true), + name: 'field2', + ), + ], + ); + final root = Root( + apis: [], + classes: [classDefinition], + enums: [], + ); + final sink = StringBuffer(); + const swiftOptions = InternalSwiftOptions(swiftOut: ''); + const generator = SwiftGenerator(); + generator.generate( + swiftOptions, + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final code = sink.toString(); + expect( + code, + contains('static func == (lhs: Foobar, rhs: Foobar) -> Bool {'), + ); + expect(code, contains('func hash(into hasher: inout Hasher) {')); + }); } From b409f0f578ad6d69d4824e5961dbb73bee54817b Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 25 Mar 2026 07:35:09 -0400 Subject: [PATCH 29/55] [camera] Regenerate iOS example with Swift (#11283) Updates the iOS example app for `camera_avfoundation` to a Swift app. Rather than edit in place, this replaces the example app with a fresh copy to minimize drift from current template: - The existing ios/ directory was deleted - A new copy was created with `flutter create --platforms=ios --org=dev.flutter .` - The RunnerTest code was restored (other than unused files; see https://github.com/flutter/packages/pull/11240), and the placeholder file removed. - The important Info.plist entries were restored. - The special logic to bypass app launch plugin registration during unit tests was moved from main.m, which no longer exists, to the delegate callback where registration would be done. I also did some minor test file cleanup I noticed while validating everything in Xcode again: - Remove some stale references to and usage of the `FLT` prefix (missed during Swift migrations). - Added some missing headers that local compilation complained about. This is part of an overall modernization of the example apps; most packages have already been converted to Swift examples. ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../camera_avfoundation/example/.gitignore | 45 ++ .../camera_avfoundation/example/.metadata | 30 + .../example/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 4 - .../ios/Runner.xcodeproj/project.pbxproj | 643 +++++++++--------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 16 +- .../contents.xcworkspacedata | 3 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.m | 17 - .../example/ios/Runner/AppDelegate.swift | 27 + .../AppIcon.appiconset/Contents.json | 5 +- .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 1418 bytes .../example/ios/Runner/Info.plist | 42 +- .../Runner-Bridging-Header.h} | 2 +- .../{AppDelegate.h => SceneDelegate.swift} | 8 +- .../example/ios/Runner/main.m | 19 - ...eTests.swift => CameraExposureTests.swift} | 2 +- .../CameraPluginCreateCameraTests.swift | 2 +- .../CameraPluginDelegatingMethodTests.swift | 2 +- .../CameraSessionPresetsTests.swift | 2 +- ... => CameraSetDeviceOrientationTests.swift} | 2 +- ...ts.swift => CameraSetFlashModeTests.swift} | 2 +- ...ts.swift => CameraSetFocusModeTests.swift} | 2 +- .../ios/RunnerTests/CameraSettingsTests.swift | 5 +- ...mZoomTests.swift => CameraZoomTests.swift} | 2 +- .../ios/RunnerTests/ExceptionCatcher.h | 23 - .../ios/RunnerTests/ExceptionCatcher.m | 17 - .../example/ios/RunnerTests/Info.plist | 22 - .../Mocks/MockCameraDeviceDiscoverer.swift | 2 +- .../RunnerTests/Mocks/MockCaptureDevice.swift | 2 +- .../Mocks/MockCaptureDeviceInputFactory.swift | 4 +- .../RunnerTests/Mocks/MockCaptureInput.swift | 2 +- .../Mocks/MockCapturePhotoOutput.swift | 2 +- .../Mocks/MockCaptureSession.swift | 2 +- .../Mocks/MockCaptureVideoDataOutput.swift | 2 +- .../Mocks/MockFrameRateRange.swift | 2 + .../RunnerTests/Mocks/MockWritableData.swift | 2 + .../ios/RunnerTests/PhotoCaptureTests.swift | 12 +- .../ios/RunnerTests/SampleBufferTests.swift | 4 +- 55 files changed, 567 insertions(+), 471 deletions(-) create mode 100644 packages/camera/camera_avfoundation/example/.gitignore create mode 100644 packages/camera/camera_avfoundation/example/.metadata create mode 100644 packages/camera/camera_avfoundation/example/ios/.gitignore create mode 100644 packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/camera/camera_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.m create mode 100644 packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.swift create mode 100644 packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png rename packages/camera/camera_avfoundation/example/ios/{RunnerTests/RunnerTests-Bridging-Header.h => Runner/Runner-Bridging-Header.h} (79%) rename packages/camera/camera_avfoundation/example/ios/Runner/{AppDelegate.h => SceneDelegate.swift} (58%) delete mode 100644 packages/camera/camera_avfoundation/example/ios/Runner/main.m rename packages/camera/camera_avfoundation/example/ios/RunnerTests/{FLTCamExposureTests.swift => CameraExposureTests.swift} (99%) rename packages/camera/camera_avfoundation/example/ios/RunnerTests/{FLTCamSetDeviceOrientationTests.swift => CameraSetDeviceOrientationTests.swift} (98%) rename packages/camera/camera_avfoundation/example/ios/RunnerTests/{FLTCamSetFlashModeTests.swift => CameraSetFlashModeTests.swift} (98%) rename packages/camera/camera_avfoundation/example/ios/RunnerTests/{FLTCamFocusTests.swift => CameraSetFocusModeTests.swift} (99%) rename packages/camera/camera_avfoundation/example/ios/RunnerTests/{FLTCamZoomTests.swift => CameraZoomTests.swift} (98%) delete mode 100644 packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.h delete mode 100644 packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.m delete mode 100644 packages/camera/camera_avfoundation/example/ios/RunnerTests/Info.plist diff --git a/packages/camera/camera_avfoundation/example/.gitignore b/packages/camera/camera_avfoundation/example/.gitignore new file mode 100644 index 000000000000..3820a95c65c3 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/camera/camera_avfoundation/example/.metadata b/packages/camera/camera_avfoundation/example/.metadata new file mode 100644 index 000000000000..3e79a8d8a334 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "ff37bef603469fb030f2b72995ab929ccfc227f0" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + base_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + - platform: ios + create_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + base_revision: ff37bef603469fb030f2b72995ab929ccfc227f0 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/camera/camera_avfoundation/example/ios/.gitignore b/packages/camera/camera_avfoundation/example/ios/.gitignore new file mode 100644 index 000000000000..7a7f9873ad7d --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist b/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist index 6fe4034356ac..391a902b2beb 100644 --- a/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist +++ b/packages/camera/camera_avfoundation/example/ios/Flutter/AppFrameworkInfo.plist @@ -20,9 +20,5 @@ ???? CFBundleVersion 1.0 - UIRequiredDeviceCapabilities - - arm64 - 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 2776179e27a0..94bbaa417925 100644 --- a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,66 +3,65 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 335A7B032F6B061D005902FE /* CameraZoomTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE82F6B061D005902FE /* CameraZoomTests.swift */; }; + 335A7B042F6B061D005902FE /* AvailableCamerasTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AD72F6B061D005902FE /* AvailableCamerasTests.swift */; }; + 335A7B052F6B061D005902FE /* PhotoCaptureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AFE2F6B061D005902FE /* PhotoCaptureTests.swift */; }; + 335A7B062F6B061D005902FE /* SavePhotoDelegateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7B012F6B061D005902FE /* SavePhotoDelegateTests.swift */; }; + 335A7B072F6B061D005902FE /* MockCameraDeviceDiscoverer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AED2F6B061D005902FE /* MockCameraDeviceDiscoverer.swift */; }; + 335A7B082F6B061D005902FE /* MockFlutterTextureRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF92F6B061D005902FE /* MockFlutterTextureRegistry.swift */; }; + 335A7B092F6B061D005902FE /* QueueUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AFF2F6B061D005902FE /* QueueUtilsTests.swift */; }; + 335A7B0A2F6B061D005902FE /* CameraPreviewPauseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7ADF2F6B061D005902FE /* CameraPreviewPauseTests.swift */; }; + 335A7B0B2F6B061D005902FE /* CameraPluginCreateCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7ADC2F6B061D005902FE /* CameraPluginCreateCameraTests.swift */; }; + 335A7B0C2F6B061D005902FE /* MockCaptureDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AEF2F6B061D005902FE /* MockCaptureDevice.swift */; }; + 335A7B0D2F6B061D005902FE /* MockWritableData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AFC2F6B061D005902FE /* MockWritableData.swift */; }; + 335A7B0E2F6B061D005902FE /* CameraOrientationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7ADA2F6B061D005902FE /* CameraOrientationTests.swift */; }; + 335A7B0F2F6B061D005902FE /* CameraSetFlashModeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE72F6B061D005902FE /* CameraSetFlashModeTests.swift */; }; + 335A7B102F6B061D005902FE /* CameraSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE22F6B061D005902FE /* CameraSettingsTests.swift */; }; + 335A7B112F6B061D005902FE /* CameraExposureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE42F6B061D005902FE /* CameraExposureTests.swift */; }; + 335A7B122F6B061D005902FE /* CameraMethodChannelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AD92F6B061D005902FE /* CameraMethodChannelTests.swift */; }; + 335A7B132F6B061D005902FE /* MockGlobalEventApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AFB2F6B061D005902FE /* MockGlobalEventApi.swift */; }; + 335A7B142F6B061D005902FE /* MockAssetWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE92F6B061D005902FE /* MockAssetWriter.swift */; }; + 335A7B152F6B061D005902FE /* MockCapturePhotoOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF32F6B061D005902FE /* MockCapturePhotoOutput.swift */; }; + 335A7B162F6B061D005902FE /* CameraSetFocusModeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE52F6B061D005902FE /* CameraSetFocusModeTests.swift */; }; + 335A7B172F6B061D005902FE /* CameraPluginInitializeCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7ADE2F6B061D005902FE /* CameraPluginInitializeCameraTests.swift */; }; + 335A7B182F6B061D005902FE /* CameraPluginDelegatingMethodTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7ADD2F6B061D005902FE /* CameraPluginDelegatingMethodTests.swift */; }; + 335A7B192F6B061D005902FE /* MockAssetWriterInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AEA2F6B061D005902FE /* MockAssetWriterInput.swift */; }; + 335A7B1A2F6B061D005902FE /* CameraTestUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE32F6B061D005902FE /* CameraTestUtils.swift */; }; + 335A7B1B2F6B061D005902FE /* MockAssetWriterInputPixelBufferAdaptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AEB2F6B061D005902FE /* MockAssetWriterInputPixelBufferAdaptor.swift */; }; + 335A7B1C2F6B061D005902FE /* MockFrameRateRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AFA2F6B061D005902FE /* MockFrameRateRange.swift */; }; + 335A7B1D2F6B061D005902FE /* MockDeviceOrientationProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF62F6B061D005902FE /* MockDeviceOrientationProvider.swift */; }; + 335A7B1E2F6B061D005902FE /* MockCaptureSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF42F6B061D005902FE /* MockCaptureSession.swift */; }; + 335A7B1F2F6B061D005902FE /* CameraPermissionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7ADB2F6B061D005902FE /* CameraPermissionTests.swift */; }; + 335A7B202F6B061D005902FE /* MockCaptureDeviceInputFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF12F6B061D005902FE /* MockCaptureDeviceInputFactory.swift */; }; + 335A7B212F6B061D005902FE /* SampleBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7B002F6B061D005902FE /* SampleBufferTests.swift */; }; + 335A7B222F6B061D005902FE /* MockCaptureInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF22F6B061D005902FE /* MockCaptureInput.swift */; }; + 335A7B232F6B061D005902FE /* CameraSetDeviceOrientationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE62F6B061D005902FE /* CameraSetDeviceOrientationTests.swift */; }; + 335A7B242F6B061D005902FE /* MockCamera.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AEC2F6B061D005902FE /* MockCamera.swift */; }; + 335A7B252F6B061D005902FE /* MockCaptureDeviceFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF02F6B061D005902FE /* MockCaptureDeviceFormat.swift */; }; + 335A7B262F6B061D005902FE /* MockFLTCameraPermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF72F6B061D005902FE /* MockFLTCameraPermissionManager.swift */; }; + 335A7B272F6B061D005902FE /* CameraPropertiesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE02F6B061D005902FE /* CameraPropertiesTests.swift */; }; + 335A7B282F6B061D005902FE /* CameraSessionPresetsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AE12F6B061D005902FE /* CameraSessionPresetsTests.swift */; }; + 335A7B292F6B061D005902FE /* MockFlutterBinaryMessenger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF82F6B061D005902FE /* MockFlutterBinaryMessenger.swift */; }; + 335A7B2A2F6B061D005902FE /* CameraInitRaceConditionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AD82F6B061D005902FE /* CameraInitRaceConditionsTests.swift */; }; + 335A7B2B2F6B061D005902FE /* MockCaptureConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AEE2F6B061D005902FE /* MockCaptureConnection.swift */; }; + 335A7B2C2F6B061D005902FE /* StreamingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7B022F6B061D005902FE /* StreamingTests.swift */; }; + 335A7B2D2F6B061D005902FE /* MockCaptureVideoDataOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335A7AF52F6B061D005902FE /* MockCaptureVideoDataOutput.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 7884E8682EC3CC0700C636F2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 970ADABE2D6740A900EFDCD9 /* MockWritableData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 970ADABD2D6740A900EFDCD9 /* MockWritableData.swift */; }; - 972CA92B2D5A1D8C004B846F /* CameraPropertiesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 972CA92A2D5A1D8C004B846F /* CameraPropertiesTests.swift */; }; - 972CA92D2D5A28C4004B846F /* QueueUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 972CA92C2D5A28C4004B846F /* QueueUtilsTests.swift */; }; - 977A25202D5A439300931E34 /* AvailableCamerasTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 977A251F2D5A439300931E34 /* AvailableCamerasTests.swift */; }; - 977A25222D5A49EC00931E34 /* FLTCamFocusTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 977A25212D5A49EC00931E34 /* FLTCamFocusTests.swift */; }; - 977A25242D5A511600931E34 /* CameraPermissionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 977A25232D5A511600931E34 /* CameraPermissionTests.swift */; }; - 978296CF2D5F744B0009BDD3 /* PhotoCaptureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 978296CE2D5F744B0009BDD3 /* PhotoCaptureTests.swift */; }; - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; - 978D90B42D5F630300CD817E /* StreamingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 978D90B32D5F630300CD817E /* StreamingTests.swift */; }; - 97922B0D2D6380C300A9B4CF /* SampleBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97922B0C2D6380C300A9B4CF /* SampleBufferTests.swift */; }; - 979B3DFB2D5B6BC7009BDE1A /* ExceptionCatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 979B3DFA2D5B6BC7009BDE1A /* ExceptionCatcher.m */; }; - 979B3DFE2D5B985B009BDE1A /* CameraInitRaceConditionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979B3DFD2D5B985B009BDE1A /* CameraInitRaceConditionsTests.swift */; }; - 979B3E002D5B9E6C009BDE1A /* CameraMethodChannelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979B3DFF2D5B9E6C009BDE1A /* CameraMethodChannelTests.swift */; }; - 979B3E022D5BA48F009BDE1A /* CameraOrientationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979B3E012D5BA48F009BDE1A /* CameraOrientationTests.swift */; }; - 97BD4A0E2D5CC5AE00F857D5 /* CameraSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BD4A0D2D5CC5AE00F857D5 /* CameraSettingsTests.swift */; }; - 97BD4A102D5CE13500F857D5 /* CameraSessionPresetsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BD4A0F2D5CE13500F857D5 /* CameraSessionPresetsTests.swift */; }; - 97C0FFAE2D5E023200A36284 /* SavePhotoDelegateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C0FFAD2D5E023200A36284 /* SavePhotoDelegateTests.swift */; }; - 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 97DB234D2D566D0700CEFE66 /* CameraPreviewPauseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DB234C2D566D0700CEFE66 /* CameraPreviewPauseTests.swift */; }; - E11D6A8F2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */; }; - E11D6A912D82C7740031E6C5 /* FLTCamExposureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */; }; - E12C4FF62D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */; }; - E12C4FF82D68E85500515E70 /* MockFLTCameraPermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E12C4FF72D68E85500515E70 /* MockFLTCameraPermissionManager.swift */; }; - E142681D2D8483FD0046CBBC /* MockCaptureSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142681C2D8483FD0046CBBC /* MockCaptureSession.swift */; }; - E142681F2D8566230046CBBC /* CameraTestUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142681E2D8566230046CBBC /* CameraTestUtils.swift */; }; - E142F1362D8587F900824824 /* MockCameraDeviceDiscoverer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142F1352D8587F900824824 /* MockCameraDeviceDiscoverer.swift */; }; - E142F1382D85919700824824 /* MockDeviceOrientationProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142F1372D85919700824824 /* MockDeviceOrientationProvider.swift */; }; - E142F13A2D85940600824824 /* MockCapturePhotoOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142F1392D85940600824824 /* MockCapturePhotoOutput.swift */; }; - E142F13C2D8596F100824824 /* MockCaptureDeviceFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142F13B2D8596F100824824 /* MockCaptureDeviceFormat.swift */; }; - E142F13E2D859ADC00824824 /* MockFrameRateRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142F13D2D859ADC00824824 /* MockFrameRateRange.swift */; }; - E142F1402D85AD7900824824 /* MockCaptureConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142F13F2D85AD7900824824 /* MockCaptureConnection.swift */; }; - E142F1422D85AFA400824824 /* MockGlobalEventApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = E142F1412D85AFA400824824 /* MockGlobalEventApi.swift */; }; - E15139182D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */; }; - E15BC7E42D86D08700F66474 /* MockFlutterTextureRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7E32D86D08700F66474 /* MockFlutterTextureRegistry.swift */; }; - E15BC7E62D86D17D00F66474 /* MockFlutterBinaryMessenger.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7E52D86D17D00F66474 /* MockFlutterBinaryMessenger.swift */; }; - E16602952D8471C0003CFE12 /* FLTCamZoomTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */; }; - E1A5F4E32D80259C0005BA64 /* FLTCamSetFlashModeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */; }; - E1ABED6C2D94392500AED9CC /* MockAssetWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7E72D86D29F00F66474 /* MockAssetWriter.swift */; }; - E1ABED6D2D94392700AED9CC /* MockAssetWriterInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7E92D86D41F00F66474 /* MockAssetWriterInput.swift */; }; - E1ABED6E2D94392900AED9CC /* MockAssetWriterInputPixelBufferAdaptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7EB2D86D50200F66474 /* MockAssetWriterInputPixelBufferAdaptor.swift */; }; - E1ABED6F2D943B2500AED9CC /* MockCaptureDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7ED2D86D85500F66474 /* MockCaptureDevice.swift */; }; - E1ABED722D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1ABED702D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift */; }; - E1ABED732D943DC700AED9CC /* MockCaptureInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1ABED712D943DC700AED9CC /* MockCaptureInput.swift */; }; - E1FFEAAD2D6C8DD700B14107 /* MockCamera.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAAC2D6C8DD700B14107 /* MockCamera.swift */; }; - E1FFEAAF2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */; }; - E1FFEAB12D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 03BB766D2665316900CE5A93 /* PBXContainerItemProxy */ = { + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 97C146E61CF9000F007C117D /* Project object */; proxyType = 1; @@ -85,81 +84,68 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 03BB76682665316900CE5A93 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 03BB766C2665316900CE5A93 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 335A7AD72F6B061D005902FE /* AvailableCamerasTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableCamerasTests.swift; sourceTree = ""; }; + 335A7AD82F6B061D005902FE /* CameraInitRaceConditionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraInitRaceConditionsTests.swift; sourceTree = ""; }; + 335A7AD92F6B061D005902FE /* CameraMethodChannelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraMethodChannelTests.swift; sourceTree = ""; }; + 335A7ADA2F6B061D005902FE /* CameraOrientationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraOrientationTests.swift; sourceTree = ""; }; + 335A7ADB2F6B061D005902FE /* CameraPermissionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPermissionTests.swift; sourceTree = ""; }; + 335A7ADC2F6B061D005902FE /* CameraPluginCreateCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginCreateCameraTests.swift; sourceTree = ""; }; + 335A7ADD2F6B061D005902FE /* CameraPluginDelegatingMethodTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginDelegatingMethodTests.swift; sourceTree = ""; }; + 335A7ADE2F6B061D005902FE /* CameraPluginInitializeCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginInitializeCameraTests.swift; sourceTree = ""; }; + 335A7ADF2F6B061D005902FE /* CameraPreviewPauseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPreviewPauseTests.swift; sourceTree = ""; }; + 335A7AE02F6B061D005902FE /* CameraPropertiesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPropertiesTests.swift; sourceTree = ""; }; + 335A7AE12F6B061D005902FE /* CameraSessionPresetsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraSessionPresetsTests.swift; sourceTree = ""; }; + 335A7AE22F6B061D005902FE /* CameraSettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraSettingsTests.swift; sourceTree = ""; }; + 335A7AE32F6B061D005902FE /* CameraTestUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraTestUtils.swift; sourceTree = ""; }; + 335A7AE42F6B061D005902FE /* CameraExposureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraExposureTests.swift; sourceTree = ""; }; + 335A7AE52F6B061D005902FE /* CameraSetFocusModeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraSetFocusModeTests.swift; sourceTree = ""; }; + 335A7AE62F6B061D005902FE /* CameraSetDeviceOrientationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraSetDeviceOrientationTests.swift; sourceTree = ""; }; + 335A7AE72F6B061D005902FE /* CameraSetFlashModeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraSetFlashModeTests.swift; sourceTree = ""; }; + 335A7AE82F6B061D005902FE /* CameraZoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraZoomTests.swift; sourceTree = ""; }; + 335A7AE92F6B061D005902FE /* MockAssetWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriter.swift; sourceTree = ""; }; + 335A7AEA2F6B061D005902FE /* MockAssetWriterInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInput.swift; sourceTree = ""; }; + 335A7AEB2F6B061D005902FE /* MockAssetWriterInputPixelBufferAdaptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInputPixelBufferAdaptor.swift; sourceTree = ""; }; + 335A7AEC2F6B061D005902FE /* MockCamera.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCamera.swift; sourceTree = ""; }; + 335A7AED2F6B061D005902FE /* MockCameraDeviceDiscoverer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCameraDeviceDiscoverer.swift; sourceTree = ""; }; + 335A7AEE2F6B061D005902FE /* MockCaptureConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureConnection.swift; sourceTree = ""; }; + 335A7AEF2F6B061D005902FE /* MockCaptureDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureDevice.swift; sourceTree = ""; }; + 335A7AF02F6B061D005902FE /* MockCaptureDeviceFormat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureDeviceFormat.swift; sourceTree = ""; }; + 335A7AF12F6B061D005902FE /* MockCaptureDeviceInputFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureDeviceInputFactory.swift; sourceTree = ""; }; + 335A7AF22F6B061D005902FE /* MockCaptureInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureInput.swift; sourceTree = ""; }; + 335A7AF32F6B061D005902FE /* MockCapturePhotoOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCapturePhotoOutput.swift; sourceTree = ""; }; + 335A7AF42F6B061D005902FE /* MockCaptureSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureSession.swift; sourceTree = ""; }; + 335A7AF52F6B061D005902FE /* MockCaptureVideoDataOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureVideoDataOutput.swift; sourceTree = ""; }; + 335A7AF62F6B061D005902FE /* MockDeviceOrientationProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDeviceOrientationProvider.swift; sourceTree = ""; }; + 335A7AF72F6B061D005902FE /* MockFLTCameraPermissionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFLTCameraPermissionManager.swift; sourceTree = ""; }; + 335A7AF82F6B061D005902FE /* MockFlutterBinaryMessenger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterBinaryMessenger.swift; sourceTree = ""; }; + 335A7AF92F6B061D005902FE /* MockFlutterTextureRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterTextureRegistry.swift; sourceTree = ""; }; + 335A7AFA2F6B061D005902FE /* MockFrameRateRange.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFrameRateRange.swift; sourceTree = ""; }; + 335A7AFB2F6B061D005902FE /* MockGlobalEventApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockGlobalEventApi.swift; sourceTree = ""; }; + 335A7AFC2F6B061D005902FE /* MockWritableData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockWritableData.swift; sourceTree = ""; }; + 335A7AFE2F6B061D005902FE /* PhotoCaptureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoCaptureTests.swift; sourceTree = ""; }; + 335A7AFF2F6B061D005902FE /* QueueUtilsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueUtilsTests.swift; sourceTree = ""; }; + 335A7B002F6B061D005902FE /* SampleBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleBufferTests.swift; sourceTree = ""; }; + 335A7B012F6B061D005902FE /* SavePhotoDelegateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavePhotoDelegateTests.swift; sourceTree = ""; }; + 335A7B022F6B061D005902FE /* StreamingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamingTests.swift; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = ""; }; - 78DABEA22ED26510000E7860 /* camera_avfoundation */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = camera_avfoundation; path = ../../ios/camera_avfoundation; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 970ADABD2D6740A900EFDCD9 /* MockWritableData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockWritableData.swift; sourceTree = ""; }; - 972CA92A2D5A1D8C004B846F /* CameraPropertiesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPropertiesTests.swift; sourceTree = ""; }; - 972CA92C2D5A28C4004B846F /* QueueUtilsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueUtilsTests.swift; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 977A251F2D5A439300931E34 /* AvailableCamerasTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableCamerasTests.swift; sourceTree = ""; }; - 977A25212D5A49EC00931E34 /* FLTCamFocusTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamFocusTests.swift; sourceTree = ""; }; - 977A25232D5A511600931E34 /* CameraPermissionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPermissionTests.swift; sourceTree = ""; }; - 978296CE2D5F744B0009BDD3 /* PhotoCaptureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoCaptureTests.swift; sourceTree = ""; }; - 978D90B32D5F630300CD817E /* StreamingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamingTests.swift; sourceTree = ""; }; - 97922B0C2D6380C300A9B4CF /* SampleBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleBufferTests.swift; sourceTree = ""; }; - 979B3DF92D5B6BA2009BDE1A /* ExceptionCatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExceptionCatcher.h; sourceTree = ""; }; - 979B3DFA2D5B6BC7009BDE1A /* ExceptionCatcher.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExceptionCatcher.m; sourceTree = ""; }; - 979B3DFC2D5B985B009BDE1A /* RunnerTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RunnerTests-Bridging-Header.h"; sourceTree = ""; }; - 979B3DFD2D5B985B009BDE1A /* CameraInitRaceConditionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraInitRaceConditionsTests.swift; sourceTree = ""; }; - 979B3DFF2D5B9E6C009BDE1A /* CameraMethodChannelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraMethodChannelTests.swift; sourceTree = ""; }; - 979B3E012D5BA48F009BDE1A /* CameraOrientationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraOrientationTests.swift; sourceTree = ""; }; - 97BD4A0D2D5CC5AE00F857D5 /* CameraSettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraSettingsTests.swift; sourceTree = ""; }; - 97BD4A0F2D5CE13500F857D5 /* CameraSessionPresetsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraSessionPresetsTests.swift; sourceTree = ""; }; - 97C0FFAD2D5E023200A36284 /* SavePhotoDelegateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavePhotoDelegateTests.swift; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 97DB234C2D566D0700CEFE66 /* CameraPreviewPauseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPreviewPauseTests.swift; sourceTree = ""; }; - E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureVideoDataOutput.swift; sourceTree = ""; }; - E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamExposureTests.swift; sourceTree = ""; }; - E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginDelegatingMethodTests.swift; sourceTree = ""; }; - E12C4FF72D68E85500515E70 /* MockFLTCameraPermissionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFLTCameraPermissionManager.swift; sourceTree = ""; }; - E142681C2D8483FD0046CBBC /* MockCaptureSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureSession.swift; sourceTree = ""; }; - E142681E2D8566230046CBBC /* CameraTestUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraTestUtils.swift; sourceTree = ""; }; - E142F1352D8587F900824824 /* MockCameraDeviceDiscoverer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCameraDeviceDiscoverer.swift; sourceTree = ""; }; - E142F1372D85919700824824 /* MockDeviceOrientationProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDeviceOrientationProvider.swift; sourceTree = ""; }; - E142F1392D85940600824824 /* MockCapturePhotoOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCapturePhotoOutput.swift; sourceTree = ""; }; - E142F13B2D8596F100824824 /* MockCaptureDeviceFormat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureDeviceFormat.swift; sourceTree = ""; }; - E142F13D2D859ADC00824824 /* MockFrameRateRange.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFrameRateRange.swift; sourceTree = ""; }; - E142F13F2D85AD7900824824 /* MockCaptureConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureConnection.swift; sourceTree = ""; }; - E142F1412D85AFA400824824 /* MockGlobalEventApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockGlobalEventApi.swift; sourceTree = ""; }; - E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetDeviceOrientationTests.swift; sourceTree = ""; }; - E15BC7E32D86D08700F66474 /* MockFlutterTextureRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterTextureRegistry.swift; sourceTree = ""; }; - E15BC7E52D86D17D00F66474 /* MockFlutterBinaryMessenger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterBinaryMessenger.swift; sourceTree = ""; }; - E15BC7E72D86D29F00F66474 /* MockAssetWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriter.swift; sourceTree = ""; }; - E15BC7E92D86D41F00F66474 /* MockAssetWriterInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInput.swift; sourceTree = ""; }; - E15BC7EB2D86D50200F66474 /* MockAssetWriterInputPixelBufferAdaptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInputPixelBufferAdaptor.swift; sourceTree = ""; }; - E15BC7ED2D86D85500F66474 /* MockCaptureDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureDevice.swift; sourceTree = ""; }; - E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamZoomTests.swift; sourceTree = ""; }; - E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetFlashModeTests.swift; sourceTree = ""; }; - E1ABED702D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCaptureDeviceInputFactory.swift; sourceTree = ""; }; - E1ABED712D943DC700AED9CC /* MockCaptureInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCaptureInput.swift; sourceTree = ""; }; - E1FFEAAC2D6C8DD700B14107 /* MockCamera.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCamera.swift; sourceTree = ""; }; - E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginCreateCameraTests.swift; sourceTree = ""; }; - E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginInitializeCameraTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 03BB76652665316900CE5A93 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -171,64 +157,60 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 03BB76692665316900CE5A93 /* RunnerTests */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 7F29EB3F2D281C6D00740257 /* Mocks */, - 03BB766C2665316900CE5A93 /* Info.plist */, - E142681E2D8566230046CBBC /* CameraTestUtils.swift */, - 979B3DF92D5B6BA2009BDE1A /* ExceptionCatcher.h */, - 979B3DFA2D5B6BC7009BDE1A /* ExceptionCatcher.m */, - 979B3DFC2D5B985B009BDE1A /* RunnerTests-Bridging-Header.h */, - 979B3DFD2D5B985B009BDE1A /* CameraInitRaceConditionsTests.swift */, - 979B3DFF2D5B9E6C009BDE1A /* CameraMethodChannelTests.swift */, - 979B3E012D5BA48F009BDE1A /* CameraOrientationTests.swift */, - 97BD4A0D2D5CC5AE00F857D5 /* CameraSettingsTests.swift */, - 97BD4A0F2D5CE13500F857D5 /* CameraSessionPresetsTests.swift */, - 97DB234C2D566D0700CEFE66 /* CameraPreviewPauseTests.swift */, - 972CA92A2D5A1D8C004B846F /* CameraPropertiesTests.swift */, - 972CA92C2D5A28C4004B846F /* QueueUtilsTests.swift */, - 977A251F2D5A439300931E34 /* AvailableCamerasTests.swift */, - 977A25232D5A511600931E34 /* CameraPermissionTests.swift */, - 97C0FFAD2D5E023200A36284 /* SavePhotoDelegateTests.swift */, - 978D90B32D5F630300CD817E /* StreamingTests.swift */, - 97922B0C2D6380C300A9B4CF /* SampleBufferTests.swift */, - 978296CE2D5F744B0009BDD3 /* PhotoCaptureTests.swift */, - E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */, - E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */, - E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */, - E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */, - 977A25212D5A49EC00931E34 /* FLTCamFocusTests.swift */, - E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */, - E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */, - E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */, + 335A7AD72F6B061D005902FE /* AvailableCamerasTests.swift */, + 335A7AE42F6B061D005902FE /* CameraExposureTests.swift */, + 335A7AD82F6B061D005902FE /* CameraInitRaceConditionsTests.swift */, + 335A7AE52F6B061D005902FE /* CameraSetFocusModeTests.swift */, + 335A7AD92F6B061D005902FE /* CameraMethodChannelTests.swift */, + 335A7ADA2F6B061D005902FE /* CameraOrientationTests.swift */, + 335A7ADB2F6B061D005902FE /* CameraPermissionTests.swift */, + 335A7ADC2F6B061D005902FE /* CameraPluginCreateCameraTests.swift */, + 335A7ADD2F6B061D005902FE /* CameraPluginDelegatingMethodTests.swift */, + 335A7ADE2F6B061D005902FE /* CameraPluginInitializeCameraTests.swift */, + 335A7ADF2F6B061D005902FE /* CameraPreviewPauseTests.swift */, + 335A7AE02F6B061D005902FE /* CameraPropertiesTests.swift */, + 335A7AE12F6B061D005902FE /* CameraSessionPresetsTests.swift */, + 335A7AE62F6B061D005902FE /* CameraSetDeviceOrientationTests.swift */, + 335A7AE72F6B061D005902FE /* CameraSetFlashModeTests.swift */, + 335A7AE22F6B061D005902FE /* CameraSettingsTests.swift */, + 335A7AE32F6B061D005902FE /* CameraTestUtils.swift */, + 335A7AE82F6B061D005902FE /* CameraZoomTests.swift */, + 335A7AFE2F6B061D005902FE /* PhotoCaptureTests.swift */, + 335A7AFF2F6B061D005902FE /* QueueUtilsTests.swift */, + 335A7B002F6B061D005902FE /* SampleBufferTests.swift */, + 335A7B012F6B061D005902FE /* SavePhotoDelegateTests.swift */, + 335A7B022F6B061D005902FE /* StreamingTests.swift */, + 335A7AFD2F6B061D005902FE /* Mocks */, ); path = RunnerTests; sourceTree = ""; }; - 7F29EB3F2D281C6D00740257 /* Mocks */ = { + 335A7AFD2F6B061D005902FE /* Mocks */ = { isa = PBXGroup; children = ( - E15BC7E72D86D29F00F66474 /* MockAssetWriter.swift */, - E15BC7E92D86D41F00F66474 /* MockAssetWriterInput.swift */, - E15BC7EB2D86D50200F66474 /* MockAssetWriterInputPixelBufferAdaptor.swift */, - E15BC7E52D86D17D00F66474 /* MockFlutterBinaryMessenger.swift */, - E15BC7E32D86D08700F66474 /* MockFlutterTextureRegistry.swift */, - E142F1412D85AFA400824824 /* MockGlobalEventApi.swift */, - E15BC7ED2D86D85500F66474 /* MockCaptureDevice.swift */, - E1ABED702D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift */, - E1ABED712D943DC700AED9CC /* MockCaptureInput.swift */, - E142F13F2D85AD7900824824 /* MockCaptureConnection.swift */, - E142F13B2D8596F100824824 /* MockCaptureDeviceFormat.swift */, - E142F13D2D859ADC00824824 /* MockFrameRateRange.swift */, - E142F1392D85940600824824 /* MockCapturePhotoOutput.swift */, - E142F1372D85919700824824 /* MockDeviceOrientationProvider.swift */, - E142F1352D8587F900824824 /* MockCameraDeviceDiscoverer.swift */, - E1FFEAAC2D6C8DD700B14107 /* MockCamera.swift */, - E12C4FF72D68E85500515E70 /* MockFLTCameraPermissionManager.swift */, - 970ADABD2D6740A900EFDCD9 /* MockWritableData.swift */, - E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */, - E142681C2D8483FD0046CBBC /* MockCaptureSession.swift */, + 335A7AE92F6B061D005902FE /* MockAssetWriter.swift */, + 335A7AEA2F6B061D005902FE /* MockAssetWriterInput.swift */, + 335A7AEB2F6B061D005902FE /* MockAssetWriterInputPixelBufferAdaptor.swift */, + 335A7AEC2F6B061D005902FE /* MockCamera.swift */, + 335A7AED2F6B061D005902FE /* MockCameraDeviceDiscoverer.swift */, + 335A7AEE2F6B061D005902FE /* MockCaptureConnection.swift */, + 335A7AEF2F6B061D005902FE /* MockCaptureDevice.swift */, + 335A7AF02F6B061D005902FE /* MockCaptureDeviceFormat.swift */, + 335A7AF12F6B061D005902FE /* MockCaptureDeviceInputFactory.swift */, + 335A7AF22F6B061D005902FE /* MockCaptureInput.swift */, + 335A7AF32F6B061D005902FE /* MockCapturePhotoOutput.swift */, + 335A7AF42F6B061D005902FE /* MockCaptureSession.swift */, + 335A7AF52F6B061D005902FE /* MockCaptureVideoDataOutput.swift */, + 335A7AF62F6B061D005902FE /* MockDeviceOrientationProvider.swift */, + 335A7AF72F6B061D005902FE /* MockFLTCameraPermissionManager.swift */, + 335A7AF82F6B061D005902FE /* MockFlutterBinaryMessenger.swift */, + 335A7AF92F6B061D005902FE /* MockFlutterTextureRegistry.swift */, + 335A7AFA2F6B061D005902FE /* MockFrameRateRange.swift */, + 335A7AFB2F6B061D005902FE /* MockGlobalEventApi.swift */, + 335A7AFC2F6B061D005902FE /* MockWritableData.swift */, ); path = Mocks; sourceTree = ""; @@ -236,8 +218,6 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 78DABEA22ED26510000E7860 /* camera_avfoundation */, - 784666492D4C4C64000A1A5F /* FlutterFramework */, 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, @@ -252,9 +232,8 @@ children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, - 03BB76692665316900CE5A93 /* RunnerTests */, 97C146EF1CF9000F007C117D /* Products */, - FD386F00E98D73419C929072 /* Pods */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -262,7 +241,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, - 03BB76682665316900CE5A93 /* RunnerTests.xctest */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -270,53 +249,37 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 7884E8672EC3CC0400C636F2 /* SceneDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, ); path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 97C146F21CF9000F007C117D /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - FD386F00E98D73419C929072 /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 03BB76672665316900CE5A93 /* RunnerTests */ = { + 331C8080294A63A400263BE5 /* RunnerTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 03BB76712665316900CE5A93 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 03BB76642665316900CE5A93 /* Sources */, - 03BB76652665316900CE5A93 /* Frameworks */, - 03BB76662665316900CE5A93 /* Resources */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, ); buildRules = ( ); dependencies = ( - 03BB766E2665316900CE5A93 /* PBXTargetDependency */, + 331C8086294A63A400263BE5 /* PBXTargetDependency */, ); name = RunnerTests; - productName = camera_exampleTests; - productReference = 03BB76682665316900CE5A93 /* RunnerTests.xctest */; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 97C146ED1CF9000F007C117D /* Runner */ = { @@ -348,22 +311,22 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1510; - ORGANIZATIONNAME = "The Flutter Authors"; + ORGANIZATIONNAME = ""; TargetAttributes = { - 03BB76672665316900CE5A93 = { - CreatedOnToolsVersion = 12.5; - LastSwiftMigration = 1540; - ProvisioningStyle = Automatic; + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; TestTargetID = 97C146ED1CF9000F007C117D; }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -372,20 +335,20 @@ ); mainGroup = 97C146E51CF9000F007C117D; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, - 03BB76672665316900CE5A93 /* RunnerTests */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 03BB76662665316900CE5A93 /* Resources */ = { + 331C807F294A63A400263BE5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -440,54 +403,53 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 03BB76642665316900CE5A93 /* Sources */ = { + 331C807D294A63A400263BE5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E11D6A912D82C7740031E6C5 /* FLTCamExposureTests.swift in Sources */, - 97BD4A0E2D5CC5AE00F857D5 /* CameraSettingsTests.swift in Sources */, - E142F1422D85AFA400824824 /* MockGlobalEventApi.swift in Sources */, - 972CA92D2D5A28C4004B846F /* QueueUtilsTests.swift in Sources */, - E1FFEAB12D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift in Sources */, - E142F1362D8587F900824824 /* MockCameraDeviceDiscoverer.swift in Sources */, - 979B3DFB2D5B6BC7009BDE1A /* ExceptionCatcher.m in Sources */, - E1ABED6E2D94392900AED9CC /* MockAssetWriterInputPixelBufferAdaptor.swift in Sources */, - E1ABED6C2D94392500AED9CC /* MockAssetWriter.swift in Sources */, - E1A5F4E32D80259C0005BA64 /* FLTCamSetFlashModeTests.swift in Sources */, - E1ABED6D2D94392700AED9CC /* MockAssetWriterInput.swift in Sources */, - 977A25242D5A511600931E34 /* CameraPermissionTests.swift in Sources */, - 970ADABE2D6740A900EFDCD9 /* MockWritableData.swift in Sources */, - 979B3DFE2D5B985B009BDE1A /* CameraInitRaceConditionsTests.swift in Sources */, - E142F13A2D85940600824824 /* MockCapturePhotoOutput.swift in Sources */, - E12C4FF82D68E85500515E70 /* MockFLTCameraPermissionManager.swift in Sources */, - 97922B0D2D6380C300A9B4CF /* SampleBufferTests.swift in Sources */, - E142681D2D8483FD0046CBBC /* MockCaptureSession.swift in Sources */, - E15139182D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift in Sources */, - 972CA92B2D5A1D8C004B846F /* CameraPropertiesTests.swift in Sources */, - E15BC7E42D86D08700F66474 /* MockFlutterTextureRegistry.swift in Sources */, - 978296CF2D5F744B0009BDD3 /* PhotoCaptureTests.swift in Sources */, - 979B3E002D5B9E6C009BDE1A /* CameraMethodChannelTests.swift in Sources */, - E142F13C2D8596F100824824 /* MockCaptureDeviceFormat.swift in Sources */, - E1FFEAAF2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift in Sources */, - E142F13E2D859ADC00824824 /* MockFrameRateRange.swift in Sources */, - 97DB234D2D566D0700CEFE66 /* CameraPreviewPauseTests.swift in Sources */, - E1ABED732D943DC700AED9CC /* MockCaptureInput.swift in Sources */, - E1ABED6F2D943B2500AED9CC /* MockCaptureDevice.swift in Sources */, - E1ABED722D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift in Sources */, - 977A25202D5A439300931E34 /* AvailableCamerasTests.swift in Sources */, - E142681F2D8566230046CBBC /* CameraTestUtils.swift in Sources */, - E1FFEAAD2D6C8DD700B14107 /* MockCamera.swift in Sources */, - E16602952D8471C0003CFE12 /* FLTCamZoomTests.swift in Sources */, - 97BD4A102D5CE13500F857D5 /* CameraSessionPresetsTests.swift in Sources */, - 979B3E022D5BA48F009BDE1A /* CameraOrientationTests.swift in Sources */, - E12C4FF62D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift in Sources */, - 977A25222D5A49EC00931E34 /* FLTCamFocusTests.swift in Sources */, - 978D90B42D5F630300CD817E /* StreamingTests.swift in Sources */, - E142F1382D85919700824824 /* MockDeviceOrientationProvider.swift in Sources */, - E11D6A8F2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift in Sources */, - E142F1402D85AD7900824824 /* MockCaptureConnection.swift in Sources */, - E15BC7E62D86D17D00F66474 /* MockFlutterBinaryMessenger.swift in Sources */, - 97C0FFAE2D5E023200A36284 /* SavePhotoDelegateTests.swift in Sources */, + 335A7B032F6B061D005902FE /* CameraZoomTests.swift in Sources */, + 335A7B042F6B061D005902FE /* AvailableCamerasTests.swift in Sources */, + 335A7B052F6B061D005902FE /* PhotoCaptureTests.swift in Sources */, + 335A7B062F6B061D005902FE /* SavePhotoDelegateTests.swift in Sources */, + 335A7B072F6B061D005902FE /* MockCameraDeviceDiscoverer.swift in Sources */, + 335A7B082F6B061D005902FE /* MockFlutterTextureRegistry.swift in Sources */, + 335A7B092F6B061D005902FE /* QueueUtilsTests.swift in Sources */, + 335A7B0A2F6B061D005902FE /* CameraPreviewPauseTests.swift in Sources */, + 335A7B0B2F6B061D005902FE /* CameraPluginCreateCameraTests.swift in Sources */, + 335A7B0C2F6B061D005902FE /* MockCaptureDevice.swift in Sources */, + 335A7B0D2F6B061D005902FE /* MockWritableData.swift in Sources */, + 335A7B0E2F6B061D005902FE /* CameraOrientationTests.swift in Sources */, + 335A7B0F2F6B061D005902FE /* CameraSetFlashModeTests.swift in Sources */, + 335A7B102F6B061D005902FE /* CameraSettingsTests.swift in Sources */, + 335A7B112F6B061D005902FE /* CameraExposureTests.swift in Sources */, + 335A7B122F6B061D005902FE /* CameraMethodChannelTests.swift in Sources */, + 335A7B132F6B061D005902FE /* MockGlobalEventApi.swift in Sources */, + 335A7B142F6B061D005902FE /* MockAssetWriter.swift in Sources */, + 335A7B152F6B061D005902FE /* MockCapturePhotoOutput.swift in Sources */, + 335A7B162F6B061D005902FE /* CameraSetFocusModeTests.swift in Sources */, + 335A7B172F6B061D005902FE /* CameraPluginInitializeCameraTests.swift in Sources */, + 335A7B182F6B061D005902FE /* CameraPluginDelegatingMethodTests.swift in Sources */, + 335A7B192F6B061D005902FE /* MockAssetWriterInput.swift in Sources */, + 335A7B1A2F6B061D005902FE /* CameraTestUtils.swift in Sources */, + 335A7B1B2F6B061D005902FE /* MockAssetWriterInputPixelBufferAdaptor.swift in Sources */, + 335A7B1C2F6B061D005902FE /* MockFrameRateRange.swift in Sources */, + 335A7B1D2F6B061D005902FE /* MockDeviceOrientationProvider.swift in Sources */, + 335A7B1E2F6B061D005902FE /* MockCaptureSession.swift in Sources */, + 335A7B1F2F6B061D005902FE /* CameraPermissionTests.swift in Sources */, + 335A7B202F6B061D005902FE /* MockCaptureDeviceInputFactory.swift in Sources */, + 335A7B212F6B061D005902FE /* SampleBufferTests.swift in Sources */, + 335A7B222F6B061D005902FE /* MockCaptureInput.swift in Sources */, + 335A7B232F6B061D005902FE /* CameraSetDeviceOrientationTests.swift in Sources */, + 335A7B242F6B061D005902FE /* MockCamera.swift in Sources */, + 335A7B252F6B061D005902FE /* MockCaptureDeviceFormat.swift in Sources */, + 335A7B262F6B061D005902FE /* MockFLTCameraPermissionManager.swift in Sources */, + 335A7B272F6B061D005902FE /* CameraPropertiesTests.swift in Sources */, + 335A7B282F6B061D005902FE /* CameraSessionPresetsTests.swift in Sources */, + 335A7B292F6B061D005902FE /* MockFlutterBinaryMessenger.swift in Sources */, + 335A7B2A2F6B061D005902FE /* CameraInitRaceConditionsTests.swift in Sources */, + 335A7B2B2F6B061D005902FE /* MockCaptureConnection.swift in Sources */, + 335A7B2C2F6B061D005902FE /* StreamingTests.swift in Sources */, + 335A7B2D2F6B061D005902FE /* MockCaptureVideoDataOutput.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -495,19 +457,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, - 97C146F31CF9000F007C117D /* main.m in Sources */, + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + 7884E8682EC3CC0700C636F2 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 03BB766E2665316900CE5A93 /* PBXTargetDependency */ = { + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 97C146ED1CF9000F007C117D /* Runner */; - targetProxy = 03BB766D2665316900CE5A93 /* PBXContainerItemProxy */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -531,73 +493,131 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 03BB766F2665316900CE5A93 /* Debug */ = { + 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = RunnerTests/Info.plist; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", - "@loader_path/Frameworks", ); - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "dev.flutter.plugins.cameraExample.camera-exampleTests"; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.cameraExample; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "RunnerTests/RunnerTests-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.cameraExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; }; name = Debug; }; - 03BB76702665316900CE5A93 /* Release */ = { + 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = RunnerTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "dev.flutter.plugins.cameraExample.camera-exampleTests"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.cameraExample.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "RunnerTests/RunnerTests-Bridging-Header.h"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; }; name = Release; }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.cameraExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -627,6 +647,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -653,7 +674,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -683,6 +704,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -694,6 +716,9 @@ IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -704,22 +729,20 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.cameraExample; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.cameraExample; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; }; @@ -728,33 +751,31 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.cameraExample; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.cameraExample; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 03BB76712665316900CE5A93 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 03BB766F2665316900CE5A93 /* Debug */, - 03BB76702665316900CE5A93 /* Release */, + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -764,6 +785,7 @@ buildConfigurations = ( 97C147031CF9000F007C117D /* Debug */, 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -773,6 +795,7 @@ buildConfigurations = ( 97C147061CF9000F007C117D /* Debug */, 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -780,7 +803,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000000..18d981003d68 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000000..f9b0d7c5ea15 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index ba0c5508103c..c3fedb29c990 100644 --- a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -44,6 +44,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" shouldUseLaunchSchemeArgsEnv = "YES"> + skipped = "NO" + parallelizable = "YES"> @@ -71,6 +73,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -88,16 +91,9 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - - - - - diff --git a/packages/camera/camera_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/camera/camera_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000000..f9b0d7c5ea15 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.m b/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.m deleted file mode 100644 index fff9545d5055..000000000000 --- a/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.m +++ /dev/null @@ -1,17 +0,0 @@ -// 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. - -#include "AppDelegate.h" -#include "GeneratedPluginRegistrant.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [GeneratedPluginRegistrant registerWithRegistry:self]; - // Override point for customization after application launch. - return [super application:application didFinishLaunchingWithOptions:launchOptions]; -} - -@end diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.swift b/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000000..ba78d5879052 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,27 @@ +// 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 Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + // Plugin registration eventually sends camera operations on the background queue, which + // would run concurrently with the test cases during unit tests, making the debugging + // process confusing. This setup is actually not necessary for the unit tests, so + // skip it when running unit tests. + if NSClassFromString("XCTestCase") != nil { + return + } + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } +} diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d225b3c2cfe2..d36b1fab2d9d 100644 --- a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -109,8 +109,9 @@ "scale" : "2x" }, { - "idiom" : "ios-marketing", "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", "scale" : "1x" } ], @@ -118,4 +119,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 zcmeHN2~<R zh`|8`A_PQ1nSu(UMFx?8j8PC!!VDphaL#`F42fd#7Vlc`zIE4n%Y~eiz4y1j|NDpi z?<@|pSJ-HM`qifhf@m%MamgwK83`XpBA<+azdF#2QsT{X@z0A9Bq>~TVErigKH1~P zRX-!h-f0NJ4Mh++{D}J+K>~~rq}d%o%+4dogzXp7RxX4C>Km5XEI|PAFDmo;DFm6G zzjVoB`@qW98Yl0Kvc-9w09^PrsobmG*Eju^=3f?0o-t$U)TL1B3;sZ^!++3&bGZ!o-*6w?;oOhf z=A+Qb$scV5!RbG+&2S}BQ6YH!FKb0``VVX~T$dzzeSZ$&9=X$3)_7Z{SspSYJ!lGE z7yig_41zpQ)%5dr4ff0rh$@ky3-JLRk&DK)NEIHecf9c*?Z1bUB4%pZjQ7hD!A0r-@NF(^WKdr(LXj|=UE7?gBYGgGQV zidf2`ZT@pzXf7}!NH4q(0IMcxsUGDih(0{kRSez&z?CFA0RVXsVFw3^u=^KMtt95q z43q$b*6#uQDLoiCAF_{RFc{!H^moH_cmll#Fc^KXi{9GDl{>%+3qyfOE5;Zq|6#Hb zp^#1G+z^AXfRKaa9HK;%b3Ux~U@q?xg<2DXP%6k!3E)PA<#4$ui8eDy5|9hA5&{?v z(-;*1%(1~-NTQ`Is1_MGdQ{+i*ccd96ab$R$T3=% zw_KuNF@vI!A>>Y_2pl9L{9h1-C6H8<)J4gKI6{WzGBi<@u3P6hNsXG=bRq5c+z;Gc3VUCe;LIIFDmQAGy+=mRyF++u=drBWV8-^>0yE9N&*05XHZpPlE zxu@?8(ZNy7rm?|<+UNe0Vs6&o?l`Pt>P&WaL~M&#Eh%`rg@Mbb)J&@DA-wheQ>hRV z<(XhigZAT z>=M;URcdCaiO3d^?H<^EiEMDV+7HsTiOhoaMX%P65E<(5xMPJKxf!0u>U~uVqnPN7T!X!o@_gs3Ct1 zlZ_$5QXP4{Aj645wG_SNT&6m|O6~Tsl$q?nK*)(`{J4b=(yb^nOATtF1_aS978$x3 zx>Q@s4i3~IT*+l{@dx~Hst21fR*+5}S1@cf>&8*uLw-0^zK(+OpW?cS-YG1QBZ5q! zgTAgivzoF#`cSz&HL>Ti!!v#?36I1*l^mkrx7Y|K6L#n!-~5=d3;K<;Zqi|gpNUn_ z_^GaQDEQ*jfzh;`j&KXb66fWEk1K7vxQIMQ_#Wu_%3 z4Oeb7FJ`8I>Px;^S?)}2+4D_83gHEq>8qSQY0PVP?o)zAv3K~;R$fnwTmI-=ZLK`= zTm+0h*e+Yfr(IlH3i7gUclNH^!MU>id$Jw>O?2i0Cila#v|twub21@e{S2v}8Z13( zNDrTXZVgris|qYm<0NU(tAPouG!QF4ZNpZPkX~{tVf8xY690JqY1NVdiTtW+NqyRP zZ&;T0ikb8V{wxmFhlLTQ&?OP7 z;(z*<+?J2~z*6asSe7h`$8~Se(@t(#%?BGLVs$p``;CyvcT?7Y!{tIPva$LxCQ&4W z6v#F*);|RXvI%qnoOY&i4S*EL&h%hP3O zLsrFZhv&Hu5tF$Lx!8(hs&?!Kx5&L(fdu}UI5d*wn~A`nPUhG&Rv z2#ixiJdhSF-K2tpVL=)5UkXRuPAFrEW}7mW=uAmtVQ&pGE-&az6@#-(Te^n*lrH^m@X-ftVcwO_#7{WI)5v(?>uC9GG{lcGXYJ~Q8q zbMFl7;t+kV;|;KkBW2!P_o%Czhw&Q(nXlxK9ak&6r5t_KH8#1Mr-*0}2h8R9XNkr zto5-b7P_auqTJb(TJlmJ9xreA=6d=d)CVbYP-r4$hDn5|TIhB>SReMfh&OVLkMk-T zYf%$taLF0OqYF?V{+6Xkn>iX@TuqQ?&cN6UjC9YF&%q{Ut3zv{U2)~$>-3;Dp)*(? zg*$mu8^i=-e#acaj*T$pNowo{xiGEk$%DusaQiS!KjJH96XZ-hXv+jk%ard#fu=@Q z$AM)YWvE^{%tDfK%nD49=PI|wYu}lYVbB#a7wtN^Nml@CE@{Gv7+jo{_V?I*jkdLD zJE|jfdrmVbkfS>rN*+`#l%ZUi5_bMS<>=MBDNlpiSb_tAF|Zy`K7kcp@|d?yaTmB^ zo?(vg;B$vxS|SszusORgDg-*Uitzdi{dUV+glA~R8V(?`3GZIl^egW{a919!j#>f` znL1o_^-b`}xnU0+~KIFLQ)$Q6#ym%)(GYC`^XM*{g zv3AM5$+TtDRs%`2TyR^$(hqE7Y1b&`Jd6dS6B#hDVbJlUXcG3y*439D8MrK!2D~6gn>UD4Imctb z+IvAt0iaW73Iq$K?4}H`7wq6YkTMm`tcktXgK0lKPmh=>h+l}Y+pDtvHnG>uqBA)l zAH6BV4F}v$(o$8Gfo*PB>IuaY1*^*`OTx4|hM8jZ?B6HY;F6p4{`OcZZ(us-RVwDx zUzJrCQlp@mz1ZFiSZ*$yX3c_#h9J;yBE$2g%xjmGF4ca z&yL`nGVs!Zxsh^j6i%$a*I3ZD2SoNT`{D%mU=LKaEwbN(_J5%i-6Va?@*>=3(dQy` zOv%$_9lcy9+(t>qohkuU4r_P=R^6ME+wFu&LA9tw9RA?azGhjrVJKy&8=*qZT5Dr8g--d+S8zAyJ$1HlW3Olryt`yE zFIph~Z6oF&o64rw{>lgZISC6p^CBer9C5G6yq%?8tC+)7*d+ib^?fU!JRFxynRLEZ zj;?PwtS}Ao#9whV@KEmwQgM0TVP{hs>dg(1*DiMUOKHdQGIqa0`yZnHk9mtbPfoLx zo;^V6pKUJ!5#n`w2D&381#5#_t}AlTGEgDz$^;u;-vxDN?^#5!zN9ngytY@oTv!nc zp1Xn8uR$1Z;7vY`-<*?DfPHB;x|GUi_fI9@I9SVRv1)qETbNU_8{5U|(>Du84qP#7 z*l9Y$SgA&wGbj>R1YeT9vYjZuC@|{rajTL0f%N@>3$DFU=`lSPl=Iv;EjuGjBa$Gw zHD-;%YOE@<-!7-Mn`0WuO3oWuL6tB2cpPw~Nvuj|KM@))ixuDK`9;jGMe2d)7gHin zS<>k@!x;!TJEc#HdL#RF(`|4W+H88d4V%zlh(7#{q2d0OQX9*FW^`^_<3r$kabWAB z$9BONo5}*(%kx zOXi-yM_cmB3>inPpI~)duvZykJ@^^aWzQ=eQ&STUa}2uT@lV&WoRzkUoE`rR0)`=l zFT%f|LA9fCw>`enm$p7W^E@U7RNBtsh{_-7vVz3DtB*y#*~(L9+x9*wn8VjWw|Q~q zKFsj1Yl>;}%MG3=PY`$g$_mnyhuV&~O~u~)968$0b2!Jkd;2MtAP#ZDYw9hmK_+M$ zb3pxyYC&|CuAbtiG8HZjj?MZJBFbt`ryf+c1dXFuC z0*ZQhBzNBd*}s6K_G}(|Z_9NDV162#y%WSNe|FTDDhx)K!c(mMJh@h87@8(^YdK$&d*^WQe8Z53 z(|@MRJ$Lk-&ii74MPIs80WsOFZ(NX23oR-?As+*aq6b?~62@fSVmM-_*cb1RzZ)`5$agEiL`-E9s7{GM2?(KNPgK1(+c*|-FKoy}X(D_b#etO|YR z(BGZ)0Ntfv-7R4GHoXp?l5g#*={S1{u-QzxCGng*oWr~@X-5f~RA14b8~B+pLKvr4 zfgL|7I>jlak9>D4=(i(cqYf7#318!OSR=^`xxvI!bBlS??`xxWeg?+|>MxaIdH1U~#1tHu zB{QMR?EGRmQ_l4p6YXJ{o(hh-7Tdm>TAX380TZZZyVkqHNzjUn*_|cb?T? zt;d2s-?B#Mc>T-gvBmQZx(y_cfkXZO~{N zT6rP7SD6g~n9QJ)8F*8uHxTLCAZ{l1Y&?6v)BOJZ)=R-pY=Y=&1}jE7fQ>USS}xP#exo57uND0i*rEk@$;nLvRB@u~s^dwRf?G?_enN@$t* zbL%JO=rV(3Ju8#GqUpeE3l_Wu1lN9Y{D4uaUe`g>zlj$1ER$6S6@{m1!~V|bYkhZA z%CvrDRTkHuajMU8;&RZ&itnC~iYLW4DVkP<$}>#&(`UO>!n)Po;Mt(SY8Yb`AS9lt znbX^i?Oe9r_o=?})IHKHoQGKXsps_SE{hwrg?6dMI|^+$CeC&z@*LuF+P`7LfZ*yr+KN8B4{Nzv<`A(wyR@!|gw{zB6Ha ziwPAYh)oJ(nlqSknu(8g9N&1hu0$vFK$W#mp%>X~AU1ay+EKWcFdif{% z#4!4aoVVJ;ULmkQf!ke2}3hqxLK>eq|-d7Ly7-J9zMpT`?dxo6HdfJA|t)?qPEVBDv z{y_b?4^|YA4%WW0VZd8C(ZgQzRI5(I^)=Ub`Y#MHc@nv0w-DaJAqsbEHDWG8Ia6ju zo-iyr*sq((gEwCC&^TYBWt4_@|81?=B-?#P6NMff(*^re zYqvDuO`K@`mjm_Jd;mW_tP`3$cS?R$jR1ZN09$YO%_iBqh5ftzSpMQQtxKFU=FYmP zeY^jph+g<4>YO;U^O>-NFLn~-RqlHvnZl2yd2A{Yc1G@Ga$d+Q&(f^tnPf+Z7serIU};17+2DU_f4Z z@GaPFut27d?!YiD+QP@)T=77cR9~MK@bd~pY%X(h%L={{OIb8IQmf-!xmZkm8A0Ga zQSWONI17_ru5wpHg3jI@i9D+_Y|pCqVuHJNdHUauTD=R$JcD2K_liQisqG$(sm=k9;L* z!L?*4B~ql7uioSX$zWJ?;q-SWXRFhz2Jt4%fOHA=Bwf|RzhwqdXGr78y$J)LR7&3T zE1WWz*>GPWKZ0%|@%6=fyx)5rzUpI;bCj>3RKzNG_1w$fIFCZ&UR0(7S?g}`&Pg$M zf`SLsz8wK82Vyj7;RyKmY{a8G{2BHG%w!^T|Njr!h9TO2LaP^_f22Q1=l$QiU84ao zHe_#{S6;qrC6w~7{y(hs-?-j?lbOfgH^E=XcSgnwW*eEz{_Z<_Gw7hsN~k)CYt4dQDFxbs5*_&e@Hj)wtt(&JE<3Eq*D z;_gQLvqXoKv=I*gWqM9C(Tvu0>=?hTbOp9!6k6AF;>f6|S5%jGEE}TA9h)e`Yuiu8 d7)l?o1NFcJg%EAfM$P~L002ovPDHLkV1g^Dnv?(l delta 550 zcmV+>0@?ki0<;8>8Gi-<0051N9Sr~g00DDSM?wIu&K&6g00HhvL_t(I5v`QFOB_)Y z#?QI;j_a;jjf#Z$YJ7mH(xecJU?W)A`9CN~KrBV85C}GDQ=|;GDFPNjtWty!L{u=? zh>8yo%^GE+J9o~_IZFoiamQVQXP7%LzTbT3F@uf+9x&7cvVV%GdjTaC;zf>@mq<=3 z!c<%*UT)@yJ|0BK6~d4Jx-*KV`ZQ(@VyUPupum=XhInNG#Z_k-X|hK{B}~9IfiWx} zLD5QY6Vm)p0NrWymdkrHPN5Vgwd>5>4HI1=@PA+e^rq~CEj|n2X`??)0mUI*D{KBn zjv{V=y5X9|X@3grkpcXC6oou4ML~ezCc2EtnsQTB4tWNg?4bkf;hG7IMfhgNI(FV5 zGs4|*GyMTIY0$B=_*mso9+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f<+$JJpcdz delta 1274 zcmV@pi1MCNO0zH7s z{8#}P0)7Ba8DqYf&QgSne>X__O83t$NZM4&R0{XJq|x}oAU?tcfC@|eNz$04T}34& z8DJf78R&>*Zz`k$q{`#gfGHnx7nlH^G{y`jfER)1<_fNi<9aM%_zrm1C`yPkKma(+ ztQ;y*CR2bbBYz>zG*SVsfpkGU(q>uHZf3iogk_%#9E|5SWeHrmAo>P;ejX7mwq#*} zW25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+X$F_KMdb6sRz!~7K zkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&IDi_4_D!s#MVXp|-XhH;H z#&@_;oApJVd}}5O@b=X_gJboD^-fM@6|#V@sA%X)Rlkd}3MLH0dGXGG&-HX|aD~|M zC)W#H7=H?AbtdaV#dGpubj_O^J-SlWpVNv-5(;wR%mvE9`Qaqo>03b&##eNNf=m#B z9@^lsd8tJ;BvI86kNV zc~0CY(7V{s+h%cWG|y=gt|q`z$l<(@qU=i?9q#uz`G?PgDMK!VMGidHZt*N+1L0ZI zFkH=mFtywc6rJ}C_?)=m)18V!ZQ`*-j(D`gCFK|nt#{bk*%%zuQ7o7kvJgA^=(^7b zzkm5GZ;jxRn{Wup8IOUx8D4uh&(=Ox-7$a;U><*5L^!% zxRlw)vAbh;sdlR||&e}8_8%)c2Fwy=F& zH|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}Jb#viX>Oi;kBKp1x_fc0#UIbIeSJ^EkWFox zijdim{ojmn@#7EC*aY;fC0W*WN+DmQtE06pNK3SfZ^#@2K`6RgEuU_KwJTQ>E?Yar zc_9e#I$F8%>kuy-JI6ocSsYvQGbsxUCx04(w1z-pMRz9`kH5smmF@WHEG?dcYkv){ zV?kn3XB$_3zr*h1Uow)(<5)w5;3Wh1jHI)`ZlXp&!yEV{Y_~@;?CLwq;4eeaGOe6( zEsSSbwSGD0-`dUUGM-ShrilfUZt{^9lhT*&z4_x{-O{Rv#2V9EI}xb^~1iQe@7)8g(7UZ4B@ z|4zgB>+<*9=;^^)>d)H7pzGjuM>Jnezy3`@G2r z?{~a!Fj;`+8Gq^x2Jl;?IEV8)=fG217*|@)CCYgFze-x?IFODUIA>nWKpE+bn~n7; z-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGrXPIdeRE&b2Thd#{MtDK$ zpx*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{HY|nMnXd&JOovdH8X7V5?1^Y=vK~!ko-J4%*6h$1z_l{zTu}>N$Y77dN z(jrej`JjnWDIm3fj{j>}J%k>VpVM zMunJ?rSR(^OuXDgm2)PP%Lw)()f=TG1B~ScNUFa-({vjDk;dweRiFe?w-6Qho(O1_ zv!(2WV2ZhFC1SqPt}wig>|5C zrh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)yRAZ>eDe#*r`yDAVgB_R* zLB*MAc8_?!g7#WjJA zNf*S~m|;6j!A4w$ko3-C-D?f3QiNoOywjDS!K#57`tfjzaqOr$8SWAG-j-YxSgf$JEO3s=FUciZf^T1|d zdlv{cAz-VWC8|7CEV-;Wb6Vzrt)AkMWOkTe+ZBtZc)X@JVej7(9Qa3q{qv~yUkR%F zgV1zYf*?t3UMs{3OLcKP1Z6m=c&$AQlc=-2K7W6gDCe$axhg&7qBi(Mc=7aOu!`S0t-8gf#ZQK=m_VkJUaO-56fxM&#U}>8ioQPQ~9Xan>71|{&AvQNWKoV z(G*V$cD|NEzl(OC?HDr#Cqt&AdqP30PY2p48uOaogm_>#S_o_EvD7yf32g)`v6|+S zX@6g&FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zmZQj(aA_HeBY&OC^ zjj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5KhX*|AU4QE#~SgPzO zXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&f`88QO)34l90xUaIcrN!i^H~!$VzZpscObr z3PVpq)=3d6{*YiK7;ZBp6>?f?;EtO_0nMBTIICp>R=3LV88-e@FYC%|E0}pO*gziiBLfe{%Kc@qo)p8GVT7N0* z4M_Lw1tG5n(zZ5$P*4jGZTlL!ZFJhUpIRgx=rAmS%;sT8&)W?`?kC{()PbwS3u#;G z5xOo6ZIjcs{+JdGz5K@sSo14D=FzK={`?LQo~r_Pel@s?4}xpcmx|K19GZo;!D-un zE}eyzVa=&&Sk`n2mb~yf2+vl6yMJIGxIEq&SWRe)op$60@i246YB3>oE(3e2L-^}4_|K@$pmRb!NBBQzlNb;zJF zMc&w;%{On(HbQ| z@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)yI9C9*oUga6 z=hxw6QasLPnee@3^pcqGR@o#L@+8nuG5suzgA#ZC&s z|EF-4U3#nH>r^ME@~U|CYWRjZ`yN=c=Fr}#_Mgg|JQ_F~MDJ{2FSyz9PS&T@VVxu? zJm1Eneyq~b<9m$74O-iHG@!Fk->^qks+0-Tx2T+XVGXw8twMc3$0rG>+mL)4wdl~R g1N9*XHQJT-A9HGq3eLdY0ssI207*qoM6N<$f)O(SQ~&?~ diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118dda48d71e01fcb589a74d069c5d7cb5..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmcY2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~g5kS`djJ3c delta 1014 zcmV*Z%cCe|Ky#N6OdYPD1DGfinGF##;07BPDy$fz({%k7zJV=01O#K z=|NTR39NyVgTVMzbvyw=V8BQ^20R3~6xvV{d46VD* zR9nhU01J#6NqMPrrB8cABapAFa= z`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#%Enr|^CWdVV!-4*Y_7rFv zlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br41c(0^;RmcE^tRgds9Z&8hKi= zcKAYL;9Lx6i;lps;xDq`;I4K{zDBEA0j=ca%(UaZ^JThn2CV|_Pl2;B96VFv)Rf2t z%PnxaEcWz-+|yxe=6OZ+TI0dnTP=HgLyBeJX=bZ{9ZiP$!~;)Hi_Rv<2T%y1?BKb+ zkiESjp?|HN*EQj_#)s*NZvW`;FEMwvTV79r(`E7ec!|kH=*oFeVBl&Qp6&^Fsyl30 z$u-+x<;Bl0CfwU;+0g8P&wgLx+sTA2EtZ>G3;|*)hG({h?CA-Ys=l7o?Y-5-F)=S* zIa%VwWI|`ou#mvIKy2;IvwM@+y~XFyn8tTw-G7c`@Zl5i^`8l&mlL{jhO&duh&h|% zw;xV1(6-=>lrmk$4clO3ePuq`9Wr=F#2*VHFb11%VdlH9IC*4@oo|fr*X$yJH6*TP z;Fg`qdbL$@eCS+>x6TV4ALi1JrwKQ0BQDN!_iY;)*|&?XLXO0VpiU)azS@j|*ol|7 zH-GVB^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy0um=e3$K3i6K{U_ z4K!EX-}iV`2<;=$?g5M=KQbZ z{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28t zr{Vje;QNTz`dG&Jz0~Ek&fGS;ewJk?q)Wl)*d4Shg})NFkk>!9ulk z7Sg|cp>aA3DSxs5c#&|SP7x(23km$G&R#YR$;LcN;wDeG6&iz}gG67Ou;4leX8ajON$s9Ws;MYKzN?jV6R f6TH`8dB5KcU62iO+lIoL00000NkvXXu0mjfm8xrB{?psZQs88ZaedDoagm^KF{a*>G|dJWRSe^I$DNW008I^+;Kjt z>9p3GNR^I;v>5_`+91i(*G;u5|L+Bu6M=(afLjtkya#yZ175|z$pU~>2#^Z_pCZ7o z1c6UNcv2B3?; zX%qdxCXQpdKRz=#b*q0P%b&o)5ZrNZt7$fiETSK_VaY=mb4GK`#~0K#~9^ zcY!`#Af+4h?UMR-gMKOmpuYeN5P*RKF!(tb`)oe0j2BH1l?=>y#S5pMqkx6i{*=V9JF%>N8`ewGhRE(|WohnD59R^$_36{4>S zDFlPC5|k?;SPsDo87!B{6*7eqmMdU|QZ84>6)Kd9wNfh90=y=TFQay-0__>=<4pk& zYDjgIhL-jQ9o>z32K)BgAH+HxamL{ZL~ozu)Qqe@a`FpH=oQRA8=L-m-1dam(Ix2V z?du;LdMO+ooBelr^_y4{|44tmgH^2hSzPFd;U^!1p>6d|o)(-01z{i&Kj@)z-yfWQ)V#3Uo!_U}q3u`(fOs`_f^ueFii1xBNUB z6MecwJN$CqV&vhc+)b(p4NzGGEgwWNs z@*lUV6LaduZH)4_g!cE<2G6#+hJrWd5(|p1Z;YJ7ifVHv+n49btR}dq?HHDjl{m$T z!jLZcGkb&XS2OG~u%&R$(X+Z`CWec%QKt>NGYvd5g20)PU(dOn^7%@6kQb}C(%=vr z{?RP(z~C9DPnL{q^@pVw@|Vx~@3v!9dCaBtbh2EdtoNHm4kGxp>i#ct)7p|$QJs+U z-a3qtcPvhihub?wnJqEt>zC@)2suY?%-96cYCm$Q8R%-8$PZYsx3~QOLMDf(piXMm zB=<63yQk1AdOz#-qsEDX>>c)EES%$owHKue;?B3)8aRd}m~_)>SL3h2(9X;|+2#7X z+#2)NpD%qJvCQ0a-uzZLmz*ms+l*N}w)3LRQ*6>|Ub-fyptY(keUxw+)jfwF5K{L9 z|Cl_w=`!l_o><384d&?)$6Nh(GAm=4p_;{qVn#hI8lqewW7~wUlyBM-4Z|)cZr?Rh z=xZ&Ol>4(CU85ea(CZ^aO@2N18K>ftl8>2MqetAR53_JA>Fal`^)1Y--Am~UDa4th zKfCYpcXky$XSFDWBMIl(q=Mxj$iMBX=|4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1i)CYaajr delta 1916 zcmV-?2ZQ*)1%MBb8Gi-<0042w*=zs+2S-UnK~#9!?cG~!6jc}p@R>r@2Yv8@p?G^R zA|eDZ7{rR#1}sop6nca3fIb-?ED*6VwIFJZ!6Hy8w-yO8C@}~_05Gdr_$c4kiU&u$4j+xhLc-+x@XJ4X;S3;@U>VSc^? zQ-oQ8>A;-DT*34?AXhQJV-8~KF(sHg2eU|P;DUxQ_a|dEVEzDijZ2tj%oNrIBN{~& z>4Wk1F-%L`6DpV>Mpo}D4uPcWBCG2czh1jBlh{hu3!B5d1(snX=85|q1gQs{g(mmw zFhk?t-J03}-hU3m?2B8tH)4^yF(WhqGZlM3=9Ibs$%U1wWzcss*_c0=v_+^bfb`kB zFsI`d;ElwiU%frgRB%qBjn@!0U2zZehBn|{%uNIKBA7n=zE`nnwTP85{g;8AkYxA6 z8>#muXa!G>xH22D1I*SiD~7C?7Za+9y7j1SHiuSkK7ajvv#C@#-AyB-fbF?o#FaMR zJDRHO-oJwI(P;@j{Y`?E22zh%eMW-!PD-%va?p$yjUHg_5SW97D|{EkK-iW`L3pv- z4~1!@=&&EA9Pq)SV*$7tP|P@nrw{)Za}U8S%a)eF!V;W0J$@*|lp087uOFr#^24%U zq{wnjs(&o%xPaiU&xXU>0kGeNGuuGQ5tmf`yC)E6~>g8M!1m77Jdtm6rS zdzt5cn`N-@5mj#acH657tGvPJ!hP*GaHk;W`bL8(b&Ca)IkqSle-( z3~MW{(_wAHbpxy|xNd>XIIf#uGm7gr*o@)25q~x#xNe2D9M{dTmf~6gTbo6&mf^a+ zVlBhOVG}?}yia48X#p0jM&V#m55h z>JI^E`!oE3BU#}Dmwv9b)dtvg=lWr4mmi7``{5;>DN=7szV*Yi2Ys;Wj0F8;T@+3# zmw&G0iEAwC?DK@aT)GHRLhnz2WCvf3Ba;o=aY72{Asu5MEjGOY4O# zGgz@@J;q*0`kd2n8I3BeNuMmYZf{}pg=jTdTCrIIYuW~luKecn+E-pHY%ohyj1YuzG;)ZUq^`O?8S;53Ckoo?tVMn}05B zGT>6qU~R)?+l5}(M8IV|KHPZupz$m}u(sinl_#h8mK+a2-Z%PTS>T7;ufv262{vDp zBPZ@%`$0U4OAyGe*$BiPV-R;#+kY^w3*gq;1F)dJExc@8xT3fim)*FL!`r-_`hf}T zm`;Gax^BpsUI#+qYM8gWQ+@FWuz%ui+@N9%I0E}YCkWG)gIKl^a_2UIFntXIALItu z){pJS0}s~#9D>DGkhi=8gcoW+oYRQ78$!9MG7ea_7ufbMoah0Lz%Jbl!qW>uoV5yZ z*MeBOUIpGb5LmIV2XpaNDJ?A`1ltWTyk;i|kG}@u%nv~uIJ^uvgD3GS^%*ikdW6-!VFUU?JVZc2)4cMs@z;op$113mAD>fO*E%TZ|nArgH8#-g2!+%8FHwf;15T1O3 z%f6cwxNr>!C5<2yuQisJ*MabSJ(PUB7y5jX85K+)O)e+)5WQGt3uMU^^;zI|wjF^d zm+XKkwXKj}(_$#kENzAHZ*GT%JtreABF(BL3)s(I;&le^eK!%ZnImYePe^V6%BS#_+}3{E!Zyy%yt6N zc_MCu=*%YGbTRt+EScu(c1Sd(7eueRKax2l_JFm)Uc-z{HH8dq4-*++uSFzp1^;03 zwN8FSfgg=)5whnQIg+Indk!;R^%|;o+Ah*Vw#K~;+&BY@!gZ`W9baLF>6#BM(F}EX ze-`F=f_@`A7+Q&|QaZ??Txp_dB#lg!NH=t3$G8&06MFhwR=Iu*Im0s_b2B@|nW>X} zsy~m#EW)&6E&!*0%}8UAS)wjt+A(io#wGI@Z2S+Ms1Cxl%YVE80000+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f<+$JJpcdz delta 1274 zcmV@pi1MCNO0zH7s z{8#}P0)7Ba8DqYf&QgSne>X__O83t$NZM4&R0{XJq|x}oAU?tcfC@|eNz$04T}34& z8DJf78R&>*Zz`k$q{`#gfGHnx7nlH^G{y`jfER)1<_fNi<9aM%_zrm1C`yPkKma(+ ztQ;y*CR2bbBYz>zG*SVsfpkGU(q>uHZf3iogk_%#9E|5SWeHrmAo>P;ejX7mwq#*} zW25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+X$F_KMdb6sRz!~7K zkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&IDi_4_D!s#MVXp|-XhH;H z#&@_;oApJVd}}5O@b=X_gJboD^-fM@6|#V@sA%X)Rlkd}3MLH0dGXGG&-HX|aD~|M zC)W#H7=H?AbtdaV#dGpubj_O^J-SlWpVNv-5(;wR%mvE9`Qaqo>03b&##eNNf=m#B z9@^lsd8tJ;BvI86kNV zc~0CY(7V{s+h%cWG|y=gt|q`z$l<(@qU=i?9q#uz`G?PgDMK!VMGidHZt*N+1L0ZI zFkH=mFtywc6rJ}C_?)=m)18V!ZQ`*-j(D`gCFK|nt#{bk*%%zuQ7o7kvJgA^=(^7b zzkm5GZ;jxRn{Wup8IOUx8D4uh&(=Ox-7$a;U><*5L^!% zxRlw)vAbh;sdlR||&e}8_8%)c2Fwy=F& zH|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}Jb#viX>Oi;kBKp1x_fc0#UIbIeSJ^EkWFox zijdim{ojmn@#7EC*aY;fC0W*WN+DmQtE06pNK3SfZ^#@2K`6RgEuU_KwJTQ>E?Yar zc_9e#I$F8%>kuy-JI6ocSsYvQGbsxUCx04(w1z-pMRz9`kH5smmF@WHEG?dcYkv){ zV?kn3XB$_3zr*h1Uow)(<5)w5;3Wh1jHI)`ZlXp&!yEV{Y_~@;?CLwq;4eeaGOe6( zEsSSbwSGD0-`dUUl014$1_O8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ1N;Pr- delta 1891 zcmV-p2b}oI1m_Nr8Gi-<0052=@~r>>2QEoOK~#9!?VW3E6jc<*XLh$yKNt;)Mial3 z7z%<>zxaV5DhMs*(b6YIW1=KP6Jj(m21QYbiJ}su&;o5EN=$%gptMj6p|(7#AOTUJ zlt8fsX(iGq?ZQ50=XmbU+~w|cmz~|6$KBbz$-g^IcV>Hk`+q<8%-p?uMi3G-0B~!5 ze-yPCwFPw?HGmpMc~K)7BCq;C528+>zC*o^8h^XKC)IFgkv#xzm!ewK7j|kRa9dFo zC>MoDSR@P2#cWSU{i1oH5K2-Xb3jRz>|h7VOh0K` zhq^--L3H}A0r)nr z;Tr|-kPjB1s=ItpnS`oT%|U=a4oK-ZFIE^YBLH{u2#~@%%D^K)$`9*Tg(~9M-B+Zj z;~H?4LVsEt0eFtN4&>H(DZ@KpI6RhBKLL21CxC`J&m4Gc^9wwMZU#7SR1+KtuhSZM z+yLY}Vekzw6T_ApfEkuB_yU;e&a)L@rX~z70A_N+upOXN!qygmPDmKG0d%7CECcAI zgkd>ArzH$a0XjKsO$X@IgkcH5Y;m3`0G*yNOn(KK4GF_EfL4aB5i1j9o&Z{vFk~k> z&?@K2jQcJO%W!cddG(_DyfSoO55bUMHtbDF8DPkwF^~Ql#Eq4w15k{h%ML5Ar&pzi zl-D7v8kQXQ!&RRgKCW#5DZB$$6?mjWm50rRw*ukK>P-GkA|k69h{NARc>e}uLx+U4 z0DqE>7pa}9Fez+Vc-3jb`%i^uulglFoMzAVR|2%rf= zf#;74FXF^Ku_4+G&-4$KVy%YP>%2rxu2VG_cdm?XRjEhF&wPXJ># z_Q2+jGs=l~Fyx#MmGn+PZ0`@kBfGp|fO;Vov<$;z`(+sSZ7;Y=zXaF(8rb@CuQDV^ zq3i(2LfqO%AS!Ss>V%j7%>{6mtbYQrtQK5V4InPq0NZSaXv+f2U=&2}Z6OvkBfNHi z{LSaVJ!d5dC2K*ft_L^DRk;boQhOoVw!~Kt#0b2vd%!(&DF|~u1F@nG#LA5zR&7Fv z4GKgXooMSKb1g)6Obo-rgpuEP20T;W0Aa>55KC4gtQrKkAq-Hgs@FigV1GG8+rQ=z z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRet3L_uNyQ*c zE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=kyx=~RKa4{iT zm{_>_vSCm?$Ej=i6@=m%@PE9t1zZaoM}@2|h!#1K02~31S_I<0ZV=|K0}n!RRX6Ac zXmMf*5P-dLW}WPVsCKq)-x(0*txpZ2xrv3cxJ%l=7lpoNCyG< zK92ySAcmb-3m&}s@VwXv9(0#p<>B-5$bMxT;rk;OmENa6eM4D&LVo~01soUL39?R{ zyFLt3m|v?rCK7#KNu9E9Q4KV-pEUv^{rrClE&X&9I4-e7%pu_31#zGTOfC=ab%w20R*zBP+uT#l2{a~~~0wuG%6 zco*tVxK&e>%SJj*K!2tq*_h&ES5S9@TKb8WzpK;`&b9dNdxh4S)z%Q)o`aYWUh}9L z(`p!#WO5IxI|nf?yz{90R93Ed6@2qim*}Zjj$H&Esd`?JsFJUnDfiAgF_eYiWR3GC z>M9SHDylEWrA(%mfm~;u7OU9!Wz^!7Z%jZF zi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i0WYBP d*#0Ks^FNSabJA*5${_#%002ovPDHLkV1gB0Vle;! diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih&6y64q8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f@rA97ytkO literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih&6y64q8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f@rA97ytkO literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CGU9f}Q*8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000jJBgitF5mAp-i>4+KS_oR{|13AP->1TD4=w)g|)JHOx|a2Wk1Va z!k)vP$UcQ#mdj%wNQoaJ!w>jv_6&JPyutpQps?s5dmDQ>`%?Bvj>o<%kYG!YW6H-z zu`g$@mp`;qDR!51QaS}|ZToSuAGcJ7$2HF0z`ln4t!#Yg46>;vGG9N9{V@9z#}6v* zfP?}r6b{*-C*)(S>NECI_E~{QYzN5SXRmVnP<=gzP+_Sp(Aza_hKlZ{C1D&l*(7IKXxQC1Z9#6wx}YrGcn~g%;icdw>T0Rf^w0{ z$_wn1J+C0@!jCV<%Go5LA45e{5gY9PvZp8uM$=1}XDI+9m7!A95L>q>>oe0$nC->i zeexUIvq%Uk<-$>DiDb?!In)lAmtuMWxvWlk`2>4lNuhSsjAf2*2tjT`y;@d}($o)S zn(+W&hJ1p0xy@oxP%AM15->wPLp{H!k)BdBD$toBpJh+crWdsNV)qsHaqLg2_s|Ih z`8E9z{E3sA!}5aKu?T!#enD(wLw?IT?k-yWVHZ8Akz4k5(TZJN^zZgm&zM28sfTD2BYJ|Fde3Xzh;;S` z=GXTnY4Xc)8nYoz6&vF;P7{xRF-{|2Xs5>a5)@BrnQ}I(_x7Cgpx#5&Td^4Q9_FnQ zX5so*;#8-J8#c$OlA&JyPp$LKUhC~-e~Ij!L%uSMu!-VZG7Hx-L{m2DVR2i=GR(_% zCVD!4N`I)&Q5S`?P&fQZ=4#Dgt_v2-DzkT}K(9gF0L(owe-Id$Rc2qZVLqI_M_DyO z9@LC#U28_LU{;wGZ&))}0R2P4MhajKCd^K#D+JJ&JIXZ_p#@+7J9A&P<0kdRujtQ_ zOy>3=C$kgi6$0pW06KaLz!21oOryKM3ZUOWqppndxfH}QpgjEJ`j7Tzn5bk6K&@RA?vl##y z$?V~1E(!wB5rH`>3nc&@)|#<1dN2cMzzm=PGhQ|Yppne(C-Vlt450IXc`J4R0W@I7 zd1e5uW6juvO%ni(WX7BsKx3MLngO7rHO;^R5I~0^nE^9^E_eYLgiR9&KnJ)pBbfno zSVnW$0R+&6jOOsZ82}nJ126+c|%svPo;TeUku<2G7%?$oft zyaO;tVo}(W)VsTUhq^XmFi#2z%-W9a{7mXn{uzivYQ_d6b7VJG{77naW(vHt-uhnY zVN#d!JTqVh(7r-lhtXVU6o})aZbDt_;&wJVGl2FKYFBFpU-#9U)z#(A%=IVnqytR$SY-sO( z($oNE09{D^@OuYPz&w~?9>Fl5`g9u&ecFGhqX=^#fmR=we0CJw+5xna*@oHnkahk+ z9aWeE3v|An+O5%?4fA&$Fgu~H_YmqR!yIU!bFCk4!#pAj%(lI(A5n)n@Id#M)O9Yx zJU9oKy{sRAIV3=5>(s8n{8ryJ!;ho}%pn6hZKTKbqk=&m=f*UnK$zW3YQP*)pw$O* zIfLA^!-bmBl6%d_n$#tP8Zd_(XdA*z*WH|E_yILwjtI~;jK#v-6jMl^?<%Y%`gvpwv&cFb$||^v4D&V=aNy?NGo620jL3VZnA%s zH~I|qPzB~e(;p;b^gJr7Ure#7?8%F0m4vzzPy^^(q4q1OdthF}Fi*RmVZN1OwTsAP zn9CZP`FazX3^kG(KodIZ=Kty8DLTy--UKfa1$6XugS zk%6v$Kmxt6U!YMx0JQ)0qX*{CXwZZk$vEROidEc7=J-1;peNat!vS<3P-FT5po>iE z!l3R+<`#x|+_hw!HjQGV=8!q|76y8L7N8gP3$%0kfush|u0uU^?dKBaeRSBUpOZ0c z62;D&Mdn2}N}xHRFTRI?zRv=>=AjHgH}`2k4WK=#AHB)UFrR-J87GgX*x5fL^W2#d z=(%K8-oZfMO=i{aWRDg=FX}UubM4eotRDcn;OR#{3q=*?3mE3_oJ-~prjhxh%PgQT zyn)Qozaq0@o&|LEgS{Ind4Swsr;b`u185hZPOBLL<`d2%^Yp1?oL)=jnLi;Zo0ZDliTtQ^b5SmfIMe{T==zZkbvn$KTQGlbG8w}s@M3TZnde;1Am46P3juKb zl9GU&3F=q`>j!`?SyH#r@O59%@aMX^rx}Nxe<>NqpUp5=lX1ojGDIR*-D^SDuvCKF z?3$xG(gVUsBERef_YjPFl^rU9EtD{pt z0CXwpN7BN3!8>hajGaTVk-wl=9rxmfWtIhC{mheHgStLi^+Nz12a?4r(fz)?3A%at zMlvQmL<2-R)-@G1wJ0^zQK%mR=r4d{Y3fHp){nWXUL#|CqXl(+v+qDh>FkF9`eWrW zfr^D%LNfOcTNvtx0JXR35J0~Jpi2#P3Q&80w+nqNfc}&G0A~*)lGHKv=^FE+b(37|)zL;KLF>oiGfb(?&1 zV3XRu!Sw>@quKiab%g6jun#oZ%!>V#A%+lNc?q>6+VvyAn=kf_6z^(TZUa4Eelh{{ zqFX-#dY(EV@7l$NE&kv9u9BR8&Ojd#ZGJ6l8_BW}^r?DIS_rU2(XaGOK z225E@kH5Opf+CgD^{y29jD4gHbGf{1MD6ggQ&%>UG4WyPh5q_tb`{@_34B?xfSO*| zZv8!)q;^o-bz`MuxXk*G^}(6)ACb@=Lfs`Hxoh>`Y0NE8QRQ!*p|SH@{r8=%RKd4p z+#Ty^-0kb=-H-O`nAA3_6>2z(D=~Tbs(n8LHxD0`R0_ATFqp-SdY3(bZ3;VUM?J=O zKCNsxsgt@|&nKMC=*+ZqmLHhX1KHbAJs{nGVMs6~TiF%Q)P@>!koa$%oS zjXa=!5>P`vC-a}ln!uH1ooeI&v?=?v7?1n~P(wZ~0>xWxd_Aw;+}9#eULM7M8&E?Y zC-ZLhi3RoM92SXUb-5i-Lmt5_rfjE{6y^+24`y$1lywLyHO!)Boa7438K4#iLe?rh z2O~YGSgFUBH?og*6=r9rme=peP~ah`(8Zt7V)j5!V0KPFf_mebo3z95U8(up$-+EA^9dTRLq>Yl)YMBuch9%=e5B`Vnb>o zt03=kq;k2TgGe4|lGne&zJa~h(UGutjP_zr?a7~#b)@15XNA>Dj(m=gg2Q5V4-$)D|Q9}R#002ovPDHLkV1o7DH3k3x diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/camera/camera_avfoundation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfaGjYE delta 1884 zcmV-i2c!7<1>g>l8Gi-<0076AQ7Zrd2Pa8HK~#9!?VNjT6h$1z_m0EFf5bmb1dTDK zp;kdKV1h(V(8Sc1M<37!RE>znAk{x4#zX@eOeE1j3~!+nB5IL z<xS}u?#DBMB>w^b($1Z)`9G?eP95EKi& z$eOy@K%h;ryrR3la%;>|o*>CgB(s>dDcNOXg}CK9SPmD?Uu$P4(=PGA0ShFasNfcIHTL?9WjB9#(2xSLC z`0%$#9DW9F;B4mbU{BlaYx!SjF!QSeF~(msQRxwboh5B_O$BWOQja)GboJz$&!?mgB&3$ytsA zvns&b3Cl5Hx#%p%faR*Q906u&fbXy$maV`n?S>A)vJIH!F-vxCrY+rq5_JA(GcOgu7(Ky4X3ATR9z8*%k&<5qYeV&4Y`~}XYmK(j{)!g8d2UgHXIINM!Rvn zKtEq~Foe0s!U{kux~F6Y7Sp+2f|*Cc${S{@oh8D0=XhB8Ec-w9CflfL+te4ium2cU zoPTCj_m<3d#gjK=<*8R`HP^C$lOPM5d~UhKhRRmvv{LI za^|oavk1$QiEApSrP@~Jjbg`<*dW4TO@DPEEX$Tg$xh?Y>Qd}y@kaH~IT8!lLpS^J zR7(&wZSI6+>Eb)tX>9Z?GX#q$u z4I>7e#b7ojyJ1grOh!^}s8S#ubi^Jkd1?UK)3mp6rI^_zxRY zrx6_QmhoWoDR`fp4R7gu6@OBFGu7IDVR6~nJsB{^f5jHn<{WJ&&f^X?3f8TIk3#U& zu1*Q-e@;snJxNx8-PBnpI|uFTKN!+Lp;fPfZ+eqqU^Y1|#DJY~126?zOx-+d>%4*? z&o`TbrXSNXZW^!P0t2>@$6&aiBtUDh2wLXLD9&a(1J=k_FK|iGbAQ@x4Qmx}Ms+*; zze&q6bH(=wYuXHfz0H6<05!LkE4rl~v^!bj=^9d+vI5fN<;GP>*Pas=q2l9RxDkk` zPRk&EQI+t_0$Y%nKE)Ma)W?jaA@4Z{h zTk*7;;#lG?hvTN_On=Jaxp%bdE;mDq(q#dgdYF|-?wrMeI4h`$idZ6^VyXZVlaCd0 z;i)OYR3npf@9>00Gqn##Zb4HRurgaWFCzL9u6@J@sse>Z1XznxWvSy%Td32I3!#YN zXt9v0)RQtDDZRd?#WY?~KF7A0UcR{jt9 W+;fr}hV%pg0000&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfzK(<8 literal 3294 zcmV<43?cK0P)1^@s67{VYS000c7NklQEG_j zup^)eW&WUIApqy$=APz8jE@awGp)!bsTjDbrJO`$x^ZR^dr;>)LW>{ zs70vpsD38v)19rI=GNk1b(0?Js9~rjsQsu*K;@SD40RB-3^gKU-MYC7G!Bw{fZsqp zih4iIi;Hr_xZ033Iu{sQxLS=}yBXgLMn40d++>aQ0#%8D1EbGZp7+ z5=mK?t31BkVYbGOxE9`i748x`YgCMwL$qMsChbSGSE1`p{nSmadR zcQ#R)(?!~dmtD0+D2!K zR9%!Xp1oOJzm(vbLvT^$IKp@+W2=-}qTzTgVtQ!#Y7Gxz}stUIm<1;oBQ^Sh2X{F4ibaOOx;5ZGSNK z0maF^@(UtV$=p6DXLgRURwF95C=|U8?osGhgOED*b z7woJ_PWXBD>V-NjQAm{~T%sjyJ{5tn2f{G%?J!KRSrrGvQ1(^`YLA5B!~eycY(e5_ z*%aa{at13SxC(=7JT7$IQF~R3sy`Nn%EMv!$-8ZEAryB*yB1k&stni)=)8-ODo41g zkJu~roIgAih94tb=YsL%iH5@^b~kU9M-=aqgXIrbtxMpFy5mekFm#edF9z7RQ6V}R zBIhbXs~pMzt0VWy1Fi$^fh+1xxLDoK09&5&MJl(q#THjPm(0=z2H2Yfm^a&E)V+a5 zbi>08u;bJsDRUKR9(INSc7XyuWv(JsD+BB*0hS)FO&l&7MdViuur@-<-EHw>kHRGY zqoT}3fDv2-m{NhBG8X}+rgOEZ;amh*DqN?jEfQdqxdj08`Sr=C-KmT)qU1 z+9Cl)a1mgXxhQiHVB}l`m;-RpmKy?0*|yl?FXvJkFxuu!fKlcmz$kN(a}i*saM3nr z0!;a~_%Xqy24IxA2rz<+08=B-Q|2PT)O4;EaxP^6qixOv7-cRh?*T?zZU`{nIM-at zTKYWr9rJ=tppQ9I#Z#mLgINVB!pO-^FOcvFw6NhV0gztuO?g ztoA*C-52Q-Z-P#xB4HAY3KQVd%dz1S4PA3vHp0aa=zAO?FCt zC_GaTyVBg2F!bBr3U@Zy2iJgIAt>1sf$JWA9kh{;L+P*HfUBX1Zy{4MgNbDfBV_ly z!y#+753arsZUt@366jIC0klaC@ckuk!qu=pAyf7&QmiBUT^L1&tOHzsK)4n|pmrVT zs2($4=?s~VejTFHbFdDOwG;_58LkIj1Fh@{glkO#F1>a==ymJS$z;gdedT1zPx4Kj ztjS`y_C}%af-RtpehdQDt3a<=W5C4$)9W@QAse;WUry$WYmr51ml9lkeunUrE`-3e zmq1SgSOPNEE-Mf+AGJ$g0M;3@w!$Ej;hMh=v=I+Lpz^n%Pg^MgwyqOkNyu2c^of)C z1~ALor3}}+RiF*K4+4{(1%1j3pif1>sv0r^mTZ?5Jd-It!tfPfiG_p$AY*Vfak%FG z4z#;wLtw&E&?}w+eKG^=#jF7HQzr8rV0mY<1YAJ_uGz~$E13p?F^fPSzXSn$8UcI$ z8er9{5w5iv0qf8%70zV71T1IBB1N}R5Kp%NO0=5wJalZt8;xYp;b{1K) zHY>2wW-`Sl{=NpR%iu3(u6l&)rc%%cSA#aV7WCowfbFR4wcc{LQZv~o1u_`}EJA3>ki`?9CKYTA!rhO)if*zRdd}Kn zEPfYbhoVE~!FI_2YbC5qAj1kq;xP6%J8+?2PAs?`V3}nyFVD#sV3+uP`pi}{$l9U^ zSz}_M9f7RgnnRhaoIJgT8us!1aB&4!*vYF07Hp&}L zCRlop0oK4DL@ISz{2_BPlezc;xj2|I z23RlDNpi9LgTG_#(w%cMaS)%N`e>~1&a3<{Xy}>?WbF>OOLuO+j&hc^YohQ$4F&ze z+hwnro1puQjnKm;vFG~o>`kCeUIlkA-2tI?WBKCFLMBY=J{hpSsQ=PDtU$=duS_hq zHpymHt^uuV1q@uc4bFb{MdG*|VoW@15Osrqt2@8ll0qO=j*uOXn{M0UJX#SUztui9FN4)K3{9!y8PC-AHHvpVTU;x|-7P+taAtyglk#rjlH2 z5Gq8ik}BPaGiM{#Woyg;*&N9R2{J0V+WGB69cEtH7F?U~Kbi6ksi*`CFXsi931q7Y zGO82?whBhN%w1iDetv%~wM*Y;E^)@Vl?VDj-f*RX>{;o_=$fU!&KAXbuadYZ46Zbg z&6jMF=49$uL^73y;;N5jaHYv)BTyfh&`qVLYn?`o6BCA_z-0niZz=qPG!vonK3MW_ zo$V96zM!+kJRs{P-5-rQVse0VBH*n6A58)4uc&gfHMa{gIhV2fGf{st>E8sKyP-$8zp~wJX^A*@DI&-;8>gANXZj zU)R+Y)PB?=)a|Kj>8NXEu^S_h^7R`~Q&7*Kn!xyvzVv&^>?^iu;S~R2e-2fJx-oUb cX)(b1KSk$MOV07*qoM6N<$f&{Qds= z{r_0T`1}6fwc-8!#-TGX}_?g)CZq4{k!uZ_g@DrQdoW0kI zu+W69&uN^)W`CK&06mMNcYMVF00dG=L_t(|+U?wHQxh>12H+Dm+1+fh+IF>G0SjJM zkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJTkdTm&kdTm&kdTm&kdP`e zsgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>VI$fQI%^ugM`#6By?GeadWcu z0gy9!D`m!H>Bd!JW(@avE8`|5XX(0PN}!8K>`dkavs;rHL+wy96QGNT=S@#7%xtlm zIW!++@*2zm-Py#Zr`DzqsLm!b{iskFNULSqE9A>SqHem>o31A%XL>S_5?=;V_i_y+ z(xxXhnt#r-l1Y8_*h`r?8Tr|)(RAiO)4jQR`13X0mx07C&p@KBP_2s``KEhv^|*8c z$$_T(v6^1Ig=#R}sE{vjA?ErGDZGUsyoJuWdJMc7Nb1^KF)-u<7q zPy$=;)0>vuWuK2hQhswLf!9yg`88u&eBbR8uhod?Nw09AXH}-#qOLLxeT2%C;R)QQ$Za#qp~cM&YVmS4i-*Fpd!cC zBXc?(4wcg>sHmXGd^VdE<5QX{Kyz$;$sCPl(_*-P2Iw?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF34$0Z;QO!J zOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUCUoZo%k(yku QW&i*H07*qoM6N<$g47z!?*IS* literal 3612 zcmV+%4&(8OP)6$jw%VRuvdN2+38CZWny1cRtlsl+0_KtW)EU14Ei(F!UtWuj4IK+3{sK@>rh zs1Z;=(DD&U6+tlyL?UnHVN^&g6QhFi2#HS+*qz;(>63G(`|jRtW|nz$Pv7qTovP!^ zP_jES{mr@O-02w%!^a?^1ZP!_KmQiz0L~jZ=W@Qt`8wzOoclQsAS<5YdH;a(4bGLE zk8s}1If(PSIgVi!XE!5kA?~z*sobvNyohr;=Q_@h2@$6Flyej3J)D-6YfheRGl`HEcPk|~huT_2-U?PfL=4BPV)f1o!%rQ!NMt_MYw-5bUSwQ9Z&zC>u zOrl~UJglJNa%f50Ok}?WB{on`Ci`p^Y!xBA?m@rcJXLxtrE0FhRF3d*ir>yzO|BD$ z3V}HpFcCh6bTzY}Nt_(W%QYd3NG)jJ4<`F<1Od) zfQblTdC&h2lCz`>y?>|9o2CdvC8qZeIZt%jN;B7Hdn2l*k4M4MFEtq`q_#5?}c$b$pf_3y{Y!cRDafZBEj-*OD|gz#PBDeu3QoueOesLzB+O zxjf2wvf6Wwz>@AiOo2mO4=TkAV+g~%_n&R;)l#!cBxjuoD$aS-`IIJv7cdX%2{WT7 zOm%5rs(wqyPE^k5SIpUZ!&Lq4<~%{*>_Hu$2|~Xa;iX*tz8~G6O3uFOS?+)tWtdi| zV2b#;zRN!m@H&jd=!$7YY6_}|=!IU@=SjvGDFtL;aCtw06U;-v^0%k0FOyESt z1Wv$={b_H&8FiRV?MrzoHWd>%v6KTRU;-v^Miiz+@q`(BoT!+<37CKhoKb)|8!+RG z6BQFU^@fRW;s8!mOf2QViKQGk0TVER6EG1`#;Nm39Do^PoT!+<37AD!%oJe86(=et zZ~|sLzU>V-qYiU6V8$0GmU7_K8|Fd0B?+9Un1BhKAz#V~Fk^`mJtlCX#{^8^M8!me z8Yg;8-~>!e<-iG;h*0B1kBKm}hItVGY6WnjVpgnTTAC$rqQ^v)4KvOtpY|sIj@WYg zyw##ZZ5AC2IKNC;^hwg9BPk0wLStlmBr;E|$5GoAo$&Ui_;S9WY62n3)i49|T%C#i017z3J=$RF|KyZWnci*@lW4 z=AKhNN6+m`Q!V3Ye68|8y@%=am>YD0nG99M)NWc20%)gwO!96j7muR}Fr&54SxKP2 zP30S~lt=a*qDlbu3+Av57=9v&vr<6g0&`!8E2fq>I|EJGKs}t|{h7+KT@)LfIV-3K zK)r_fr2?}FFyn*MYoLC>oV-J~eavL2ho4a4^r{E-8m2hi>~hA?_vIG4a*KT;2eyl1 zh_hUvUJpNCFwBvRq5BI*srSle>c6%n`#VNsyC|MGa{(P&08p=C9+WUw9Hl<1o9T4M zdD=_C0F7#o8A_bRR?sFNmU0R6tW`ElnF8p53IdHo#S9(JoZCz}fHwJ6F<&?qrpVqE zte|m%89JQD+XwaPU#%#lVs-@-OL);|MdfINd6!XwP2h(eyafTUsoRkA%&@fe?9m@jw-v(yTTiV2(*fthQH9}SqmsRPVnwwbV$1E(_lkmo&S zF-truCU914_$jpqjr(>Ha4HkM4YMT>m~NosUu&UZ>zirfHo%N6PPs9^_o$WqPA0#5 z%tG>qFCL+b*0s?sZ;Sht0nE7Kl>OVXy=gjWxxK;OJ3yGd7-pZf7JYNcZo2*1SF`u6 zHJyRRxGw9mDlOiXqVMsNe#WX`fC`vrtjSQ%KmLcl(lC>ZOQzG^%iql2w-f_K@r?OE zwCICifM#L-HJyc7Gm>Ern?+Sk3&|Khmu4(~3qa$(m6Ub^U0E5RHq49za|XklN#?kP zl;EstdW?(_4D>kwjWy2f!LM)y?F94kyU3`W!6+AyId-89v}sXJpuic^NLL7GJItl~ zsiuB98AI-(#Mnm|=A-R6&2fwJ0JVSY#Q>&3$zFh|@;#%0qeF=j5Ajq@4i0tIIW z&}sk$&fGwoJpe&u-JeGLi^r?dO`m=y(QO{@h zQqAC7$rvz&5+mo3IqE?h=a~6m>%r5Quapvzq;{y~p zJpyXOBgD9VrW7@#p6l7O?o3feml(DtSL>D^R) zZUY%T2b0-vBAFN7VB;M88!~HuOXi4KcI6aRQ&h|XQ0A?m%j2=l1f0cGP}h(oVfJ`N zz#PpmFC*ieab)zJK<4?^k=g%OjPnkANzbAbmGZHoVRk*mTfm75s_cWVa`l*f$B@xu z5E*?&@seIo#*Y~1rBm!7sF9~~u6Wrj5oICUOuz}CS)jdNIznfzCA(stJ(7$c^e5wN z?lt>eYgbA!kvAR7zYSD&*r1$b|(@;9dcZ^67R0 zXAXJKa|5Sdmj!g578Nwt6d$sXuc&MWezA0Whd`94$h{{?1IwXP4)Tx4obDK%xoFZ_Z zjjHJ_P@R_e5blG@yEjnaJb`l;s%Lb2&=8$&Ct-fV`E^4CUs)=jTk!I}2d&n!f@)bm z@ z_4Dc86+3l2*p|~;o-Sb~oXb_RuLmoifDU^&Te$*FevycC0*nE3Xws8gsWp|Rj2>SM zns)qcYj?^2sd8?N!_w~4v+f-HCF|a$TNZDoNl$I1Uq87euoNgKb6&r26TNrfkUa@o zfdiFA@p{K&mH3b8i!lcoz)V{n8Q@g(vR4ns4r6w;K z>1~ecQR0-<^J|Ndg5fvVUM9g;lbu-){#ghGw(fg>L zh)T5Ljb%lWE;V9L!;Cqk>AV1(rULYF07ZBJbGb9qbSoLAd;in9{)95YqX$J43-dY7YU*k~vrM25 zxh5_IqO0LYZW%oxQ5HOzmk4x{atE*vipUk}sh88$b2tn?!ujEHn`tQLe&vo}nMb&{ zio`xzZ&GG6&ZyN3jnaQy#iVqXE9VT(3tWY$n-)uWDQ|tc{`?fq2F`oQ{;d3aWPg4Hp-(iE{ry>MIPWL> iW8CADisableMinimumFrameDurationOnPhone CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Camera Example CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -17,31 +19,47 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $(FLUTTER_BUILD_NAME) CFBundleSignature ???? CFBundleVersion - 1 - LSApplicationCategoryType - + $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS NSCameraUsageDescription Can I use the camera please? Only for demo purpose of the app NSMicrophoneUsageDescription Only for demo purpose of the app + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneConfigurationName + flutter + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main - UIRequiredDeviceCapabilities - - arm64 - UISupportedInterfaceOrientations UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight @@ -52,9 +70,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/RunnerTests-Bridging-Header.h b/packages/camera/camera_avfoundation/example/ios/Runner/Runner-Bridging-Header.h similarity index 79% rename from packages/camera/camera_avfoundation/example/ios/RunnerTests/RunnerTests-Bridging-Header.h rename to packages/camera/camera_avfoundation/example/ios/Runner/Runner-Bridging-Header.h index 5b3a1852fb82..ba04211afd0a 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/RunnerTests-Bridging-Header.h +++ b/packages/camera/camera_avfoundation/example/ios/Runner/Runner-Bridging-Header.h @@ -2,4 +2,4 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ExceptionCatcher.h" +#import "GeneratedPluginRegistrant.h" diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.h b/packages/camera/camera_avfoundation/example/ios/Runner/SceneDelegate.swift similarity index 58% rename from packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.h rename to packages/camera/camera_avfoundation/example/ios/Runner/SceneDelegate.swift index 721cca1e11bb..8c7b10c639d1 100644 --- a/packages/camera/camera_avfoundation/example/ios/Runner/AppDelegate.h +++ b/packages/camera/camera_avfoundation/example/ios/Runner/SceneDelegate.swift @@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import -#import +import Flutter +import UIKit -@interface AppDelegate : FlutterAppDelegate +class SceneDelegate: FlutterSceneDelegate { -@end +} diff --git a/packages/camera/camera_avfoundation/example/ios/Runner/main.m b/packages/camera/camera_avfoundation/example/ios/Runner/main.m deleted file mode 100644 index 3ec494eae7e8..000000000000 --- a/packages/camera/camera_avfoundation/example/ios/Runner/main.m +++ /dev/null @@ -1,19 +0,0 @@ -// 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 -#import -#import "AppDelegate.h" - -int main(int argc, char *argv[]) { - @autoreleasepool { - // The setup logic in `AppDelegate::didFinishLaunchingWithOptions:` eventually sends camera - // operations on the background queue, which would run concurrently with the test cases during - // unit tests, making the debugging process confusing. This setup is actually not necessary for - // the unit tests, so it is better to skip the AppDelegate when running unit tests. - BOOL isTesting = NSClassFromString(@"XCTestCase") != nil; - return UIApplicationMain(argc, argv, nil, - isTesting ? nil : NSStringFromClass([AppDelegate class])); - } -} diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamExposureTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraExposureTests.swift similarity index 99% rename from packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamExposureTests.swift rename to packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraExposureTests.swift index 33ee0325b8e0..da5531b652bb 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamExposureTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraExposureTests.swift @@ -6,7 +6,7 @@ import XCTest @testable import camera_avfoundation -final class FLTCamExposureTests: XCTestCase { +final class CameraExposureTests: XCTestCase { private func createCamera() -> (Camera, MockCaptureDevice, MockDeviceOrientationProvider) { let mockDevice = MockCaptureDevice() let mockDeviceOrientationProvider = MockDeviceOrientationProvider() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginCreateCameraTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginCreateCameraTests.swift index 5eb2b61e8ea2..269ba03067b0 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginCreateCameraTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginCreateCameraTests.swift @@ -98,7 +98,7 @@ final class CameraPluginCreateCameraTests: XCTestCase { XCTAssertTrue(requestAudioPermissionCalled) } - func testCreateCamera_createsFLTCamSuccessfully() { + func testCreateCamera_createsCameraSuccessfully() { let (cameraPlugin, mockPermissionManager, mockCaptureSession) = createCameraPlugin() let expectation = expectation(description: "Initialization completed") diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginDelegatingMethodTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginDelegatingMethodTests.swift index 4e3c5a377f06..34a306b511d7 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginDelegatingMethodTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginDelegatingMethodTests.swift @@ -6,7 +6,7 @@ import XCTest @testable import camera_avfoundation -/// Tests of `CameraPlugin` methods delegating to `FLTCam` instance +/// Tests of `CameraPlugin` methods delegating to `Camera` instance final class CameraPluginDelegatingMethodTests: XCTestCase { private func createCameraPlugin() -> (CameraPlugin, MockCamera) { let mockCamera = MockCamera() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift index b7b6a00734be..5d56567959f0 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift @@ -7,7 +7,7 @@ import XCTest @testable import camera_avfoundation -/// Includes test cases related to resolution presets setting operations for FLTCam class. +/// Includes test cases related to resolution presets setting operations for Camera class. final class CameraSessionPresetsTests: XCTestCase { func testResolutionPresetWithBestFormat_mustUpdateCaptureSessionPreset() { let expectedPreset = AVCaptureSession.Preset.inputPriority diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamSetDeviceOrientationTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetDeviceOrientationTests.swift similarity index 98% rename from packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamSetDeviceOrientationTests.swift rename to packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetDeviceOrientationTests.swift index ab688c9f5933..c6ca992d236b 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamSetDeviceOrientationTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetDeviceOrientationTests.swift @@ -7,7 +7,7 @@ import XCTest @testable import camera_avfoundation -final class FLTCamSetDeviceOrientationTests: XCTestCase { +final class CameraSetDeviceOrientationTests: XCTestCase { private func createCamera() -> (Camera, MockCaptureConnection, MockCaptureConnection) { let camera = CameraTestUtils.createTestCamera() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamSetFlashModeTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetFlashModeTests.swift similarity index 98% rename from packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamSetFlashModeTests.swift rename to packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetFlashModeTests.swift index 0941a06d96e4..7a931a7f1e25 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamSetFlashModeTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetFlashModeTests.swift @@ -7,7 +7,7 @@ import XCTest @testable import camera_avfoundation -final class FLTCamSetFlashModeTests: XCTestCase { +final class CameraSetFlashModeTests: XCTestCase { private func createCamera() -> (Camera, MockCaptureDevice, MockCapturePhotoOutput) { let mockDevice = MockCaptureDevice() let mockCapturePhotoOutput = MockCapturePhotoOutput() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamFocusTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetFocusModeTests.swift similarity index 99% rename from packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamFocusTests.swift rename to packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetFocusModeTests.swift index 00eaddf71faf..75c1cf38e6fb 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamFocusTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSetFocusModeTests.swift @@ -7,7 +7,7 @@ import XCTest @testable import camera_avfoundation -final class FLTCamSetFocusModeTests: XCTestCase { +final class CameraSetFocusModeTests: XCTestCase { private func createCamera() -> (Camera, MockCaptureDevice, MockDeviceOrientationProvider) { let mockDevice = MockCaptureDevice() let mockDeviceOrientationProvider = MockDeviceOrientationProvider() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSettingsTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSettingsTests.swift index 984549b06516..0c9f45e5e50a 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSettingsTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSettingsTests.swift @@ -3,6 +3,7 @@ // found in the LICENSE file. import AVFoundation +import Flutter import XCTest @testable import camera_avfoundation @@ -51,7 +52,7 @@ private final class TestMediaSettingsAVWrapper: FLTCamMediaSettingsAVWrapper { } override func setMinFrameDuration(_ duration: CMTime, on captureDevice: CaptureDevice) { - // FLTCam allows to set frame rate with 1/10 precision. + // Camera allows to set frame rate with 1/10 precision. let expectedDuration = CMTimeMake(value: 10, timescale: Int32(testFramesPerSecond * 10)) if duration == expectedDuration { minFrameDurationExpectation.fulfill() @@ -59,7 +60,7 @@ private final class TestMediaSettingsAVWrapper: FLTCamMediaSettingsAVWrapper { } override func setMaxFrameDuration(_ duration: CMTime, on captureDevice: CaptureDevice) { - // FLTCam allows to set frame rate with 1/10 precision. + // Camera allows to set frame rate with 1/10 precision. let expectedDuration = CMTimeMake(value: 10, timescale: Int32(testFramesPerSecond * 10)) if duration == expectedDuration { maxFrameDurationExpectation.fulfill() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamZoomTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraZoomTests.swift similarity index 98% rename from packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamZoomTests.swift rename to packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraZoomTests.swift index 46f302058b06..f0c62add69fb 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamZoomTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraZoomTests.swift @@ -7,7 +7,7 @@ import XCTest @testable import camera_avfoundation -final class FLTCamZoomTests: XCTestCase { +final class CameraZoomTests: XCTestCase { private func createCamera() -> (Camera, MockCaptureDevice) { let mockDevice = MockCaptureDevice() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.h b/packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.h deleted file mode 100644 index 4c7ae95dac32..000000000000 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.h +++ /dev/null @@ -1,23 +0,0 @@ -// 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. - -// TODO(FirentisTFW): Remove this file when the plugin code that uses it is migrated to Swift. -// After the migration, the code should throw Swift errors instead of Objective-C exceptions, thus -// this file will not be needed. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// A utility class for catching Objective-C exceptions. -/// -/// It allows to execute a block of code and catch any exceptions that are thrown during its -/// execution. This is useful for bridging between Objective-C and Swift code, as Swift does not -/// support catching Objective-C exceptions directly. -@interface ExceptionCatcher : NSObject -/// Executes a block of code and catches any exceptions that are thrown. -+ (nullable NSException *)catchException:(void (^)(void))tryBlock; -@end - -NS_ASSUME_NONNULL_END diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.m b/packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.m deleted file mode 100644 index febd9ac4f79d..000000000000 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/ExceptionCatcher.m +++ /dev/null @@ -1,17 +0,0 @@ -// 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 "ExceptionCatcher.h" - -@implementation ExceptionCatcher -+ (nullable NSException *)catchException:(void (^)(void))tryBlock { - @try { - tryBlock(); - // No exception occurred. - return nil; - } @catch (NSException *exception) { - return exception; - } -} -@end diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Info.plist b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Info.plist deleted file mode 100644 index 64d65ca49577..000000000000 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCameraDeviceDiscoverer.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCameraDeviceDiscoverer.swift index 972f34ab8d5e..f621aa620b5c 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCameraDeviceDiscoverer.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCameraDeviceDiscoverer.swift @@ -6,7 +6,7 @@ import AVFoundation @testable import camera_avfoundation -/// Mock implementation of `FLTCameraDeviceDiscoverer` protocol which allows injecting a custom +/// Mock implementation of `CameraDeviceDiscoverer` protocol which allows injecting a custom /// implementation for session discovery. final class MockCameraDeviceDiscoverer: NSObject, CameraDeviceDiscoverer { var discoverySessionStub: diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.swift index be6fc7dca28a..71fe2fc8f7da 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.swift @@ -6,7 +6,7 @@ import AVFoundation @testable import camera_avfoundation -/// A mock implementation of `FLTCaptureDevice` that allows mocking the class +/// A mock implementation of `CaptureDevice` that allows mocking the class /// properties. class MockCaptureDevice: NSObject, CaptureDevice { var activeFormatStub: (() -> CaptureDeviceFormat)? diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDeviceInputFactory.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDeviceInputFactory.swift index 9292b6256d7c..0222750a43e1 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDeviceInputFactory.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDeviceInputFactory.swift @@ -2,9 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import Foundation + @testable import camera_avfoundation -///// A mocked implementation of FLTCaptureDeviceInputFactory which allows injecting a custom +///// A mocked implementation of CaptureDeviceInputFactory which allows injecting a custom ///// implementation. final class MockCaptureDeviceInputFactory: NSObject, CaptureDeviceInputFactory { func deviceInput(with device: CaptureDevice) throws -> CaptureInput { diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureInput.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureInput.swift index 74d8742bd161..394dbf9b5b67 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureInput.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureInput.swift @@ -6,7 +6,7 @@ import AVFoundation @testable import camera_avfoundation -/// A mocked implementation of FLTCaptureInput which allows injecting a custom +/// A mocked implementation of CaptureInput which allows injecting a custom /// implementation. final class MockCaptureInput: NSObject, CaptureInput { var avInput: AVCaptureInput { diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCapturePhotoOutput.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCapturePhotoOutput.swift index a0b2faee8c00..184fd0be36b2 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCapturePhotoOutput.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCapturePhotoOutput.swift @@ -6,7 +6,7 @@ import AVFoundation @testable import camera_avfoundation -/// Mock implementation of `FLTCapturePhotoOutput` protocol which allows injecting a custom +/// Mock implementation of `CapturePhotoOutput` protocol which allows injecting a custom /// implementation. final class MockCapturePhotoOutput: NSObject, CapturePhotoOutput { var avOutput = AVCapturePhotoOutput() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureSession.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureSession.swift index 08d2427b4438..23ce72bbe9f8 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureSession.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureSession.swift @@ -6,7 +6,7 @@ import AVFoundation @testable import camera_avfoundation -/// Mock implementation of `FLTCaptureSession` protocol which allows injecting a custom +/// Mock implementation of `CaptureSession` protocol which allows injecting a custom /// implementation. final class MockCaptureSession: NSObject, CaptureSession { var setSessionPresetStub: ((AVCaptureSession.Preset) -> Void)? diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureVideoDataOutput.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureVideoDataOutput.swift index c36397321201..23e54734f853 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureVideoDataOutput.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureVideoDataOutput.swift @@ -6,7 +6,7 @@ import AVFoundation @testable import camera_avfoundation -/// Mock implementation of `FLTCaptureVideoDataOutput` protocol which allows injecting a custom +/// Mock implementation of `CaptureVideoDataOutput` protocol which allows injecting a custom /// implementation. class MockCaptureVideoDataOutput: NSObject, CaptureVideoDataOutput { var avOutput = AVCaptureVideoDataOutput() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockFrameRateRange.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockFrameRateRange.swift index 1130a35937e7..d4bfbda30385 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockFrameRateRange.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockFrameRateRange.swift @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import Foundation + @testable import camera_avfoundation /// A mock implementation of `FrameRateRange` that allows mocking the class properties. diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockWritableData.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockWritableData.swift index 9feb13e3f997..8666c4d96093 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockWritableData.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockWritableData.swift @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import Foundation + @testable import camera_avfoundation /// A mock implementation of `WritableData` that allows injecting a custom implementation diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/PhotoCaptureTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/PhotoCaptureTests.swift index e20a15dba9d3..1113fb424450 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/PhotoCaptureTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/PhotoCaptureTests.swift @@ -7,7 +7,7 @@ import XCTest @testable import camera_avfoundation -/// Includes test cases related to photo capture operations for FLTCam class. +/// Includes test cases related to photo capture operations for Camera class. final class PhotoCaptureTests: XCTestCase { private func createCam(with captureSessionQueue: DispatchQueue) -> DefaultCamera { let configuration = CameraTestUtils.createTestCameraConfiguration() @@ -36,7 +36,7 @@ final class PhotoCaptureTests: XCTestCase { } cam.capturePhotoOutput = mockOutput - // `FLTCam::captureToFile` runs on capture session queue. + // `Camera.captureToFile` runs on capture session queue. captureSessionQueue.async { cam.captureToFile { result in switch result { @@ -73,7 +73,7 @@ final class PhotoCaptureTests: XCTestCase { } cam.capturePhotoOutput = mockOutput - // `FLTCam::captureToFile` runs on capture session queue. + // `Camera.captureToFile` runs on capture session queue. captureSessionQueue.async { cam.captureToFile { result in switch result { @@ -112,7 +112,7 @@ final class PhotoCaptureTests: XCTestCase { } cam.capturePhotoOutput = mockOutput - // `FLTCam::captureToFile` runs on capture session queue. + // `Camera.captureToFile` runs on capture session queue. captureSessionQueue.async { cam.captureToFile { result in if let filePath = self.assertSuccess(result) { @@ -148,7 +148,7 @@ final class PhotoCaptureTests: XCTestCase { } cam.capturePhotoOutput = mockOutput - // `FLTCam::captureToFile` runs on capture session queue. + // `Camera.captureToFile` runs on capture session queue. captureSessionQueue.async { cam.captureToFile { result in if let filePath = self.assertSuccess(result) { @@ -198,7 +198,7 @@ final class PhotoCaptureTests: XCTestCase { } cam.capturePhotoOutput = mockOutput - // `FLTCam::captureToFile` runs on capture session queue. + // `Camera.captureToFile` runs on capture session queue. captureSessionQueue.async { cam.setFlashMode(.torch) { _ in } cam.captureToFile { result in diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift index 3db6cd2c94da..98759f16caba 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift @@ -61,7 +61,7 @@ private class FakeMediaSettingsAVWrapper: FLTCamMediaSettingsAVWrapper { } } -/// Includes test cases related to sample buffer handling for FLTCam class. +/// Includes test cases related to sample buffer handling for Camera class. final class CameraSampleBufferTests: XCTestCase { private func createCamera() -> ( DefaultCamera, @@ -119,7 +119,7 @@ final class CameraSampleBufferTests: XCTestCase { let deliveredPixelBuffer = camera.copyPixelBuffer()?.takeRetainedValue() XCTAssertEqual( deliveredPixelBuffer, capturedPixelBuffer, - "FLTCam must deliver the latest captured pixel buffer to copyPixelBuffer API.") + "Camera must deliver the latest captured pixel buffer to copyPixelBuffer API.") } func testDidOutputSampleBuffer_mustNotChangeSampleBufferRetainCountAfterPauseResumeRecording() { From f330175dbf168a7bf94a127c492e025b4cc0bfba Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 25 Mar 2026 07:46:11 -0400 Subject: [PATCH 30/55] [cupertino_icons] Remove empty Dart file (#11308) It used to be impossible to publish a package without a lib/ directory, which is why there is a placeholder file. That hasn't been true for quite a while, however, so we don't need to keep shipping an empty file. This will also fix the questionable pana score deduction for not having any documentation (without us having to add a library directive just to document that no code is needed). Part of https://github.com/flutter/flutter/issues/183844 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- third_party/packages/cupertino_icons/CHANGELOG.md | 3 ++- .../packages/cupertino_icons/lib/cupertino_icons.dart | 8 -------- third_party/packages/cupertino_icons/pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) delete mode 100644 third_party/packages/cupertino_icons/lib/cupertino_icons.dart diff --git a/third_party/packages/cupertino_icons/CHANGELOG.md b/third_party/packages/cupertino_icons/CHANGELOG.md index 7773a24be5eb..f90a47f4876b 100644 --- a/third_party/packages/cupertino_icons/CHANGELOG.md +++ b/third_party/packages/cupertino_icons/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.0.9 +* Removes empty Dart file. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 1.0.8 diff --git a/third_party/packages/cupertino_icons/lib/cupertino_icons.dart b/third_party/packages/cupertino_icons/lib/cupertino_icons.dart deleted file mode 100644 index 4ddfa3457a84..000000000000 --- a/third_party/packages/cupertino_icons/lib/cupertino_icons.dart +++ /dev/null @@ -1,8 +0,0 @@ -// 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. - -// File to create a lib/ directory for a well-formed .packages file and to -// conform to pub analyzer. -// -// This is an asset package. No dart import needed. diff --git a/third_party/packages/cupertino_icons/pubspec.yaml b/third_party/packages/cupertino_icons/pubspec.yaml index fa704b9d473e..2981bda5b6a2 100644 --- a/third_party/packages/cupertino_icons/pubspec.yaml +++ b/third_party/packages/cupertino_icons/pubspec.yaml @@ -3,7 +3,7 @@ name: cupertino_icons description: Default icons asset for Cupertino widgets based on Apple styled icons repository: https://github.com/flutter/packages/tree/main/third_party/packages/cupertino_icons issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+cupertino_icons%22 -version: 1.0.8 +version: 1.0.9 environment: sdk: ^3.9.0 From b219b11f21789f81b11cf63b4f8f79853a35af54 Mon Sep 17 00:00:00 2001 From: Khaled Date: Wed, 25 Mar 2026 17:46:13 +0600 Subject: [PATCH 31/55] [webview_flutter_platform_interface] Add support for getting cookie (#11037) *Replace this paragraph with a description of what this PR is changing or adding, and why. Consider including before/after screenshots.* #10833 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../CHANGELOG.md | 3 +- .../src/platform_webview_cookie_manager.dart | 8 ++ .../lib/src/types/webview_cookie.dart | 5 + .../pubspec.yaml | 2 +- .../platform_webview_cookie_manager_test.dart | 125 ++++++++++++++++++ 5 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_cookie_manager_test.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index cc16a26cb2f3..eb9d926c23a7 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.15.0 +* Adds support to retrieve WebView cookies. See `PlatformWebViewCookieManager.getCookies`. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 2.14.0 diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart index 112b85e12568..6368ce7fdb7a 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart @@ -64,4 +64,12 @@ abstract class PlatformWebViewCookieManager extends PlatformInterface { 'setCookie is not implemented on the current platform', ); } + + /// Returns a list of existing cookies for the specified domain from all + /// [WebView] instances of the application. + Future> getCookies(Uri url) { + throw UnimplementedError( + 'getCookies is not implemented on the current platform', + ); + } } diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart index 026f2d6c6e02..1ab8e0867a17 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart @@ -38,4 +38,9 @@ class WebViewCookie { /// Its value should match "path-value" in RFC6265bis: /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1 final String path; + + @override + String toString() { + return 'WebViewCookie{name: $name, value: $value, domain: $domain, path: $path}'; + } } diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml index 2b755499a9d2..199a12801d25 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/webview_flutt issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.14.0 +version: 2.15.0 environment: sdk: ^3.9.0 diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_cookie_manager_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_cookie_manager_test.dart new file mode 100644 index 000000000000..471bdfbbd085 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_cookie_manager_test.dart @@ -0,0 +1,125 @@ +// 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 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; + +import 'webview_platform_test.mocks.dart'; + +void main() { + setUp(() { + WebViewPlatform.instance = MockWebViewPlatformWithMixin(); + }); + + test('Cannot be implemented with `implements`', () { + when( + (WebViewPlatform.instance! as MockWebViewPlatform) + .createPlatformCookieManager(any), + ).thenReturn(ImplementsPlatformWebViewCookieManager()); + + expect(() { + PlatformWebViewCookieManager( + const PlatformWebViewCookieManagerCreationParams(), + ); + // In versions of `package:plugin_platform_interface` prior to fixing + // https://github.com/flutter/flutter/issues/109339, an attempt to + // implement a platform interface using `implements` would sometimes throw + // a `NoSuchMethodError` and other times throw an `AssertionError`. After + // the issue is fixed, an `AssertionError` will always be thrown. For the + // purpose of this test, we don't really care what exception is thrown, so + // just allow any exception. + }, throwsA(anything)); + }); + + test('Can be extended', () { + const params = PlatformWebViewCookieManagerCreationParams(); + when( + (WebViewPlatform.instance! as MockWebViewPlatform) + .createPlatformCookieManager(any), + ).thenReturn(ExtendsPlatformWebViewCookieManager(params)); + + expect(PlatformWebViewCookieManager(params), isNotNull); + }); + + test('Can be mocked with `implements`', () { + when( + (WebViewPlatform.instance! as MockWebViewPlatform) + .createPlatformCookieManager(any), + ).thenReturn(MockWebViewCookieManagerDelegate()); + + expect( + PlatformWebViewCookieManager( + const PlatformWebViewCookieManagerCreationParams(), + ), + isNotNull, + ); + }); + + test( + 'Default implementation of clearCookies should throw unimplemented error', + () { + final PlatformWebViewCookieManager cookieManager = + ExtendsPlatformWebViewCookieManager( + const PlatformWebViewCookieManagerCreationParams(), + ); + + expect(() => cookieManager.clearCookies(), throwsUnimplementedError); + }, + ); + + test( + 'Default implementation of setCookie should throw unimplemented error', + () { + final PlatformWebViewCookieManager cookieManager = + ExtendsPlatformWebViewCookieManager( + const PlatformWebViewCookieManagerCreationParams(), + ); + + expect( + () => cookieManager.setCookie( + const WebViewCookie(name: 'foo', value: 'bar', domain: 'flutter.dev'), + ), + throwsUnimplementedError, + ); + }, + ); + + test( + 'Default implementation of getCookies should throw unimplemented error', + () { + final PlatformWebViewCookieManager cookieManager = + ExtendsPlatformWebViewCookieManager( + const PlatformWebViewCookieManagerCreationParams(), + ); + + expect( + () => cookieManager.getCookies(Uri.parse('https://flutter.dev')), + throwsUnimplementedError, + ); + }, + ); +} + +class MockWebViewPlatformWithMixin extends MockWebViewPlatform + with + // ignore: prefer_mixin + MockPlatformInterfaceMixin {} + +class ImplementsPlatformWebViewCookieManager + implements PlatformWebViewCookieManager { + @override + dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); +} + +class MockWebViewCookieManagerDelegate extends Mock + with + // ignore: prefer_mixin + MockPlatformInterfaceMixin + implements PlatformWebViewCookieManager {} + +class ExtendsPlatformWebViewCookieManager extends PlatformWebViewCookieManager { + ExtendsPlatformWebViewCookieManager(super.params) : super.implementation(); +} From ec1ce5b84f74fd6ab5fe56d676ce4fca6f62a0a9 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 25 Mar 2026 08:44:19 -0400 Subject: [PATCH 32/55] [various] Convert plugin builds to Kotlin gradle (#11172) Following up from https://github.com/flutter/packages/pull/11169, this converts all the rest of the plugins in the repository to use Kotlin rather than Groovy for plugin build files. As with that PR, this does not change the example apps, only the plugin builds themselves. Part of https://github.com/flutter/flutter/issues/176065 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- packages/camera/camera_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 40 ++++++----- .../camera_android/android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + packages/camera/camera_android/pubspec.yaml | 2 +- .../camera_android_camerax/CHANGELOG.md | 6 +- .../{build.gradle => build.gradle.kts} | 63 +++++++++-------- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../camera_android_camerax/pubspec.yaml | 2 +- packages/espresso/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 25 ++++--- packages/espresso/android/settings.gradle | 1 - packages/espresso/android/settings.gradle.kts | 1 + packages/espresso/pubspec.yaml | 2 +- .../file_selector_android/CHANGELOG.md | 3 +- .../{build.gradle => build.gradle.kts} | 24 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../file_selector_android/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../{build.gradle => build.gradle.kts} | 25 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../pubspec.yaml | 2 +- .../google_maps_flutter_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 34 +++++---- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../google_maps_flutter_android/pubspec.yaml | 2 +- .../google_sign_in_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 46 ++++++------ .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../google_sign_in_android/pubspec.yaml | 2 +- .../image_picker_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 24 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../image_picker_android/pubspec.yaml | 2 +- .../in_app_purchase_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 24 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../in_app_purchase_android/pubspec.yaml | 2 +- packages/interactive_media_ads/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 47 +++++++------ .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../AdsRequestProxyApi.kt | 2 +- .../AdsRequestProxyAPIDelegate.swift | 2 +- packages/interactive_media_ads/pubspec.yaml | 2 +- .../path_provider_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 24 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../path_provider_android/pubspec.yaml | 2 +- .../{build.gradle => build.gradle.kts} | 24 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../{build.gradle => build.gradle.kts} | 48 +++++++------ .../test_plugin/android/settings.gradle | 1 - .../test_plugin/android/settings.gradle.kts | 1 + .../quick_actions_android/CHANGELOG.md | 3 +- .../{build.gradle => build.gradle.kts} | 24 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../quick_actions_android/pubspec.yaml | 2 +- .../shared_preferences_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 56 ++++++++------- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../shared_preferences_android/pubspec.yaml | 2 +- .../url_launcher_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 26 ++++--- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../url_launcher_android/pubspec.yaml | 2 +- .../video_player_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 70 ++++++++++--------- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../video_player_android/pubspec.yaml | 2 +- .../webview_flutter_android/CHANGELOG.md | 4 ++ .../{build.gradle => build.gradle.kts} | 42 ++++++----- .../android/settings.gradle | 1 - .../android/settings.gradle.kts | 1 + .../webview_flutter_android/pubspec.yaml | 2 +- 88 files changed, 465 insertions(+), 336 deletions(-) rename packages/camera/camera_android/android/{build.gradle => build.gradle.kts} (51%) delete mode 100644 packages/camera/camera_android/android/settings.gradle create mode 100644 packages/camera/camera_android/android/settings.gradle.kts rename packages/camera/camera_android_camerax/android/{build.gradle => build.gradle.kts} (50%) delete mode 100644 packages/camera/camera_android_camerax/android/settings.gradle create mode 100644 packages/camera/camera_android_camerax/android/settings.gradle.kts rename packages/espresso/android/{build.gradle => build.gradle.kts} (80%) delete mode 100644 packages/espresso/android/settings.gradle create mode 100644 packages/espresso/android/settings.gradle.kts rename packages/file_selector/file_selector_android/android/{build.gradle => build.gradle.kts} (66%) delete mode 100644 packages/file_selector/file_selector_android/android/settings.gradle create mode 100644 packages/file_selector/file_selector_android/android/settings.gradle.kts rename packages/flutter_plugin_android_lifecycle/android/{build.gradle => build.gradle.kts} (66%) delete mode 100644 packages/flutter_plugin_android_lifecycle/android/settings.gradle create mode 100644 packages/flutter_plugin_android_lifecycle/android/settings.gradle.kts rename packages/google_maps_flutter/google_maps_flutter_android/android/{build.gradle => build.gradle.kts} (61%) delete mode 100644 packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle create mode 100644 packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle.kts rename packages/google_sign_in/google_sign_in_android/android/{build.gradle => build.gradle.kts} (63%) delete mode 100644 packages/google_sign_in/google_sign_in_android/android/settings.gradle create mode 100644 packages/google_sign_in/google_sign_in_android/android/settings.gradle.kts rename packages/image_picker/image_picker_android/android/{build.gradle => build.gradle.kts} (70%) delete mode 100755 packages/image_picker/image_picker_android/android/settings.gradle create mode 100755 packages/image_picker/image_picker_android/android/settings.gradle.kts rename packages/in_app_purchase/in_app_purchase_android/android/{build.gradle => build.gradle.kts} (72%) delete mode 100644 packages/in_app_purchase/in_app_purchase_android/android/settings.gradle create mode 100644 packages/in_app_purchase/in_app_purchase_android/android/settings.gradle.kts rename packages/interactive_media_ads/android/{build.gradle => build.gradle.kts} (63%) delete mode 100644 packages/interactive_media_ads/android/settings.gradle create mode 100644 packages/interactive_media_ads/android/settings.gradle.kts rename packages/path_provider/path_provider_android/android/{build.gradle => build.gradle.kts} (62%) delete mode 100644 packages/path_provider/path_provider_android/android/settings.gradle create mode 100644 packages/path_provider/path_provider_android/android/settings.gradle.kts rename packages/pigeon/platform_tests/alternate_language_test_plugin/android/{build.gradle => build.gradle.kts} (61%) delete mode 100644 packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle create mode 100644 packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle.kts rename packages/pigeon/platform_tests/test_plugin/android/{build.gradle => build.gradle.kts} (61%) delete mode 100644 packages/pigeon/platform_tests/test_plugin/android/settings.gradle create mode 100644 packages/pigeon/platform_tests/test_plugin/android/settings.gradle.kts rename packages/quick_actions/quick_actions_android/android/{build.gradle => build.gradle.kts} (64%) delete mode 100644 packages/quick_actions/quick_actions_android/android/settings.gradle create mode 100644 packages/quick_actions/quick_actions_android/android/settings.gradle.kts rename packages/shared_preferences/shared_preferences_android/android/{build.gradle => build.gradle.kts} (61%) delete mode 100644 packages/shared_preferences/shared_preferences_android/android/settings.gradle create mode 100644 packages/shared_preferences/shared_preferences_android/android/settings.gradle.kts rename packages/url_launcher/url_launcher_android/android/{build.gradle => build.gradle.kts} (70%) delete mode 100644 packages/url_launcher/url_launcher_android/android/settings.gradle create mode 100644 packages/url_launcher/url_launcher_android/android/settings.gradle.kts rename packages/video_player/video_player_android/android/{build.gradle => build.gradle.kts} (54%) delete mode 100644 packages/video_player/video_player_android/android/settings.gradle create mode 100644 packages/video_player/video_player_android/android/settings.gradle.kts rename packages/webview_flutter/webview_flutter_android/android/{build.gradle => build.gradle.kts} (62%) delete mode 100644 packages/webview_flutter/webview_flutter_android/android/settings.gradle create mode 100644 packages/webview_flutter/webview_flutter_android/android/settings.gradle.kts diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 9357004bb894..0bf9721e6ab9 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.10+16 + +* Updates build files from Groovy to Kotlin. + ## 0.10.10+15 * Updates example to demonstrate correct exception handling for async return statements, ensuring exceptions thrown during return within try blocks are properly caught as per [dart-lang/sdk#44395](https://github.com/dart-lang/sdk/issues/44395). diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle.kts similarity index 51% rename from packages/camera/camera_android/android/build.gradle rename to packages/camera/camera_android/android/build.gradle.kts index 6236cce21649..22a4dfb62033 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle.kts @@ -1,6 +1,5 @@ group = "io.flutter.plugins.camera" version = "1.0-SNAPSHOT" -def args = ["-Xlint:deprecation","-Xlint:unchecked"] buildscript { repositories { @@ -13,18 +12,21 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -project.getTasks().withType(JavaCompile){ - options.compilerArgs.addAll(args) +tasks.withType().configureEach { + options.compilerArgs.add("-Xlint:deprecation") + options.compilerArgs.add("-Xlint:unchecked") } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { buildFeatures { @@ -41,7 +43,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } compileOptions { @@ -50,18 +52,20 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - // The org.gradle.jvmargs property that may be set in gradle.properties does not impact - // the Java heap size when running the Android unit tests. The following property here - // sets the heap size to a size large enough to run the robolectric tests across - // multiple SDK levels. - jvmArgs "-Xmx4G" - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } + // The org.gradle.jvmargs property that may be set in gradle.properties does not impact + // the Java heap size when running the Android unit tests. The following property here + // sets the heap size to a size large enough to run the robolectric tests across + // multiple SDK levels. + it.jvmArgs("-Xmx4G") } } } diff --git a/packages/camera/camera_android/android/settings.gradle b/packages/camera/camera_android/android/settings.gradle deleted file mode 100644 index 94a1bae9d6cd..000000000000 --- a/packages/camera/camera_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'camera_android' diff --git a/packages/camera/camera_android/android/settings.gradle.kts b/packages/camera/camera_android/android/settings.gradle.kts new file mode 100644 index 000000000000..0006625daf4e --- /dev/null +++ b/packages/camera/camera_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "camera_android" diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index 4448279e3a32..34ffc900e502 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.10+15 +version: 0.10.10+16 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 4e9229a78da6..579d3a87c9f6 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.1+1 + +* Updates build files from Groovy to Kotlin. + ## 0.7.1 * Removes outdated restrictions against concurrent camera use cases. @@ -518,4 +522,4 @@ this plugin should now be compatible with [google_ml_kit_flutter](https://github * Displaying a live camera preview * Image streaming - See [`README.md`](README.md) for more details on the limitations of this implementation. \ No newline at end of file + See [`README.md`](README.md) for more details on the limitations of this implementation. diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle.kts similarity index 50% rename from packages/camera/camera_android_camerax/android/build.gradle rename to packages/camera/camera_android_camerax/android/build.gradle.kts index 065738fc7ba2..13da169a49e9 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "io.flutter.plugins.camerax" version = "1.0" buildscript { - ext.kotlin_version = '2.3.0' + val kotlinVersion = "2.3.0" repositories { google() mavenCentral() @@ -10,19 +12,27 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.13.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +plugins { + id("com.android.library") + id("kotlin-android") +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + } +} android { namespace = "io.flutter.plugins.camerax" @@ -34,11 +44,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - // This must match the Java version provided in compileOptions. - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { // CameraX APIs require API 23 or later. minSdk = 23 @@ -46,18 +51,20 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - // The org.gradle.jvmargs property that may be set in gradle.properties does not impact - // the Java heap size when running the Android unit tests. The following property here - // sets the heap size to a size large enough to run the robolectric tests across - // multiple SDK levels. - jvmArgs "-Xmx1G" - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } + // The org.gradle.jvmargs property that may be set in gradle.properties does not impact + // the Java heap size when running the Android unit tests. The following property here + // sets the heap size to a size large enough to run the robolectric tests across + // multiple SDK levels. + it.jvmArgs("-Xmx1G") } } } @@ -65,18 +72,18 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'GradleDependency', 'InvalidPackage', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "GradleDependency", "InvalidPackage", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } } dependencies { // CameraX core library using the camera2 implementation must use same version number. - def camerax_version = "1.5.3" - implementation("androidx.camera:camera-core:${camerax_version}") - implementation("androidx.camera:camera-camera2:${camerax_version}") - implementation("androidx.camera:camera-lifecycle:${camerax_version}") - implementation("androidx.camera:camera-video:${camerax_version}") + val cameraxVersion = "1.5.3" + implementation("androidx.camera:camera-core:${cameraxVersion}") + implementation("androidx.camera:camera-camera2:${cameraxVersion}") + implementation("androidx.camera:camera-lifecycle:${cameraxVersion}") + implementation("androidx.camera:camera-video:${cameraxVersion}") implementation("com.google.guava:guava:33.5.0-android") testImplementation("junit:junit:4.13.2") testImplementation("org.mockito:mockito-core:5.23.0") diff --git a/packages/camera/camera_android_camerax/android/settings.gradle b/packages/camera/camera_android_camerax/android/settings.gradle deleted file mode 100644 index 613f994165a0..000000000000 --- a/packages/camera/camera_android_camerax/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'camera_android_camerax' diff --git a/packages/camera/camera_android_camerax/android/settings.gradle.kts b/packages/camera/camera_android_camerax/android/settings.gradle.kts new file mode 100644 index 000000000000..9d4ef5bade6a --- /dev/null +++ b/packages/camera/camera_android_camerax/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "camera_android_camerax" diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 83ccda21ad1f..4125c02c589c 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.7.1 +version: 0.7.1+1 environment: sdk: ^3.9.0 diff --git a/packages/espresso/CHANGELOG.md b/packages/espresso/CHANGELOG.md index e944f4264b9e..a48867160766 100644 --- a/packages/espresso/CHANGELOG.md +++ b/packages/espresso/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.0+24 + +* Updates build files from Groovy to Kotlin. + ## 0.4.0+23 * Removed the unused `io.flutter.network-policy` metadata tag from the README and example application. diff --git a/packages/espresso/android/build.gradle b/packages/espresso/android/build.gradle.kts similarity index 80% rename from packages/espresso/android/build.gradle rename to packages/espresso/android/build.gradle.kts index cadf4a2c1cf5..db131e30cfdd 100644 --- a/packages/espresso/android/build.gradle +++ b/packages/espresso/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "com.example.espresso" @@ -38,19 +40,20 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } - testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/espresso/android/settings.gradle b/packages/espresso/android/settings.gradle deleted file mode 100644 index 46643c1c5e02..000000000000 --- a/packages/espresso/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'espresso' diff --git a/packages/espresso/android/settings.gradle.kts b/packages/espresso/android/settings.gradle.kts new file mode 100644 index 000000000000..ecf97c03a52c --- /dev/null +++ b/packages/espresso/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "espresso" diff --git a/packages/espresso/pubspec.yaml b/packages/espresso/pubspec.yaml index 63e77af8c5a9..785f52f716f6 100644 --- a/packages/espresso/pubspec.yaml +++ b/packages/espresso/pubspec.yaml @@ -3,7 +3,7 @@ description: Java classes for testing Flutter apps using Espresso. Allows driving Flutter widgets from a native Espresso test. repository: https://github.com/flutter/packages/tree/main/packages/espresso issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+espresso%22 -version: 0.4.0+23 +version: 0.4.0+24 environment: sdk: ^3.9.0 diff --git a/packages/file_selector/file_selector_android/CHANGELOG.md b/packages/file_selector/file_selector_android/CHANGELOG.md index 7e0e36773d2d..070599f8e5d7 100644 --- a/packages/file_selector/file_selector_android/CHANGELOG.md +++ b/packages/file_selector/file_selector_android/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.5.2+5 +* Updates build files from Groovy to Kotlin. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 0.5.2+4 diff --git a/packages/file_selector/file_selector_android/android/build.gradle b/packages/file_selector/file_selector_android/android/build.gradle.kts similarity index 66% rename from packages/file_selector/file_selector_android/android/build.gradle rename to packages/file_selector/file_selector_android/android/build.gradle.kts index 99f31fe552b9..7a9ace9f9f05 100644 --- a/packages/file_selector/file_selector_android/android/build.gradle +++ b/packages/file_selector/file_selector_android/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "dev.flutter.packages.file_selector_android" @@ -45,17 +47,19 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/file_selector/file_selector_android/android/settings.gradle b/packages/file_selector/file_selector_android/android/settings.gradle deleted file mode 100644 index 679b28be66a4..000000000000 --- a/packages/file_selector/file_selector_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'file_selector_android' diff --git a/packages/file_selector/file_selector_android/android/settings.gradle.kts b/packages/file_selector/file_selector_android/android/settings.gradle.kts new file mode 100644 index 000000000000..49fb054f3458 --- /dev/null +++ b/packages/file_selector/file_selector_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "file_selector_android" diff --git a/packages/file_selector/file_selector_android/pubspec.yaml b/packages/file_selector/file_selector_android/pubspec.yaml index 042236bfae85..80440caaa287 100644 --- a/packages/file_selector/file_selector_android/pubspec.yaml +++ b/packages/file_selector/file_selector_android/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_android description: Android implementation of the file_selector package. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.5.2+4 +version: 0.5.2+5 environment: sdk: ^3.9.0 diff --git a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md index 85dd8c13e2e1..aec558de4c34 100644 --- a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md +++ b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.0.34 +* Updates build files from Groovy to Kotlin. * Updates README to reflect currently supported OS version. ## 2.0.33 diff --git a/packages/flutter_plugin_android_lifecycle/android/build.gradle b/packages/flutter_plugin_android_lifecycle/android/build.gradle.kts similarity index 66% rename from packages/flutter_plugin_android_lifecycle/android/build.gradle rename to packages/flutter_plugin_android_lifecycle/android/build.gradle.kts index 3e48512de64a..e8cd82a5de60 100644 --- a/packages/flutter_plugin_android_lifecycle/android/build.gradle +++ b/packages/flutter_plugin_android_lifecycle/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "io.flutter.plugins.flutter_plugin_android_lifecycle" @@ -39,22 +41,23 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } dependencies { implementation("androidx.annotation:annotation:1.9.1") } - testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/flutter_plugin_android_lifecycle/android/settings.gradle b/packages/flutter_plugin_android_lifecycle/android/settings.gradle deleted file mode 100644 index 70836e6e7200..000000000000 --- a/packages/flutter_plugin_android_lifecycle/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'flutter_plugin_android_lifecycle' diff --git a/packages/flutter_plugin_android_lifecycle/android/settings.gradle.kts b/packages/flutter_plugin_android_lifecycle/android/settings.gradle.kts new file mode 100644 index 000000000000..5c21302de099 --- /dev/null +++ b/packages/flutter_plugin_android_lifecycle/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "flutter_plugin_android_lifecycle" diff --git a/packages/flutter_plugin_android_lifecycle/pubspec.yaml b/packages/flutter_plugin_android_lifecycle/pubspec.yaml index 6c146b98342e..038fc39804aa 100644 --- a/packages/flutter_plugin_android_lifecycle/pubspec.yaml +++ b/packages/flutter_plugin_android_lifecycle/pubspec.yaml @@ -2,7 +2,7 @@ name: flutter_plugin_android_lifecycle description: Flutter plugin for accessing an Android Lifecycle within other plugins. repository: https://github.com/flutter/packages/tree/main/packages/flutter_plugin_android_lifecycle issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_plugin_android_lifecycle%22 -version: 2.0.33 +version: 2.0.34 environment: sdk: ^3.9.0 diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md index 51d54ce382e3..f446b7d04984 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.19.4 + +* Updates build files from Groovy to Kotlin. + ## 2.19.3 * Batches clustered marker add/remove operations to avoid redundant re-rendering. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle.kts similarity index 61% rename from packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle rename to packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle.kts index d65271558ea7..61cdabfbbf01 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "io.flutter.plugins.googlemaps" @@ -33,7 +35,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } dependencies { @@ -55,19 +57,21 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } + // The org.gradle.jvmargs property that may be set in gradle.properties does not impact + // the Java heap size when running the Android unit tests. The following property here + // sets the heap size to a size large enough to run the robolectric tests across + // multiple SDK levels. + it.jvmArgs("-Xmx4G") } - // The org.gradle.jvmargs property that may be set in gradle.properties does not impact - // the Java heap size when running the Android unit tests. The following property here - // sets the heap size to a size large enough to run the robolectric tests across - // multiple SDK levels. - jvmArgs "-Xmx4G" } } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle deleted file mode 100644 index d873c7abe92c..000000000000 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'google_maps_flutter_android' diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle.kts b/packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle.kts new file mode 100644 index 000000000000..8a4acb4d1530 --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "google_maps_flutter_android" diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 817e60a672ae..ad8200c76db7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.19.3 +version: 2.19.4 environment: sdk: ^3.9.0 diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md index 38624c575a70..0117c25f07d9 100644 --- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.2.10 + +* Updates build files from Groovy to Kotlin. + ## 7.2.9 * Simplifies internal code for Kotlin/Java interoperability. diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle.kts similarity index 63% rename from packages/google_sign_in/google_sign_in_android/android/build.gradle rename to packages/google_sign_in/google_sign_in_android/android/build.gradle.kts index cd786af0b9c8..4ee50f996d19 100644 --- a/packages/google_sign_in/google_sign_in_android/android/build.gradle +++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "io.flutter.plugins.googlesignin" version = "1.0-SNAPSHOT" buildscript { - ext.kotlin_version = '2.3.0' + val kotlinVersion = "2.3.0" repositories { google() mavenCentral() @@ -10,19 +12,27 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.13.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +plugins { + id("com.android.library") + id("kotlin-android") +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + } +} android { namespace = "io.flutter.plugins.googlesignin" @@ -38,29 +48,23 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/google_sign_in/google_sign_in_android/android/settings.gradle b/packages/google_sign_in/google_sign_in_android/android/settings.gradle deleted file mode 100644 index 35ebd0e2428a..000000000000 --- a/packages/google_sign_in/google_sign_in_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'google_sign_in_android' diff --git a/packages/google_sign_in/google_sign_in_android/android/settings.gradle.kts b/packages/google_sign_in/google_sign_in_android/android/settings.gradle.kts new file mode 100644 index 000000000000..88f95d9cc61f --- /dev/null +++ b/packages/google_sign_in/google_sign_in_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "google_sign_in_android" diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml index 244cf1d3f6fd..ead6b61afa4a 100644 --- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_sign_in_android description: Android implementation of the google_sign_in plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22 -version: 7.2.9 +version: 7.2.10 environment: sdk: ^3.9.0 diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index 7f2e33347447..80d91b1deb87 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.13+15 + +* Updates build files from Groovy to Kotlin. + ## 0.8.13+14 * Bumps androidx.activity:activity from 1.12.2 to 1.12.4. diff --git a/packages/image_picker/image_picker_android/android/build.gradle b/packages/image_picker/image_picker_android/android/build.gradle.kts similarity index 70% rename from packages/image_picker/image_picker_android/android/build.gradle rename to packages/image_picker/image_picker_android/android/build.gradle.kts index f92f828f1321..c60f5f0bdaf2 100644 --- a/packages/image_picker/image_picker_android/android/build.gradle +++ b/packages/image_picker/image_picker_android/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "io.flutter.plugins.imagepicker" @@ -33,7 +35,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } dependencies { @@ -54,13 +56,15 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/image_picker/image_picker_android/android/settings.gradle b/packages/image_picker/image_picker_android/android/settings.gradle deleted file mode 100755 index 3c673efcd542..000000000000 --- a/packages/image_picker/image_picker_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'image_picker_android' diff --git a/packages/image_picker/image_picker_android/android/settings.gradle.kts b/packages/image_picker/image_picker_android/android/settings.gradle.kts new file mode 100755 index 000000000000..efd9fe9f7500 --- /dev/null +++ b/packages/image_picker/image_picker_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "image_picker_android" diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index 37dfcbaf8654..aba9ecbef800 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker_android description: Android implementation of the image_picker plugin. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.13+14 +version: 0.8.13+15 environment: sdk: ^3.9.0 diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md index 5769150bf7fb..e1c8438aa111 100644 --- a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.0+9 + +* Updates build files from Groovy to Kotlin. + ## 0.4.0+8 * Bumps com.android.tools.build:gradle from 8.12.1 to 8.13.1. diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts similarity index 72% rename from packages/in_app_purchase/in_app_purchase_android/android/build.gradle rename to packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts index 179938c5c3ad..adfb82752f56 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { buildFeatures { @@ -38,7 +40,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } compileOptions { @@ -47,13 +49,15 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/in_app_purchase/in_app_purchase_android/android/settings.gradle b/packages/in_app_purchase/in_app_purchase_android/android/settings.gradle deleted file mode 100644 index 58efd2e9323e..000000000000 --- a/packages/in_app_purchase/in_app_purchase_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'in_app_purchase' diff --git a/packages/in_app_purchase/in_app_purchase_android/android/settings.gradle.kts b/packages/in_app_purchase/in_app_purchase_android/android/settings.gradle.kts new file mode 100644 index 000000000000..9d77dc602791 --- /dev/null +++ b/packages/in_app_purchase/in_app_purchase_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "in_app_purchase" diff --git a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml index 06a91eb3cfaa..e6fc2a4efa5b 100644 --- a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml @@ -3,7 +3,7 @@ description: An implementation for the Android platform of the Flutter `in_app_p repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 0.4.0+8 +version: 0.4.0+9 environment: sdk: ^3.9.0 diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 96ae9a06e90f..f3e56c233359 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.0+13 + +* Updates build files from Groovy to Kotlin. + ## 0.3.0+12 * Bumps `androidx.core:core-ktx` from 1.13.0 to 1.18.0. diff --git a/packages/interactive_media_ads/android/build.gradle b/packages/interactive_media_ads/android/build.gradle.kts similarity index 63% rename from packages/interactive_media_ads/android/build.gradle rename to packages/interactive_media_ads/android/build.gradle.kts index 605eae7dd14b..a9ef29108629 100644 --- a/packages/interactive_media_ads/android/build.gradle +++ b/packages/interactive_media_ads/android/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "dev.flutter.packages.interactive_media_ads" version = "1.0-SNAPSHOT" buildscript { - ext.kotlin_version = '2.3.0' + val kotlinVersion = "2.3.0" repositories { google() mavenCentral() @@ -10,7 +12,7 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.13.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } @@ -21,8 +23,16 @@ allprojects { } } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +plugins { + id("com.android.library") + id("kotlin-android") +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + } +} android { namespace = "dev.flutter.packages.interactive_media_ads" @@ -34,15 +44,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - test.java.srcDirs += 'src/test/kotlin' - } - defaultConfig { minSdk = 24 } @@ -61,19 +62,21 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - useJUnitPlatform() - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.useJUnitPlatform() + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/interactive_media_ads/android/settings.gradle b/packages/interactive_media_ads/android/settings.gradle deleted file mode 100644 index 388e84d5a359..000000000000 --- a/packages/interactive_media_ads/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'interactive_media_ads' diff --git a/packages/interactive_media_ads/android/settings.gradle.kts b/packages/interactive_media_ads/android/settings.gradle.kts new file mode 100644 index 000000000000..3e483db7158d --- /dev/null +++ b/packages/interactive_media_ads/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "interactive_media_ads" diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt index a9a6b4106656..9ecf4f41c04f 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * * This must match the version in pubspec.yaml. */ - const val pluginVersion = "0.3.0+12" + const val pluginVersion = "0.3.0+13" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index a0074f86e1c2..c9c0982339b9 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.3.0+12" + static let pluginVersion = "0.3.0+13" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index a9a6d0ea061a..f61c679c68a0 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -2,7 +2,7 @@ name: interactive_media_ads description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22 -version: 0.3.0+12 # This must match the version in +version: 0.3.0+13 # This must match the version in # `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and # `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift` diff --git a/packages/path_provider/path_provider_android/CHANGELOG.md b/packages/path_provider/path_provider_android/CHANGELOG.md index 76f560327b59..106b35fa0676 100644 --- a/packages/path_provider/path_provider_android/CHANGELOG.md +++ b/packages/path_provider/path_provider_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.23 + +* Updates build files from Groovy to Kotlin. + ## 2.2.22 * Bumps com.android.tools.build:gradle from 8.12.1 to 8.13.1. diff --git a/packages/path_provider/path_provider_android/android/build.gradle b/packages/path_provider/path_provider_android/android/build.gradle.kts similarity index 62% rename from packages/path_provider/path_provider_android/android/build.gradle rename to packages/path_provider/path_provider_android/android/build.gradle.kts index 6201b8529533..3114e6c6385e 100644 --- a/packages/path_provider/path_provider_android/android/build.gradle +++ b/packages/path_provider/path_provider_android/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "io.flutter.plugins.pathprovider" @@ -33,7 +35,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } compileOptions { @@ -42,13 +44,15 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/path_provider/path_provider_android/android/settings.gradle b/packages/path_provider/path_provider_android/android/settings.gradle deleted file mode 100644 index 359a57ff9540..000000000000 --- a/packages/path_provider/path_provider_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'path_provider_android' diff --git a/packages/path_provider/path_provider_android/android/settings.gradle.kts b/packages/path_provider/path_provider_android/android/settings.gradle.kts new file mode 100644 index 000000000000..4fc5bb16d8aa --- /dev/null +++ b/packages/path_provider/path_provider_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "path_provider_android" diff --git a/packages/path_provider/path_provider_android/pubspec.yaml b/packages/path_provider/path_provider_android/pubspec.yaml index 021a3bf16d66..a5a6380aa24b 100644 --- a/packages/path_provider/path_provider_android/pubspec.yaml +++ b/packages/path_provider/path_provider_android/pubspec.yaml @@ -2,7 +2,7 @@ name: path_provider_android description: Android implementation of the path_provider plugin. repository: https://github.com/flutter/packages/tree/main/packages/path_provider/path_provider_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22 -version: 2.2.22 +version: 2.2.23 environment: sdk: ^3.9.0 diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle.kts similarity index 61% rename from packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle rename to packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle.kts index 65fe42297512..1925992c30a2 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "com.example.alternate_language_test_plugin" @@ -35,13 +37,15 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } @@ -49,7 +53,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } dependencies { diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle deleted file mode 100644 index 0f10659c4e4e..000000000000 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'alternate_language_test_plugin' diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle.kts b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle.kts new file mode 100644 index 000000000000..e6c1cb2b5f2e --- /dev/null +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "alternate_language_test_plugin" diff --git a/packages/pigeon/platform_tests/test_plugin/android/build.gradle b/packages/pigeon/platform_tests/test_plugin/android/build.gradle.kts similarity index 61% rename from packages/pigeon/platform_tests/test_plugin/android/build.gradle rename to packages/pigeon/platform_tests/test_plugin/android/build.gradle.kts index 03ccddb3a69c..284efe74ecb6 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/build.gradle +++ b/packages/pigeon/platform_tests/test_plugin/android/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "com.example.test_plugin" version = "1.0-SNAPSHOT" buildscript { - ext.kotlin_version = '2.3.0' + val kotlinVersion = "2.3.0" repositories { google() mavenCentral() @@ -10,7 +12,7 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.13.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } @@ -21,8 +23,17 @@ allprojects { } } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +plugins { + id("com.android.library") + id("kotlin-android") +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + allWarningsAsErrors = true + } +} android { namespace = "com.example.test_plugin" @@ -33,27 +44,20 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - allWarningsAsErrors = true - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - defaultConfig { minSdk = 24 } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } @@ -61,12 +65,12 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } dependencies { - compileOnly 'javax.annotation:javax.annotation-api:1.3.2' + compileOnly("javax.annotation:javax.annotation-api:1.3.2") testImplementation("junit:junit:4.13.2") testImplementation("io.mockk:mockk:1.14.9") // org.jetbrains.kotlin:kotlin-bom artifact purpose is to align kotlin stdlib and related code versions. diff --git a/packages/pigeon/platform_tests/test_plugin/android/settings.gradle b/packages/pigeon/platform_tests/test_plugin/android/settings.gradle deleted file mode 100644 index e9328f28412e..000000000000 --- a/packages/pigeon/platform_tests/test_plugin/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'test_plugin' diff --git a/packages/pigeon/platform_tests/test_plugin/android/settings.gradle.kts b/packages/pigeon/platform_tests/test_plugin/android/settings.gradle.kts new file mode 100644 index 000000000000..2e32f8d43572 --- /dev/null +++ b/packages/pigeon/platform_tests/test_plugin/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "test_plugin" diff --git a/packages/quick_actions/quick_actions_android/CHANGELOG.md b/packages/quick_actions/quick_actions_android/CHANGELOG.md index 9fdf32001183..fcacbb356d3c 100644 --- a/packages/quick_actions/quick_actions_android/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_android/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.0.28 +* Updates build files from Groovy to Kotlin. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 1.0.27 diff --git a/packages/quick_actions/quick_actions_android/android/build.gradle b/packages/quick_actions/quick_actions_android/android/build.gradle.kts similarity index 64% rename from packages/quick_actions/quick_actions_android/android/build.gradle rename to packages/quick_actions/quick_actions_android/android/build.gradle.kts index 7b5ee57fec5d..bb8fa232e967 100644 --- a/packages/quick_actions/quick_actions_android/android/build.gradle +++ b/packages/quick_actions/quick_actions_android/android/build.gradle.kts @@ -12,14 +12,16 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { namespace = "io.flutter.plugins.quickactions" @@ -33,7 +35,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } dependencies { @@ -48,13 +50,15 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/quick_actions/quick_actions_android/android/settings.gradle b/packages/quick_actions/quick_actions_android/android/settings.gradle deleted file mode 100644 index 75248241ec35..000000000000 --- a/packages/quick_actions/quick_actions_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'quick_actions' diff --git a/packages/quick_actions/quick_actions_android/android/settings.gradle.kts b/packages/quick_actions/quick_actions_android/android/settings.gradle.kts new file mode 100644 index 000000000000..300d89d29631 --- /dev/null +++ b/packages/quick_actions/quick_actions_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "quick_actions" diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml index d468da6bbd51..dd05368fd9de 100644 --- a/packages/quick_actions/quick_actions_android/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/pubspec.yaml @@ -2,7 +2,7 @@ name: quick_actions_android description: An implementation for the Android platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.0.27 +version: 1.0.28 environment: sdk: ^3.9.0 diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index d9d83230286a..32bfb5ee185f 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.4.22 + +* Updates build files from Groovy to Kotlin. + ## 2.4.21 * Reverts `androidx.datastore:datastore` to 1.1.7 due to a regression 16 KB diff --git a/packages/shared_preferences/shared_preferences_android/android/build.gradle b/packages/shared_preferences/shared_preferences_android/android/build.gradle.kts similarity index 61% rename from packages/shared_preferences/shared_preferences_android/android/build.gradle rename to packages/shared_preferences/shared_preferences_android/android/build.gradle.kts index 98f49676199a..edf15edc0ca4 100644 --- a/packages/shared_preferences/shared_preferences_android/android/build.gradle +++ b/packages/shared_preferences/shared_preferences_android/android/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "io.flutter.plugins.sharedpreferences" version = "1.0-SNAPSHOT" buildscript { - ext.kotlin_version = '2.3.0' + val kotlinVersion = "2.3.0" repositories { google() mavenCentral() @@ -10,27 +12,33 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.13.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -allprojects { - gradle.projectsEvaluated { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } +// TODO(stuartmorgan): See if this can be removed. +tasks.withType().configureEach { + options.compilerArgs.add("-Xlint:deprecation") + options.compilerArgs.add("-Xlint:unchecked") } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +plugins { + id("com.android.library") + id("kotlin-android") +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + } +} android { namespace = "io.flutter.plugins.sharedpreferences" @@ -41,14 +49,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - defaultConfig { minSdk = 24 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" @@ -57,7 +57,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } @@ -74,13 +74,15 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/shared_preferences/shared_preferences_android/android/settings.gradle b/packages/shared_preferences/shared_preferences_android/android/settings.gradle deleted file mode 100644 index 033d5be261a7..000000000000 --- a/packages/shared_preferences/shared_preferences_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'shared_preferences_android' diff --git a/packages/shared_preferences/shared_preferences_android/android/settings.gradle.kts b/packages/shared_preferences/shared_preferences_android/android/settings.gradle.kts new file mode 100644 index 000000000000..e526d4c93d44 --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "shared_preferences_android" diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index 8ef265cd3b95..67998482ecde 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_android description: Android implementation of the shared_preferences plugin repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.4.21 +version: 2.4.22 environment: sdk: ^3.9.0 diff --git a/packages/url_launcher/url_launcher_android/CHANGELOG.md b/packages/url_launcher/url_launcher_android/CHANGELOG.md index 09f2f425163c..2cb8a74f5f26 100644 --- a/packages/url_launcher/url_launcher_android/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.3.29 + +* Updates build files from Groovy to Kotlin. + ## 6.3.28 * Bumps com.android.tools.build:gradle from 8.12.1 to 8.13.1. diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle b/packages/url_launcher/url_launcher_android/android/build.gradle.kts similarity index 70% rename from packages/url_launcher/url_launcher_android/android/build.gradle rename to packages/url_launcher/url_launcher_android/android/build.gradle.kts index e77948ab280e..70044901998b 100644 --- a/packages/url_launcher/url_launcher_android/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/android/build.gradle.kts @@ -12,19 +12,22 @@ buildscript { } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' +plugins { + id("com.android.library") +} android { buildFeatures { buildConfig = true } + namespace = "io.flutter.plugins.urllauncher" compileSdk = flutter.compileSdkVersion @@ -41,24 +44,25 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } } dependencies { - // Java language implementation implementation("androidx.core:core:1.17.0") implementation("androidx.annotation:annotation:1.9.1") diff --git a/packages/url_launcher/url_launcher_android/android/settings.gradle b/packages/url_launcher/url_launcher_android/android/settings.gradle deleted file mode 100644 index d8b7cc47172c..000000000000 --- a/packages/url_launcher/url_launcher_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'url_launcher_android' diff --git a/packages/url_launcher/url_launcher_android/android/settings.gradle.kts b/packages/url_launcher/url_launcher_android/android/settings.gradle.kts new file mode 100644 index 000000000000..22c54c2e0d72 --- /dev/null +++ b/packages/url_launcher/url_launcher_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "url_launcher_android" diff --git a/packages/url_launcher/url_launcher_android/pubspec.yaml b/packages/url_launcher/url_launcher_android/pubspec.yaml index 4aeab9b6eee2..425b261484ae 100644 --- a/packages/url_launcher/url_launcher_android/pubspec.yaml +++ b/packages/url_launcher/url_launcher_android/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher_android description: Android implementation of the url_launcher plugin. repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 -version: 6.3.28 +version: 6.3.29 environment: sdk: ^3.9.0 diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index 1d56131e8bb2..85f40631a278 100644 --- a/packages/video_player/video_player_android/CHANGELOG.md +++ b/packages/video_player/video_player_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.9.5 + +* Updates build files from Groovy to Kotlin. + ## 2.9.4 * Updates `androidx.media3` to 1.9.2. diff --git a/packages/video_player/video_player_android/android/build.gradle b/packages/video_player/video_player_android/android/build.gradle.kts similarity index 54% rename from packages/video_player/video_player_android/android/build.gradle rename to packages/video_player/video_player_android/android/build.gradle.kts index 36d91037969e..4f7eccc4b4e4 100644 --- a/packages/video_player/video_player_android/android/build.gradle +++ b/packages/video_player/video_player_android/android/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "io.flutter.plugins.videoplayer" version = "1.0-SNAPSHOT" buildscript { - ext.kotlin_version = '2.3.0' + val kotlinVersion = "2.3.0" repositories { google() mavenCentral() @@ -10,19 +12,27 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.13.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +plugins { + id("com.android.library") + id("kotlin-android") +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + } +} android { namespace = "io.flutter.plugins.videoplayer" @@ -36,7 +46,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } @@ -45,41 +55,35 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - dependencies { - def exoplayer_version = "1.9.2" - implementation("androidx.media3:media3-exoplayer:${exoplayer_version}") - implementation("androidx.media3:media3-exoplayer-hls:${exoplayer_version}") - implementation("androidx.media3:media3-exoplayer-dash:${exoplayer_version}") - implementation("androidx.media3:media3-exoplayer-rtsp:${exoplayer_version}") - implementation("androidx.media3:media3-exoplayer-smoothstreaming:${exoplayer_version}") + val exoplayerVersion = "1.9.2" + implementation("androidx.media3:media3-exoplayer:${exoplayerVersion}") + implementation("androidx.media3:media3-exoplayer-hls:${exoplayerVersion}") + implementation("androidx.media3:media3-exoplayer-dash:${exoplayerVersion}") + implementation("androidx.media3:media3-exoplayer-rtsp:${exoplayerVersion}") + implementation("androidx.media3:media3-exoplayer-smoothstreaming:${exoplayerVersion}") testImplementation("junit:junit:4.13.2") testImplementation("androidx.test:core:1.7.0") testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("org.robolectric:robolectric:4.16") - testImplementation("androidx.media3:media3-test-utils:${exoplayer_version}") + testImplementation("androidx.media3:media3-test-utils:${exoplayerVersion}") } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - // The org.gradle.jvmargs property that may be set in gradle.properties does not impact - // the Java heap size when running the Android unit tests. The following property here - // sets the heap size to a size large enough to run the robolectric tests across - // multiple SDK levels. - jvmArgs "-Xmx4G" - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } + // The org.gradle.jvmargs property that may be set in gradle.properties does not impact + // the Java heap size when running the Android unit tests. The following property here + // sets the heap size to a size large enough to run the robolectric tests across + // multiple SDK levels. + it.jvmArgs("-Xmx4G") } } } diff --git a/packages/video_player/video_player_android/android/settings.gradle b/packages/video_player/video_player_android/android/settings.gradle deleted file mode 100644 index 00681714f7d8..000000000000 --- a/packages/video_player/video_player_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'video_player_android' diff --git a/packages/video_player/video_player_android/android/settings.gradle.kts b/packages/video_player/video_player_android/android/settings.gradle.kts new file mode 100644 index 000000000000..e3289a056828 --- /dev/null +++ b/packages/video_player/video_player_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "video_player_android" diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml index 359ba7466e27..4461ddd73d1e 100644 --- a/packages/video_player/video_player_android/pubspec.yaml +++ b/packages/video_player/video_player_android/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_android description: Android implementation of the video_player plugin. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.9.4 +version: 2.9.5 environment: sdk: ^3.9.0 diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 088dcb547c3e..832b6a95711e 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.10.14 + +* Updates build files from Groovy to Kotlin. + ## 4.10.13 * Bumps androidx.webkit:webkit from 1.14.0 to 1.15.0. diff --git a/packages/webview_flutter/webview_flutter_android/android/build.gradle b/packages/webview_flutter/webview_flutter_android/android/build.gradle.kts similarity index 62% rename from packages/webview_flutter/webview_flutter_android/android/build.gradle rename to packages/webview_flutter/webview_flutter_android/android/build.gradle.kts index 9a14dfe32220..6872533d581d 100644 --- a/packages/webview_flutter/webview_flutter_android/android/build.gradle +++ b/packages/webview_flutter/webview_flutter_android/android/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "io.flutter.plugins.webviewflutter" version = "1.0-SNAPSHOT" buildscript { - ext.kotlin_version = '2.3.0' + val kotlinVersion = "2.3.0" repositories { google() mavenCentral() @@ -10,19 +12,27 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.13.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } -rootProject.allprojects { +allprojects { repositories { google() mavenCentral() } } -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +plugins { + id("com.android.library") + id("kotlin-android") +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString()) + } +} android { namespace = "io.flutter.plugins.webviewflutter" @@ -33,10 +43,6 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - defaultConfig { minSdk = 24 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" @@ -45,7 +51,7 @@ android { lint { checkAllWarnings = true warningsAsErrors = true - disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency', 'NewerVersionAvailable' + disable.addAll(setOf("AndroidGradlePluginVersion", "InvalidPackage", "GradleDependency", "NewerVersionAvailable")) baseline = file("lint-baseline.xml") } @@ -59,13 +65,15 @@ android { } testOptions { - unitTests.includeAndroidResources = true - unitTests.returnDefaultValues = true - unitTests.all { - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true + unitTests { + isIncludeAndroidResources = true + isReturnDefaultValues = true + all { + it.outputs.upToDateWhen { false } + it.testLogging { + events("passed", "skipped", "failed", "standardOut", "standardError") + showStandardStreams = true + } } } } diff --git a/packages/webview_flutter/webview_flutter_android/android/settings.gradle b/packages/webview_flutter/webview_flutter_android/android/settings.gradle deleted file mode 100644 index 5be7a4b4c692..000000000000 --- a/packages/webview_flutter/webview_flutter_android/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'webview_flutter' diff --git a/packages/webview_flutter/webview_flutter_android/android/settings.gradle.kts b/packages/webview_flutter/webview_flutter_android/android/settings.gradle.kts new file mode 100644 index 000000000000..009a3e185c9a --- /dev/null +++ b/packages/webview_flutter/webview_flutter_android/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "webview_flutter" diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index 4415fcfbbaee..1657eeb4af99 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 4.10.13 +version: 4.10.14 environment: sdk: ^3.9.0 From 11419a229a19394ce15d9ba85bdff9894dcf5fa8 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 25 Mar 2026 08:53:51 -0400 Subject: [PATCH 33/55] [ci] Add a workflow to auto-remove CICD label (#11301) See https://github.com/flutter/flutter/pull/183675 and https://github.com/flutter/flutter/pull/183905. This replicates that script to this repo, until such time as the entire flow is fully centralized. --- .github/remove_cicd.yml | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 .github/remove_cicd.yml diff --git a/.github/remove_cicd.yml b/.github/remove_cicd.yml new file mode 100644 index 000000000000..6f5ff9d0596f --- /dev/null +++ b/.github/remove_cicd.yml @@ -0,0 +1,65 @@ +# Copyright 2024 The Flutter Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +name: Remove outdated CICD Label + +on: + pull_request_target: + types: [synchronize] + +permissions: + pull-requests: write + issues: write + +jobs: + remove_cicd_label: + if: contains(github.event.pull_request.labels.*.name, 'CICD') + runs-on: ubuntu-latest + steps: + - name: Check if label was added before push + id: check_timing + run: | + # Get push time (commit date of the head SHA) + PUSH_TIME='${{ github.event.pull_request.updated_at }}' + echo "Push time: $PUSH_TIME" + + # Get latest CICD labeling event time from the last 100 events + LABEL_TIME=$(gh api graphql -f query=' + query($owner: String!, $repo: String!, $pr: Int!) { + repository(owner: $owner, name: $repo) { + pullRequest(number: $pr) { + timelineItems(last: 100, itemTypes: [LABELED_EVENT]) { + nodes { + ... on LabeledEvent { + label { name } + createdAt + } + } + } + } + } + }' -f owner=${{ github.repository_owner }} -f repo=${{ github.event.repository.name }} -F pr=${{ github.event.pull_request.number }} \ + --jq '.data.repository.pullRequest.timelineItems.nodes | map(select(.label.name == "CICD")) | last | .createdAt') + echo "Label time: $LABEL_TIME" + + if [[ -z "$LABEL_TIME" ]]; then + # Label exists on PR (checked by job 'if') but not in last 100 events -> must be very old + echo "should_remove=true" >> "$GITHUB_OUTPUT" + echo "Result: Label found on PR but not in recent timeline events. Assuming it is old." + elif [[ "$LABEL_TIME" < "$PUSH_TIME" ]]; then + echo "should_remove=true" >> "$GITHUB_OUTPUT" + echo "Result: Label added at $LABEL_TIME is older than push at $PUSH_TIME. Removing." + else + echo "should_remove=false" >> "$GITHUB_OUTPUT" + echo "Result: Label added at $LABEL_TIME is newer than or same as push at $PUSH_TIME. Skipping removal." + fi + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: Remove outdated CICD label + if: steps.check_timing.outputs.should_remove == 'true' + run: | + gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "CICD" + env: + GITHUB_TOKEN: ${{ github.token }} From 1359ed0d7ed055880d6c4ba8733bc3e50ae629cd Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 25 Mar 2026 09:02:18 -0400 Subject: [PATCH 34/55] [mustache_template] Fix broken README link (#11306) pub.dev flagged this link since it used http rather than https, but it turns out it's also no longer a valid link; that domain doesn't resolve. This updates to the correct domain, and to a secure link. Part of https://github.com/flutter/flutter/issues/183844 ## Pre-Review Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] page, which explains my responsibilities. - [x] I read and followed the [relevant style guides] and ran [the auto-formatter]. - [x] I signed the [CLA]. - [x] The title of the PR starts with the name of the package surrounded by square brackets, e.g. `[shared_preferences]` - [x] I [linked to at least one issue that this PR fixes] in the description above. - [x] I followed [the version and CHANGELOG instructions], using [semantic versioning] and the [repository CHANGELOG style], or I have commented below to indicate which documented exception this PR falls under[^1]. - [x] I updated/added any relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or I have commented below to indicate which [test exemption] this PR falls under[^1]. - [x] All existing and new tests are passing. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. [Contributor Guide]: https://github.com/flutter/packages/blob/main/CONTRIBUTING.md [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md [relevant style guides]: https://github.com/flutter/packages/blob/main/CONTRIBUTING.md#style [the auto-formatter]: https://github.com/flutter/packages/blob/main/script/tool/README.md#format-code [CLA]: https://cla.developers.google.com/ [Discord]: https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md [linked to at least one issue that this PR fixes]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#overview [the version and CHANGELOG instructions]: https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#version-and-changelog-updates [semantic versioning]: https://dart.dev/tools/pub/versioning#semantic-versions [repository CHANGELOG style]: https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog-style [test exemption]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#tests --- third_party/packages/mustache_template/CHANGELOG.md | 4 ++++ third_party/packages/mustache_template/README.md | 2 +- third_party/packages/mustache_template/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/third_party/packages/mustache_template/CHANGELOG.md b/third_party/packages/mustache_template/CHANGELOG.md index 67f53c1a8fc9..634e9abae3cd 100644 --- a/third_party/packages/mustache_template/CHANGELOG.md +++ b/third_party/packages/mustache_template/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.4 + +* Fixes a broken README link to the Mustache manual. + ## 2.0.3 * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. diff --git a/third_party/packages/mustache_template/README.md b/third_party/packages/mustache_template/README.md index 7602c2755160..cf4dab61e4e6 100644 --- a/third_party/packages/mustache_template/README.md +++ b/third_party/packages/mustache_template/README.md @@ -2,7 +2,7 @@ A Dart library to parse and render [mustache templates](https://mustache.github.io/). -See the [mustache manual](http://mustache.github.com/mustache.5.html) for detailed usage information. +See the [mustache manual](https://mustache.github.io/mustache.5.html) for detailed usage information. This library passes all [mustache specification](https://github.com/mustache/spec/tree/master/specs) tests. diff --git a/third_party/packages/mustache_template/pubspec.yaml b/third_party/packages/mustache_template/pubspec.yaml index 264e0ee0c4d4..8a8bdeae8b94 100644 --- a/third_party/packages/mustache_template/pubspec.yaml +++ b/third_party/packages/mustache_template/pubspec.yaml @@ -2,7 +2,7 @@ name: mustache_template description: A templating library that implements the Mustache template specification repository: https://github.com/flutter/packages/tree/main/third_party/packages/mustache_template issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+mustache_template%22 -version: 2.0.3 +version: 2.0.4 environment: sdk: ^3.9.0 From 52eb33646f363dcb1cf854019542f5bf24346b18 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 25 Mar 2026 09:03:15 -0400 Subject: [PATCH 35/55] [google_maps_flutter] Fix A2A iOS builds (#11290) Unshares `GoogleMapsUtilsTrampoline.h` and makes the `google_maps_flutter_ios` version, which only needs to support CocoaPods, unconditionally use the import version that CocoaPods needs. This works around the fact that (as discussed in the issue) we haven't yet found a way to reliably detect which mode this package is being built in that works in all the edge conditions we tested. `google_maps_flutter_ios_sdk*` will still be broken for A2A CocoaPods builds but: - Someone would have to explicitly opt into that, vs just try to use `google_maps_flutter`. - There is currently no advantage to using an `_sdk*` variant in a CocoaPods build. - Future versions of Flutter will support SwiftPM-based A2A flows. Given that, fixing this only for `google_maps_flutter` may be sufficient even in the long term, in addition to addressing the regression in the short term. Fixes https://github.com/flutter/flutter/issues/183441 ## Pre-Review Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] page, which explains my responsibilities. - [x] I read and followed the [relevant style guides] and ran [the auto-formatter]. - [x] I signed the [CLA]. - [x] The title of the PR starts with the name of the package surrounded by square brackets, e.g. `[shared_preferences]` - [x] I [linked to at least one issue that this PR fixes] in the description above. - [x] I followed [the version and CHANGELOG instructions], using [semantic versioning] and the [repository CHANGELOG style], or I have commented below to indicate which documented exception this PR falls under[^1]. - [x] I updated/added any relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or I have commented below to indicate which [test exemption] this PR falls under[^1]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. [Contributor Guide]: https://github.com/flutter/packages/blob/main/CONTRIBUTING.md [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md [relevant style guides]: https://github.com/flutter/packages/blob/main/CONTRIBUTING.md#style [the auto-formatter]: https://github.com/flutter/packages/blob/main/script/tool/README.md#format-code [CLA]: https://cla.developers.google.com/ [Discord]: https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md [linked to at least one issue that this PR fixes]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#overview [the version and CHANGELOG instructions]: https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#version-and-changelog-updates [semantic versioning]: https://dart.dev/tools/pub/versioning#semantic-versions [repository CHANGELOG style]: https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog-style [test exemption]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#tests --- .../google_maps_flutter_ios/CHANGELOG.md | 4 ++++ .../ios/google_maps_flutter_ios.podspec | 2 -- .../GoogleMapsUtilsTrampoline.h | 7 ------- .../google_maps_flutter_ios/pubspec.yaml | 2 +- .../tool/unshared_source_files.dart | 2 ++ .../tool/unshared_source_files.dart | 2 ++ .../tool/unshared_source_files.dart | 2 ++ .../GoogleMapsUtilsTrampoline.h | 12 ------------ 8 files changed, 11 insertions(+), 22 deletions(-) delete mode 100644 packages/google_maps_flutter/google_maps_flutter_ios_shared_code/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md index 53957aa91377..179691037daf 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.18.1 + +* Removes conditional header logic that broke add-to-app builds. + ## 2.18.0 * Adds support for advanced markers. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios.podspec b/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios.podspec index 529c229438cd..d18e53fac837 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios.podspec +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios.podspec @@ -38,8 +38,6 @@ Downloaded by pub (not CocoaPods). s.xcconfig = { 'LIBRARY_SEARCH_PATHS' => '$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)/ $(SDKROOT)/usr/lib/swift', 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) /usr/lib/swift', - # To handle the difference in framework names between CocoaPods and Swift Package Manager in shared code. - 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) FGM_USING_COCOAPODS=1', } s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.resource_bundles = {'google_maps_flutter_ios_privacy' => ['google_maps_flutter_ios/Sources/google_maps_flutter_ios/Resources/PrivacyInfo.xcprivacy']} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h index cf6399b5b39e..f28daee88163 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h @@ -2,11 +2,4 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// If Swift Package Manager is in use, Objective-C headers are available under the -// GoogleMapsUtilsObjC package. When using CocoaPods, the headers are provided by the -// GoogleMapsUtils package. -#ifdef FGM_USING_COCOAPODS @import GoogleMapsUtils; -#else -@import GoogleMapsUtilsObjC; -#endif diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml index 6b01ee3376a9..d8548ac8dac0 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_ios description: iOS implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.18.0 +version: 2.18.1 environment: sdk: ^3.10.0 diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/tool/unshared_source_files.dart b/packages/google_maps_flutter/google_maps_flutter_ios/tool/unshared_source_files.dart index 90d963c64dde..627f7e007ee0 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/tool/unshared_source_files.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/tool/unshared_source_files.dart @@ -10,4 +10,6 @@ const intentionallyUnsharedSourceFiles = [ 'test/package_specific_test_import.dart', // Each package will have its own list. 'tool/unshared_source_files.dart', + // Unshared due to https://github.com/flutter/flutter/issues/183441. + 'ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h', ]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/tool/unshared_source_files.dart b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/tool/unshared_source_files.dart index 8660b7e6a17e..dee386df465d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/tool/unshared_source_files.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk10/tool/unshared_source_files.dart @@ -12,4 +12,6 @@ const intentionallyUnsharedSourceFiles = [ 'test/package_specific_test_import.dart', // Each package will have its own list. 'tool/unshared_source_files.dart', + // Unshared due to https://github.com/flutter/flutter/issues/183441. + 'ios/google_maps_flutter_ios_sdk10/Sources/google_maps_flutter_ios_sdk10/include/google_maps_flutter_ios_sdk10/GoogleMapsUtilsTrampoline.h', ]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/tool/unshared_source_files.dart b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/tool/unshared_source_files.dart index 1cfb85a852ac..7e0205065261 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/tool/unshared_source_files.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios_sdk9/tool/unshared_source_files.dart @@ -12,4 +12,6 @@ const intentionallyUnsharedSourceFiles = [ 'test/package_specific_test_import.dart', // Each package will have its own list. 'tool/unshared_source_files.dart', + // Unshared due to https://github.com/flutter/flutter/issues/183441. + 'ios/google_maps_flutter_ios_sdk9/Sources/google_maps_flutter_ios_sdk9/include/google_maps_flutter_ios_sdk9/GoogleMapsUtilsTrampoline.h', ]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios_shared_code/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h b/packages/google_maps_flutter/google_maps_flutter_ios_shared_code/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h deleted file mode 100644 index cf6399b5b39e..000000000000 --- a/packages/google_maps_flutter/google_maps_flutter_ios_shared_code/ios/google_maps_flutter_ios/Sources/google_maps_flutter_ios/include/google_maps_flutter_ios/GoogleMapsUtilsTrampoline.h +++ /dev/null @@ -1,12 +0,0 @@ -// 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. - -// If Swift Package Manager is in use, Objective-C headers are available under the -// GoogleMapsUtilsObjC package. When using CocoaPods, the headers are provided by the -// GoogleMapsUtils package. -#ifdef FGM_USING_COCOAPODS -@import GoogleMapsUtils; -#else -@import GoogleMapsUtilsObjC; -#endif From 309a35a4097b2561d981cc68d285f4e0fbbf4c39 Mon Sep 17 00:00:00 2001 From: LouiseHsu Date: Wed, 25 Mar 2026 09:04:21 -0400 Subject: [PATCH 36/55] [in_app_purchase_storekit] Address flaky tests (#11270) Fixes https://github.com/flutter/flutter/issues/182845 Probably fixes https://github.com/flutter/flutter/issues/183318 ## Pre-Review Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] page, which explains my responsibilities. - [x] I read and followed the [relevant style guides] and ran [the auto-formatter]. - [x] I signed the [CLA]. - [x] The title of the PR starts with the name of the package surrounded by square brackets, e.g. `[shared_preferences]` - [x] I [linked to at least one issue that this PR fixes] in the description above. - [x] I followed [the version and CHANGELOG instructions], using [semantic versioning] and the [repository CHANGELOG style], or I have commented below to indicate which documented exception this PR falls under[^1]. - [x] I updated/added any relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or I have commented below to indicate which [test exemption] this PR falls under[^1]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. --- .../InAppPurchaseStoreKit2PluginTests.swift | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchaseStoreKit2PluginTests.swift b/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchaseStoreKit2PluginTests.swift index 88abb2ff063d..6440b374e41b 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchaseStoreKit2PluginTests.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchaseStoreKit2PluginTests.swift @@ -181,6 +181,13 @@ final class InAppPurchase2PluginTests: XCTestCase { //TODO(louisehsu): Add testing for lower versions. @available(iOS 17.0, macOS 14.0, *) func testGetProductsWithStoreKitError() async throws { + let osVersion = ProcessInfo.processInfo.operatingSystemVersion + try XCTSkipIf( + // https://developer.apple.com/forums/thread/808030 + osVersion.majorVersion == 26 && osVersion.minorVersion == 2, + "Known StoreKitTest bug on Xcode 26.2 with setSimulatedError() when used on .loadProducts API" + ) + try await session.setSimulatedError( .generic(.networkError(URLError(.badURL))), forAPI: .loadProducts) @@ -217,6 +224,15 @@ final class InAppPurchase2PluginTests: XCTestCase { @available(iOS 17.0, macOS 14.0, *) func testFailedNetworkErrorPurchase() async throws { + let osVersion = ProcessInfo.processInfo.operatingSystemVersion + try XCTSkipIf( + // https://developer.apple.com/forums/thread/808030 + osVersion.majorVersion == 26 && osVersion.minorVersion == 2, + "Known StoreKitTest bug on Xcode 26.2 with setSimulatedError() when used on .loadProducts API" + ) + + // StoreKitTest aggressively caches products and transaction, which means sometimes it bypasses a simulated error. + session.clearTransactions() try await session.setSimulatedError( .generic(.networkError(URLError(.badURL))), forAPI: .loadProducts) let expectation = self.expectation(description: "products request should fail") @@ -290,7 +306,7 @@ final class InAppPurchase2PluginTests: XCTestCase { XCTFail("Purchase should NOT fail. Failed with \(error)") } } - await fulfillment(of: [expectation], timeout: 5) + await fulfillment(of: [expectation], timeout: 10) } func testDiscountedProductSuccess() async throws { @@ -303,7 +319,7 @@ final class InAppPurchase2PluginTests: XCTestCase { XCTFail("Purchase should NOT fail. Failed with \(error)") } } - await fulfillment(of: [expectation], timeout: 5) + await fulfillment(of: [expectation], timeout: 10) } func testPurchaseWithAppAccountToken() async throws { From 2234d68cfdabd45b052b3583fa7b0872feedc410 Mon Sep 17 00:00:00 2001 From: Matt Boetger Date: Wed, 25 Mar 2026 06:17:07 -0700 Subject: [PATCH 37/55] Use deprecated dependency until legacy renderer is removed (#11185) There is a crash due to play services removing the dependency for the legacy map renderer. This adds the necessary work around for users running into the crash. Fixes: https://github.com/flutter/flutter/issues/183087 ## Pre-Review Checklist --- .../google_maps_flutter_android/CHANGELOG.md | 4 ++++ .../android/src/main/AndroidManifest.xml | 3 +++ .../google_maps_flutter_android/pubspec.yaml | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md index f446b7d04984..d19b5b24f8c0 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.19.5 + +* Fixes a crash when using the legacy map renderer by adding the `org.apache.http.legacy` library. + ## 2.19.4 * Updates build files from Groovy to Kotlin. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/AndroidManifest.xml b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/AndroidManifest.xml index d1886695e47c..aca304ed7f76 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/AndroidManifest.xml +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/AndroidManifest.xml @@ -1,3 +1,6 @@ + + + diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index ad8200c76db7..748e38273331 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.19.4 +version: 2.19.5 environment: sdk: ^3.9.0 From 371106fe7d9864a157fc9366f57d0b0e64fab932 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Wed, 25 Mar 2026 09:56:21 -0400 Subject: [PATCH 38/55] [various] Add `unintended_html_in_doc_comment` to analysis options (#11303) Adds `unintended_html_in_doc_comment` to our analysis options, and fixes violations. This does a version bump even for cases where the comments being fixed are internal, because part of the goal here is to eliminate `pana` deductions on pub.dev, and that doesn't take into account whether the violation is client-facing or just package-developer-facing. Fixes https://github.com/flutter/flutter/issues/183860 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- analysis_options.yaml | 1 + .../camera_android_camerax/CHANGELOG.md | 4 ++ .../pigeons/camerax_library.dart | 2 +- .../camera_android_camerax/pubspec.yaml | 2 +- .../integration_test/helpers/mocks.dart | 47 +++++++++---------- .../in_app_purchase_android/CHANGELOG.md | 4 ++ .../pigeons/messages.dart | 6 +-- .../in_app_purchase_android/pubspec.yaml | 3 +- packages/metrics_center/CHANGELOG.md | 3 +- packages/metrics_center/lib/src/skiaperf.dart | 2 +- packages/metrics_center/pubspec.yaml | 2 +- packages/pigeon/CHANGELOG.md | 4 ++ packages/pigeon/lib/src/ast.dart | 4 +- .../pigeon/lib/src/dart/dart_generator.dart | 4 ++ packages/pigeon/lib/src/generator_tools.dart | 2 +- .../pigeon/lib/src/java/java_generator.dart | 2 + packages/pigeon/pubspec.yaml | 2 +- packages/rfw/CHANGELOG.md | 4 ++ .../lib/src/flutter/argument_decoders.dart | 5 +- packages/rfw/pubspec.yaml | 2 +- .../shared_preferences/CHANGELOG.md | 4 ++ .../lib/src/shared_preferences_async.dart | 10 ++-- .../shared_preferences/pubspec.yaml | 2 +- .../shared_preferences_android/CHANGELOG.md | 4 ++ .../pigeons/messages.dart | 12 ++--- .../pigeons/messages_async.dart | 16 +++---- .../shared_preferences_android/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- ..._preferences_async_platform_interface.dart | 14 +++--- .../pubspec.yaml | 2 +- .../webview_flutter_android/CHANGELOG.md | 4 ++ .../example/lib/legacy/web_view.dart | 2 +- .../webview_flutter_android/pubspec.yaml | 2 +- .../CHANGELOG.md | 4 ++ .../lib/src/legacy/types/webview_cookie.dart | 2 +- .../pubspec.yaml | 2 +- .../webview_flutter_wkwebview/CHANGELOG.md | 4 ++ .../example/lib/legacy/web_view.dart | 2 +- .../webview_flutter_wkwebview/pubspec.yaml | 2 +- .../tool/lib/src/common/package_command.dart | 10 ++-- script/tool/lib/src/publish_command.dart | 2 +- 41 files changed, 126 insertions(+), 84 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 7a97623b839f..5a160d9d8582 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -196,6 +196,7 @@ linter: - type_annotate_public_apis - type_init_formals - type_literal_in_constant_pattern + - unintended_html_in_doc_comment # DIFFERENT FROM FLUTTER/FLUTTER: Disabled due to an issue that has been fixed, so just hasn't been adopted there yet. - unawaited_futures # DIFFERENT FROM FLUTTER/FLUTTER: It's disabled there for "too many false positives"; that's not an issue here, and missing awaits have caused production issues in plugins. - unnecessary_await_in_return - unnecessary_brace_in_string_interps diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 579d3a87c9f6..c6a099c854d7 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.1+2 + +* Fixes dartdoc comments that accidentally used HTML. + ## 0.7.1+1 * Updates build files from Groovy to Kotlin. diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 2aa23c062bce..611157f65248 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -112,7 +112,7 @@ enum CameraStateType { unknown, } -/// The types (T) properly wrapped to be used as a LiveData. +/// The types (T) properly wrapped to be used as a `LiveData`. enum LiveDataSupportedType { cameraState, zoomState } /// Immutable class for describing the range of two integer values. diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 4125c02c589c..2dda62c4a153 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.7.1+1 +version: 0.7.1+2 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera_web/example/integration_test/helpers/mocks.dart b/packages/camera/camera_web/example/integration_test/helpers/mocks.dart index aafdcc0895ac..fa5c35214e9b 100644 --- a/packages/camera/camera_web/example/integration_test/helpers/mocks.dart +++ b/packages/camera/camera_web/example/integration_test/helpers/mocks.dart @@ -8,15 +8,12 @@ import 'dart:async'; import 'dart:js_interop'; import 'dart:ui'; -// ignore_for_file: implementation_imports import 'package:camera_web/src/camera.dart'; import 'package:camera_web/src/camera_service.dart'; import 'package:camera_web/src/shims/dart_js_util.dart'; import 'package:camera_web/src/types/types.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; -// TODO(srujzs): This is exported in `package:web` 0.6.0. Remove this when it is available. -import 'package:web/src/helpers/events/streams.dart'; import 'package:web/web.dart' as web; @GenerateNiceMocks(>[ @@ -80,12 +77,12 @@ class MockScreen { @JSExport() class MockScreenOrientation { - /// JSPromise Function(web.OrientationLockType orientation) + /// `JSPromise Function(web.OrientationLockType orientation)` JSFunction lock = (web.OrientationLockType orientation) { return Future.value().toJS; }.toJS; - /// void Function() + /// `void Function()` late JSFunction unlock; late web.OrientationType type; } @@ -97,7 +94,7 @@ class MockDocument { @JSExport() class MockElement { - /// JSPromise Function([FullscreenOptions options]) + /// `JSPromise Function([FullscreenOptions options])` JSFunction requestFullscreen = ([web.FullscreenOptions? options]) { return Future.value().toJS; }.toJS; @@ -110,30 +107,30 @@ class MockNavigator { @JSExport() class MockMediaDevices { - /// JSPromise Function([web.MediaStreamConstraints? constraints]) + /// `JSPromise Function([web.MediaStreamConstraints? constraints])` late JSFunction getUserMedia; - /// web.MediaTrackSupportedConstraints Function() + /// `web.MediaTrackSupportedConstraints Function()` late JSFunction getSupportedConstraints; - /// JSPromise> Function() + /// `JSPromise> Function()` late JSFunction enumerateDevices; } @JSExport() class MockMediaStreamTrack { - /// web.MediaTrackCapabilities Function(); + /// `web.MediaTrackCapabilities Function()` late JSFunction getCapabilities; - /// web.MediaTrackSettings Function() + /// `web.MediaTrackSettings Function()` JSFunction getSettings = () { return web.MediaTrackSettings(); }.toJS; - /// JSPromise Function([web.MediaTrackConstraints? constraints]) + /// `JSPromise Function([web.MediaTrackConstraints? constraints])` late JSFunction applyConstraints; - /// void Function() + /// `void Function()` JSFunction stop = () {}.toJS; } @@ -145,24 +142,24 @@ class MockVideoElement { @JSExport() class MockMediaRecorder { - /// void Function(String type, web.EventListener? callback, [JSAny options]) + /// `void Function(String type, web.EventListener? callback, [JSAny options])` JSFunction addEventListener = (String type, web.EventListener? callback, [JSAny? options]) {}.toJS; - /// void Function(String type, web.EventListener? callback, [JSAny options]) + /// `void Function(String type, web.EventListener? callback, [JSAny options])` JSFunction removeEventListener = (String type, web.EventListener? callback, [JSAny? options]) {}.toJS; - /// void Function([int timeslice]) + /// `void Function([int timeslice])` JSFunction start = ([int? timeslice]) {}.toJS; - /// void Function() + /// `void Function()` JSFunction pause = () {}.toJS; - /// void Function() + /// `void Function()` JSFunction resume = () {}.toJS; - /// void Function() + /// `void Function()` JSFunction stop = () {}.toJS; web.RecordingState state = 'inactive'; @@ -197,9 +194,9 @@ class FakeMediaError { final String message; } -/// A fake [ElementStream] that listens to the provided [_stream] on [listen]. +/// A fake [web.ElementStream] that listens to the provided [_stream] on [listen]. class FakeElementStream extends Fake - implements ElementStream { + implements web.ElementStream { FakeElementStream(this._stream); final Stream _stream; @@ -220,7 +217,7 @@ class FakeElementStream extends Fake } } -/// A fake [BlobEvent] that returns the provided blob [data]. +/// A fake [web.BlobEvent] that returns the provided blob [data]. @JSExport() class FakeBlobEvent { FakeBlobEvent(this.data); @@ -228,7 +225,7 @@ class FakeBlobEvent { final web.Blob? data; } -/// A fake [DomException] that returns the provided error [_name] and [_message]. +/// A fake [web.DomException] that returns the provided error [_name] and [_message]. @JSExport() class FakeErrorEvent { FakeErrorEvent(this.type, [this.message = '']); @@ -272,7 +269,7 @@ class MockEventStreamProvider extends Mock } @override - ElementStream forElement(web.Element? e, {bool? useCapture = false}) { + web.ElementStream forElement(web.Element? e, {bool? useCapture = false}) { return super.noSuchMethod( Invocation.method( #forElement, @@ -281,7 +278,7 @@ class MockEventStreamProvider extends Mock ), returnValue: FakeElementStream(Stream.empty()), ) - as ElementStream; + as web.ElementStream; } } diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md index e1c8438aa111..88c613231c8a 100644 --- a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.0+10 + +* Fixes dartdoc comments that accidentally used HTML. + ## 0.4.0+9 * Updates build files from Groovy to Kotlin. diff --git a/packages/in_app_purchase/in_app_purchase_android/pigeons/messages.dart b/packages/in_app_purchase/in_app_purchase_android/pigeons/messages.dart index 90f987cc8dfc..c1e04bffdeb7 100644 --- a/packages/in_app_purchase/in_app_purchase_android/pigeons/messages.dart +++ b/packages/in_app_purchase/in_app_purchase_android/pigeons/messages.dart @@ -447,12 +447,12 @@ abstract class InAppPurchaseApi { @FlutterApi() abstract class InAppPurchaseCallbackApi { - /// Called for BillingClientStateListener#onBillingServiceDisconnected(). + /// Called for `BillingClientStateListener#onBillingServiceDisconnected()`. void onBillingServiceDisconnected(int callbackHandle); - /// Called for PurchasesUpdatedListener#onPurchasesUpdated(BillingResult, List). + /// Called for `PurchasesUpdatedListener#onPurchasesUpdated(BillingResult, List)`. void onPurchasesUpdated(PlatformPurchasesResponse update); - /// Called for UserChoiceBillingListener#userSelectedAlternativeBilling(UserChoiceDetails). + /// Called for `UserChoiceBillingListener#userSelectedAlternativeBilling(UserChoiceDetails)`. void userSelectedalternativeBilling(PlatformUserChoiceDetails details); } diff --git a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml index e6fc2a4efa5b..9eb1a5547583 100644 --- a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml @@ -2,8 +2,7 @@ name: in_app_purchase_android description: An implementation for the Android platform of the Flutter `in_app_purchase` plugin. This uses the Android BillingClient APIs. repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 - -version: 0.4.0+9 +version: 0.4.0+10 environment: sdk: ^3.9.0 diff --git a/packages/metrics_center/CHANGELOG.md b/packages/metrics_center/CHANGELOG.md index 59359e9fef0b..6f1d561d244b 100644 --- a/packages/metrics_center/CHANGELOG.md +++ b/packages/metrics_center/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.0.15 +* Fixes dartdoc comments that accidentally used HTML. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 1.0.14 diff --git a/packages/metrics_center/lib/src/skiaperf.dart b/packages/metrics_center/lib/src/skiaperf.dart index caa57319cd49..7f3b98afee6b 100644 --- a/packages/metrics_center/lib/src/skiaperf.dart +++ b/packages/metrics_center/lib/src/skiaperf.dart @@ -126,7 +126,7 @@ class SkiaPerfPoint extends MetricPoint { ); } - /// In the format of '/' such as 'flutter/flutter' or + /// In the format of `/` such as 'flutter/flutter' or /// 'flutter/engine'. final String githubRepo; diff --git a/packages/metrics_center/pubspec.yaml b/packages/metrics_center/pubspec.yaml index 89e52f6e4e14..04a69d21304f 100644 --- a/packages/metrics_center/pubspec.yaml +++ b/packages/metrics_center/pubspec.yaml @@ -1,5 +1,5 @@ name: metrics_center -version: 1.0.14 +version: 1.0.15 description: Support multiple performance metrics sources/formats and destinations. repository: https://github.com/flutter/packages/tree/main/packages/metrics_center diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index a0066e2b1c3b..d14e07c1b4b4 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 26.3.1 + +* Fixes dartdoc comments that accidentally used HTML. + ## 26.3.0 * Optimizes and improves data class equality and hashing. diff --git a/packages/pigeon/lib/src/ast.dart b/packages/pigeon/lib/src/ast.dart index b51f66bb67ad..aba0e0891cae 100644 --- a/packages/pigeon/lib/src/ast.dart +++ b/packages/pigeon/lib/src/ast.dart @@ -496,13 +496,13 @@ class TypeDeclaration { associatedProxyApi = null, typeArguments = const []; - /// The base name of the [TypeDeclaration] (ex 'Foo' to 'Foo?'). + /// The base name of the [TypeDeclaration] (ex `Foo` to `Foo?`). final String baseName; /// Whether the declaration represents 'void'. bool get isVoid => baseName == 'void'; - /// Whether the type arguments to the entity (ex 'Bar' to 'Foo?'). + /// Whether the type arguments to the entity (ex `Bar` to `Foo?`). final List typeArguments; /// Whether the type is nullable. diff --git a/packages/pigeon/lib/src/dart/dart_generator.dart b/packages/pigeon/lib/src/dart/dart_generator.dart index 9d1f76f538aa..fb65af36f161 100644 --- a/packages/pigeon/lib/src/dart/dart_generator.dart +++ b/packages/pigeon/lib/src/dart/dart_generator.dart @@ -538,6 +538,7 @@ class DartGenerator extends StructuredGenerator { /// Writes the code for host [Api], [api]. /// Example: + /// ```dart /// class FooCodec extends StandardMessageCodec {...} /// /// abstract class Foo { @@ -545,6 +546,7 @@ class DartGenerator extends StructuredGenerator { /// int add(int x, int y); /// static void setUp(Foo api, {BinaryMessenger? binaryMessenger}) {...} /// } + /// ``` @override void writeFlutterApi( InternalDartOptions generatorOptions, @@ -614,6 +616,7 @@ class DartGenerator extends StructuredGenerator { /// Writes the code for host [Api], [api]. /// Example: + /// ```dart /// class FooCodec extends StandardMessageCodec {...} /// /// class Foo { @@ -621,6 +624,7 @@ class DartGenerator extends StructuredGenerator { /// static const MessageCodec codec = FooCodec(); /// Future add(int x, int y) async {...} /// } + /// ``` /// /// Messages will be sent and received in a list. /// diff --git a/packages/pigeon/lib/src/generator_tools.dart b/packages/pigeon/lib/src/generator_tools.dart index b224fa185a5f..2890bb571542 100644 --- a/packages/pigeon/lib/src/generator_tools.dart +++ b/packages/pigeon/lib/src/generator_tools.dart @@ -15,7 +15,7 @@ import 'generator.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '26.3.0'; +const String pigeonVersion = '26.3.1'; /// Default plugin package name. const String defaultPluginPackageName = 'dev.flutter.pigeon'; diff --git a/packages/pigeon/lib/src/java/java_generator.dart b/packages/pigeon/lib/src/java/java_generator.dart index a1cedf755fad..4b7f792dc1c3 100644 --- a/packages/pigeon/lib/src/java/java_generator.dart +++ b/packages/pigeon/lib/src/java/java_generator.dart @@ -962,6 +962,7 @@ if (wrapped == null) { /// Writes the code for a flutter [Api], [api]. /// Example: + /// ```java /// public static final class Foo { /// public Foo(BinaryMessenger argBinaryMessenger) {...} /// public interface Result { @@ -969,6 +970,7 @@ if (wrapped == null) { /// } /// public int add(int x, int y, Result result) {...} /// } + /// ``` @override void writeFlutterApi( InternalJavaOptions generatorOptions, diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index d674b7f4114e..0fc8a2cdd64c 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,7 +2,7 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22 -version: 26.3.0 # This must match the version in lib/src/generator_tools.dart +version: 26.3.1 # This must match the version in lib/src/generator_tools.dart environment: sdk: ^3.9.0 diff --git a/packages/rfw/CHANGELOG.md b/packages/rfw/CHANGELOG.md index f9538956d3c9..2aa690d15f0e 100644 --- a/packages/rfw/CHANGELOG.md +++ b/packages/rfw/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.3 + +* Fixes dartdoc comments that accidentally used HTML. + ## 1.1.2 * Removes outdated call for feedback from the README. diff --git a/packages/rfw/lib/src/flutter/argument_decoders.dart b/packages/rfw/lib/src/flutter/argument_decoders.dart index b40702fc7d23..8da61794e49c 100644 --- a/packages/rfw/lib/src/flutter/argument_decoders.dart +++ b/packages/rfw/lib/src/flutter/argument_decoders.dart @@ -614,8 +614,9 @@ class ArgumentDecoders { /// The first argument must be the `values` list for that enum; this is the /// list of values that is searched. /// - /// For example, `enumValue(TileMode.values, source, ['tileMode']) ?? - /// TileMode.clamp` reads the `tileMode` key of `source`, and looks for the + /// For example, + /// `enumValue(TileMode.values, source, ['tileMode']) ?? TileMode.clamp` + /// reads the `tileMode` key of `source`, and looks for the /// first match in [TileMode.values], defaulting to [TileMode.clamp] if /// nothing matches; thus, the string `mirror` would return [TileMode.mirror]. static T? enumValue(List values, DataSource source, List key) { diff --git a/packages/rfw/pubspec.yaml b/packages/rfw/pubspec.yaml index 72341a9f8462..f4233d22e326 100644 --- a/packages/rfw/pubspec.yaml +++ b/packages/rfw/pubspec.yaml @@ -2,7 +2,7 @@ name: rfw description: "Remote Flutter widgets: a library for rendering declarative widget description files at runtime." repository: https://github.com/flutter/packages/tree/main/packages/rfw issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+rfw%22 -version: 1.1.2 +version: 1.1.3 environment: sdk: ^3.9.0 diff --git a/packages/shared_preferences/shared_preferences/CHANGELOG.md b/packages/shared_preferences/shared_preferences/CHANGELOG.md index 5cf4a09e2cbe..07f50a0778dd 100644 --- a/packages/shared_preferences/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.5.5 + +* Fixes dartdoc comments that accidentally used HTML. + ## 2.5.4 * Updates dependencies for the `shared_preferences_tool` DevTools extension and fixes related deprecations. diff --git a/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart b/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart index d6d9e326708f..5fd079d7a963 100644 --- a/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart +++ b/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart @@ -61,31 +61,31 @@ class SharedPreferencesAsync { } /// Reads a value from the platform, throwing a [TypeError] if the value is - /// not a bool. + /// not a `bool`. Future getBool(String key) async { return _platform.getBool(key, _options); } /// Reads a value from the platform, throwing a [TypeError] if the value is - /// not an int. + /// not an `int`. Future getInt(String key) async { return _platform.getInt(key, _options); } /// Reads a value from the platform, throwing a [TypeError] if the value is - /// not a double. + /// not a `double`. Future getDouble(String key) async { return _platform.getDouble(key, _options); } /// Reads a value from the platform, throwing a [TypeError] if the value is - /// not a String. + /// not a `String`. Future getString(String key) async { return _platform.getString(key, _options); } /// Reads a list of string values from the platform, throwing a [TypeError] - /// if the value not a List. + /// if the value is not a `List`. Future?> getStringList(String key) async { return _platform.getStringList(key, _options); } diff --git a/packages/shared_preferences/shared_preferences/pubspec.yaml b/packages/shared_preferences/shared_preferences/pubspec.yaml index d3c8a52238ff..ef4ffbc6d62d 100644 --- a/packages/shared_preferences/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android. repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.5.4 +version: 2.5.5 environment: sdk: ^3.9.0 diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index 32bfb5ee185f..117b363132d6 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.4.23 + +* Fixes dartdoc comments that accidentally used HTML. + ## 2.4.22 * Updates build files from Groovy to Kotlin. diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart index c42810f609f4..282e1b547aab 100644 --- a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart +++ b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart @@ -23,27 +23,27 @@ abstract class SharedPreferencesApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool remove(String key); - /// Adds property to shared preferences data set of type bool. + /// Adds property to shared preferences data set of type `bool`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool setBool(String key, bool value); - /// Adds property to shared preferences data set of type String. + /// Adds property to shared preferences data set of type `String`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool setString(String key, String value); - /// Adds property to shared preferences data set of type int. + /// Adds property to shared preferences data set of type `int`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool setInt(String key, int value); - /// Adds property to shared preferences data set of type double. + /// Adds property to shared preferences data set of type `double`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool setDouble(String key, double value); - /// Adds property to shared preferences data set of type List. + /// Adds property to shared preferences data set of type `List`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool setEncodedStringList(String key, String value); - /// Adds property to shared preferences data set of type List. + /// Adds property to shared preferences data set of type `List`. /// /// Deprecated, this is only here for testing purposes. @TaskQueue(type: TaskQueueType.serialBackgroundThread) diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/messages_async.dart b/packages/shared_preferences/shared_preferences_android/pigeons/messages_async.dart index 9b32c0c2a1dc..a0b0ec0b8ed1 100644 --- a/packages/shared_preferences/shared_preferences_android/pigeons/messages_async.dart +++ b/packages/shared_preferences/shared_preferences_android/pigeons/messages_async.dart @@ -50,11 +50,11 @@ class StringListResult { @HostApi() abstract class SharedPreferencesAsyncApi { - /// Adds property to shared preferences data set of type bool. + /// Adds property to shared preferences data set of type `bool`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) void setBool(String key, bool value, SharedPreferencesPigeonOptions options); - /// Adds property to shared preferences data set of type String. + /// Adds property to shared preferences data set of type `String`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) void setString( String key, @@ -62,11 +62,11 @@ abstract class SharedPreferencesAsyncApi { SharedPreferencesPigeonOptions options, ); - /// Adds property to shared preferences data set of type int. + /// Adds property to shared preferences data set of type `int`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) void setInt(String key, int value, SharedPreferencesPigeonOptions options); - /// Adds property to shared preferences data set of type double. + /// Adds property to shared preferences data set of type `double`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) void setDouble( String key, @@ -74,7 +74,7 @@ abstract class SharedPreferencesAsyncApi { SharedPreferencesPigeonOptions options, ); - /// Adds property to shared preferences data set of type List. + /// Adds property to shared preferences data set of type `List`. @TaskQueue(type: TaskQueueType.serialBackgroundThread) void setEncodedStringList( String key, @@ -82,7 +82,7 @@ abstract class SharedPreferencesAsyncApi { SharedPreferencesPigeonOptions options, ); - /// Adds property to shared preferences data set of type List. + /// Adds property to shared preferences data set of type `List`. /// /// Deprecated, this is only here for testing purposes. @TaskQueue(type: TaskQueueType.serialBackgroundThread) @@ -108,14 +108,14 @@ abstract class SharedPreferencesAsyncApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) int? getInt(String key, SharedPreferencesPigeonOptions options); - /// Gets individual List value stored with [key], if any. + /// Gets individual `List` value stored with [key], if any. @TaskQueue(type: TaskQueueType.serialBackgroundThread) List? getPlatformEncodedStringList( String key, SharedPreferencesPigeonOptions options, ); - /// Gets the JSON-encoded List value stored with [key], if any. + /// Gets the JSON-encoded `List` value stored with [key], if any. @TaskQueue(type: TaskQueueType.serialBackgroundThread) StringListResult? getStringList( String key, diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index 67998482ecde..93d6a4dcbcf1 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_android description: Android implementation of the shared_preferences plugin repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.4.22 +version: 2.4.23 environment: sdk: ^3.9.0 diff --git a/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md b/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md index 49dd411c6dbb..b986626e8f9e 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.4.2 +* Fixes dartdoc comments that accidentally used HTML. * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. ## 2.4.1 diff --git a/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_async_platform_interface.dart b/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_async_platform_interface.dart index f86e69dfd3aa..77dec7f04d10 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_async_platform_interface.dart +++ b/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_async_platform_interface.dart @@ -38,40 +38,40 @@ abstract base class SharedPreferencesAsyncPlatform { /// Stores the int [value] associated with the [key]. Future setInt(String key, int value, SharedPreferencesOptions options); - /// Stores the List [value] associated with the [key]. + /// Stores the `List` [value] associated with the [key]. Future setStringList( String key, List value, SharedPreferencesOptions options, ); - /// Retrieves the String [value] associated with the [key], if any. + /// Retrieves the `String` [value] associated with the [key], if any. /// /// Throws a [TypeError] if the returned type is not a String. /// May return null for unsupported types. Future getString(String key, SharedPreferencesOptions options); - /// Retrieves the bool [value] associated with the [key], if any. + /// Retrieves the `bool` [value] associated with the [key], if any. /// /// Throws a [TypeError] if the returned type is not a bool. /// May return null for unsupported types. Future getBool(String key, SharedPreferencesOptions options); - /// Retrieves the double [value] associated with the [key], if any. + /// Retrieves the `double` [value] associated with the [key], if any. /// /// Throws a [TypeError] if the returned type is not a double. /// May return null for unsupported types. Future getDouble(String key, SharedPreferencesOptions options); - /// Retrieves the int [value] associated with the [key], if any. + /// Retrieves the `int` [value] associated with the [key], if any. /// /// Throws a [TypeError] if the returned type is not an int. /// May return null for unsupported types. Future getInt(String key, SharedPreferencesOptions options); - /// Retrieves the List [value] associated with the [key], if any. + /// Retrieves the `List` [value] associated with the [key], if any. /// - /// Throws a [TypeError] if the returned type is not a List. + /// Throws a [TypeError] if the returned type is not a `List`. /// May return null for unsupported types. Future?> getStringList( String key, diff --git a/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml b/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml index c1156c115374..5d470626f56a 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_platform_interface description: A common platform interface for the shared_preferences plugin. repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_platform_interface issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.4.1 +version: 2.4.2 environment: sdk: ^3.9.0 diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 832b6a95711e..92357d7a3e36 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.10.15 + +* Fixes dartdoc comments that accidentally used HTML. + ## 4.10.14 * Updates build files from Groovy to Kotlin. diff --git a/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart b/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart index 5b40feac0142..06ecd148e869 100644 --- a/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart +++ b/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart @@ -202,7 +202,7 @@ class WebView extends StatefulWidget { /// /// To debug WebViews on iOS: /// - Enable developer options (Open Safari, go to Preferences -> Advanced and make sure "Show Develop Menu in Menubar" is on.) - /// - From the Menu-bar (of Safari) select Develop -> iPhone Simulator -> + /// - From the Menu-bar (of Safari) select Develop -> iPhone Simulator -> your webview page /// /// By default `debuggingEnabled` is false. final bool debuggingEnabled; diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index 1657eeb4af99..30ff682994ac 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 4.10.14 +version: 4.10.15 environment: sdk: ^3.9.0 diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index eb9d926c23a7..72e84d87c3d1 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.15.1 + +* Fixes dartdoc comments that accidentally used HTML. + ## 2.15.0 * Adds support to retrieve WebView cookies. See `PlatformWebViewCookieManager.getCookies`. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart index 022d8d63821c..aae8984a9089 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart @@ -38,7 +38,7 @@ class WebViewCookie { /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1 final String path; - /// Serializes the [WebViewCookie] to a Map. + /// Serializes the [WebViewCookie] to a `Map`. Map toJson() { return { 'name': name, diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml index 199a12801d25..6528399fd0e0 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/webview_flutt issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.15.0 +version: 2.15.1 environment: sdk: ^3.9.0 diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 5a4511008367..efaab280aef5 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.24.2 + +* Fixes dartdoc comments that accidentally used HTML. + ## 3.24.1 * Updates platform views on iOS to only have a weak reference to the native view. This is a diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart index cd98cb6119e4..ebf848c1b58a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart @@ -193,7 +193,7 @@ class WebView extends StatefulWidget { /// /// To debug WebViews on iOS: /// - Enable developer options (Open Safari, go to Preferences -> Advanced and make sure "Show Develop Menu in Menubar" is on.) - /// - From the Menu-bar (of Safari) select Develop -> iPhone Simulator -> + /// - From the Menu-bar (of Safari) select Develop -> iPhone Simulator -> your webview page /// /// By default `debuggingEnabled` is false. final bool debuggingEnabled; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index d61c43b4012a..7330bbae7e60 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.24.1 +version: 3.24.2 environment: sdk: ^3.9.0 diff --git a/script/tool/lib/src/common/package_command.dart b/script/tool/lib/src/common/package_command.dart index 77f91c069bbf..838256acb7e0 100644 --- a/script/tool/lib/src/common/package_command.dart +++ b/script/tool/lib/src/common/package_command.dart @@ -253,27 +253,27 @@ abstract class PackageCommand extends Command { return gitDir; } - /// Convenience accessor for boolean arguments. + /// Convenience accessor for `bool` arguments. bool getBoolArg(String key) { return (argResults![key] as bool?) ?? false; } - /// Convenience accessor for boolean arguments. + /// Convenience accessor for nullable `bool` arguments. bool? getNullableBoolArg(String key) { return argResults![key] as bool?; } - /// Convenience accessor for String arguments. + /// Convenience accessor for `String` arguments. String getStringArg(String key) { return (argResults![key] as String?) ?? ''; } - /// Convenience accessor for String arguments. + /// Convenience accessor for nullable `String` arguments. String? getNullableStringArg(String key) { return argResults![key] as String?; } - /// Convenience accessor for List arguments. + /// Convenience accessor for `List` arguments. List getStringListArg(String key) { // Clone the list so that if a caller modifies the result it won't change // the actual arguments list for future queries. diff --git a/script/tool/lib/src/publish_command.dart b/script/tool/lib/src/publish_command.dart index d043da0a60c3..c45d847b3d19 100644 --- a/script/tool/lib/src/publish_command.dart +++ b/script/tool/lib/src/publish_command.dart @@ -39,7 +39,7 @@ class _RemoteInfo { /// /// 1. Checks for any modified files in git and refuses to publish if there's an /// issue. -/// 2. Tags the release with the format -v. +/// 2. Tags the release with the format `-v`. /// 3. Pushes the release to a remote. /// /// Both 2 and 3 are optional, see `plugin_tools help publish` for full From 5909bdde6090af287f41805f4ec0d6b45c28da51 Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Wed, 25 Mar 2026 07:00:34 -0700 Subject: [PATCH 39/55] [ci] add more permissions for create-pull-request (#11302) It seems like create pull request also needs content write permission image https://github.com/marketplace/actions/create-pull-request current workflow error ``` /usr/bin/git push --force-with-lease origin go_router-23310566202-1:refs/heads/go_router-23310566202-1 remote: Permission to flutter/packages.git denied to github-actions[bot]. fatal: unable to access 'https://github.com/flutter/packages/': The requested URL returned error: 403 Error: The process '/usr/bin/git' failed with exit code 128 ``` https://github.com/flutter/packages/actions/runs/23310566202/job/67796535425#step:3:884 ## Pre-Review Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [ ] I read the [Tree Hygiene] page, which explains my responsibilities. - [ ] I read and followed the [relevant style guides] and ran [the auto-formatter]. - [ ] I signed the [CLA]. - [ ] The title of the PR starts with the name of the package surrounded by square brackets, e.g. `[shared_preferences]` - [ ] I [linked to at least one issue that this PR fixes] in the description above. - [ ] I followed [the version and CHANGELOG instructions], using [semantic versioning] and the [repository CHANGELOG style], or I have commented below to indicate which documented exception this PR falls under[^1]. - [ ] I updated/added any relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or I have commented below to indicate which [test exemption] this PR falls under[^1]. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. [Contributor Guide]: https://github.com/flutter/packages/blob/main/CONTRIBUTING.md [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [Tree Hygiene]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md [relevant style guides]: https://github.com/flutter/packages/blob/main/CONTRIBUTING.md#style [the auto-formatter]: https://github.com/flutter/packages/blob/main/script/tool/README.md#format-code [CLA]: https://cla.developers.google.com/ [Discord]: https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md [linked to at least one issue that this PR fixes]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#overview [the version and CHANGELOG instructions]: https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#version-and-changelog-updates [semantic versioning]: https://dart.dev/tools/pub/versioning#semantic-versions [repository CHANGELOG style]: https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog-style [test exemption]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#tests --- .github/workflows/batch_release_pr.yml | 4 +++- .github/workflows/sync_release_pr.yml | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/batch_release_pr.yml b/.github/workflows/batch_release_pr.yml index 43d84564242c..032557912210 100644 --- a/.github/workflows/batch_release_pr.yml +++ b/.github/workflows/batch_release_pr.yml @@ -45,7 +45,9 @@ jobs: if: needs.create_batch_release_branch.outputs.branch_created == 'true' runs-on: ubuntu-latest permissions: - pull-requests: write # Grants write permission to create a PR. + # The create-pull-request action needs both content and pull-requests permissions. + pull-requests: write + contents: write env: BRANCH_NAME: ${{ github.event.client_payload.package }}-${{ github.run_id }}-${{ github.run_attempt }} steps: diff --git a/.github/workflows/sync_release_pr.yml b/.github/workflows/sync_release_pr.yml index a53436ce0ffd..6cb19bb4edbc 100644 --- a/.github/workflows/sync_release_pr.yml +++ b/.github/workflows/sync_release_pr.yml @@ -9,6 +9,10 @@ on: jobs: create_sync_pr: runs-on: ubuntu-latest + permissions: + # The create-pull-request action needs both content and pull-requests permissions. + contents: write + pull-requests: write steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd From a3d306f970f0435da3ebd343b430e0e63ace1614 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 25 Mar 2026 14:59:13 -0400 Subject: [PATCH 40/55] Manual roll Flutter from dd64978dfae1 to 82d96ef98a33 (89 revisions) (#11345) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Manual roll Flutter from dd64978dfae1 to 82d96ef98a33 (89 revisions) Manual roll requested by tarrinneal@google.com https://github.com/flutter/flutter/compare/dd64978dfae1...82d96ef98a33 2026-03-24 116356835+AbdeMohlbi@users.noreply.github.com Fix RenderStack's documentation (flutter/flutter#183822) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from a465876e3156 to f4e59f82dc69 (4 revisions) (flutter/flutter#184082) 2026-03-24 30870216+gaaclarke@users.noreply.github.com Refactor: Removes Geometry field from ColorSourceContents (flutter/flutter#183952) 2026-03-24 katelovett@google.com Refactor layout dimensions (flutter/flutter#184066) 2026-03-24 abadasamuelosp@gmail.com feat: Add --base-href support to flutter run for web (flutter/flutter#182709) 2026-03-24 43498643+mkucharski17@users.noreply.github.com Add LeanCode and contributors to AUTHORS (flutter/flutter#182997) 2026-03-24 dacoharkes@google.com [tools] Make sure `assemble` has a pubspec as cwd (flutter/flutter#184067) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from bf4f2763b6e6 to a465876e3156 (5 revisions) (flutter/flutter#184068) 2026-03-24 evanwall@buffalo.edu fix gaussian blur getting clipped with negative scale (flutter/flutter#184037) 2026-03-24 34871572+gmackall@users.noreply.github.com Keep glyphs for variable fonts (flutter/flutter#183857) 2026-03-24 dacoharkes@google.com Mark `IconData` `final` and `@mustBeConst` (flutter/flutter#181345) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from 62841a512deb to bf4f2763b6e6 (1 revision) (flutter/flutter#184062) 2026-03-24 ahmedsameha1@gmail.com Use Color.a instead of Color.alpha to assert the opacity of the color… (flutter/flutter#184003) 2026-03-24 engine-flutter-autoroll@skia.org Roll Dart SDK from f504293598f2 to b08bd0a3ee39 (1 revision) (flutter/flutter#184054) 2026-03-24 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from x9x76ERXhrt0Q3zKf... to M3sjWggTQmP2AD4bS... (flutter/flutter#184053) 2026-03-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 788e347194a6 to f504293598f2 (1 revision) (flutter/flutter#184048) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from fb6acef456ea to 62841a512deb (2 revisions) (flutter/flutter#184046) 2026-03-24 dkwingsmt@users.noreply.github.com [Slider] Remove value indicator painter when animation is dismissed (flutter/flutter#182991) 2026-03-24 engine-flutter-autoroll@skia.org Manual roll ICU from 7971660ba630 to ee5f27adc28b (1 revision) (flutter/flutter#184041) 2026-03-23 ishaquehassan@gmail.com Add scrollPadding property to DropdownMenu (flutter/flutter#183109) 2026-03-23 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183895) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from c2b58922e37d to fb6acef456ea (1 revision) (flutter/flutter#184033) 2026-03-23 engine-flutter-autoroll@skia.org Roll Dart SDK from b172bea4f008 to 788e347194a6 (2 revisions) (flutter/flutter#184035) 2026-03-23 codefu@google.com chore: deflake Linux_android_emu android_display_cutout (flutter/flutter#183522) 2026-03-23 vs.ashoknarayan@gmail.com Add note about gclient sync network failures and workaround (flutter/flutter#183794) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from a81bf411a5cb to c2b58922e37d (3 revisions) (flutter/flutter#184016) 2026-03-23 1961493+harryterkelsen@users.noreply.github.com refactor(web): use positive logic and platform defaults for accessibility features (flutter/flutter#183907) 2026-03-23 jhy03261997@gmail.com [android][a11y] set "android.widget.ProgressBar" according to semantics role (flutter/flutter#183897) 2026-03-23 mr-peipei@web.de Add progress bar to artifact downloads (flutter/flutter#182836) 2026-03-23 116356835+AbdeMohlbi@users.noreply.github.com Add windows instruction to `Forcing Flutter Tools Snapshot Regeneration` (flutter/flutter#183977) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from 42a6eb1dc5c9 to a81bf411a5cb (3 revisions) (flutter/flutter#184007) 2026-03-23 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from q1xqlQPxq8a3JTA4P... to x9x76ERXhrt0Q3zKf... (flutter/flutter#184006) 2026-03-23 engine-flutter-autoroll@skia.org Roll Dart SDK from ef45f179526f to b172bea4f008 (1 revision) (flutter/flutter#184004) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from 964c3b33fd73 to 42a6eb1dc5c9 (1 revision) (flutter/flutter#184001) 2026-03-23 matt.kosarek@canonical.com Update the windowing docs per the latest wording found while doing Satellites (flutter/flutter#183748) 2026-03-22 48625061+muradhossin@users.noreply.github.com Add assert for mutually exclusive errorBuilder and errorText (flutter/flutter#183901) 2026-03-22 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from Yc7Ijp2ySjG841xha... to q1xqlQPxq8a3JTA4P... (flutter/flutter#183991) 2026-03-21 engine-flutter-autoroll@skia.org Roll Skia from 812822ad5caa to 964c3b33fd73 (1 revision) (flutter/flutter#183982) 2026-03-21 engine-flutter-autoroll@skia.org Roll Dart SDK from c831a55e2fcc to ef45f179526f (1 revision) (flutter/flutter#183973) 2026-03-21 engine-flutter-autoroll@skia.org Roll Skia from 569cc0475162 to 812822ad5caa (2 revisions) (flutter/flutter#183970) 2026-03-20 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from ilAIAVzu4xmeb078x... to Yc7Ijp2ySjG841xha... (flutter/flutter#183956) 2026-03-20 engine-flutter-autoroll@skia.org Roll Skia from 79a14289c60d to 569cc0475162 (3 revisions) (flutter/flutter#183954) 2026-03-20 engine-flutter-autoroll@skia.org Roll Dart SDK from c88a8008e93b to c831a55e2fcc (3 revisions) (flutter/flutter#183953) 2026-03-20 engine-flutter-autoroll@skia.org Roll Skia from 8d4c76b92050 to 79a14289c60d (4 revisions) (flutter/flutter#183949) ... --- .ci/flutter_master.version | 2 +- .../example/shared/RunnerTests/Stubs.m | 8 +- ...ViewFlutterWKWebViewExternalAPITests.swift | 98 +++++++++---------- .../ios/Runner.xcodeproj/project.pbxproj | 14 +-- .../xcshareddata/xcschemes/Runner.xcscheme | 2 + .../RunnerTests/RunnerTests-Bridging-Header.h | 5 - .../ios/RunnerTests/TemporaryObjCStub.h | 24 ----- .../ios/RunnerTests/TemporaryObjCStub.m | 65 ------------ 8 files changed, 58 insertions(+), 160 deletions(-) delete mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/RunnerTests-Bridging-Header.h delete mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.h delete mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.m diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 70f45c991e52..21aae04dd65f 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -dd64978dfae115cdac5f77e8f47030082902eaf5 +82d96ef98a33f3f35dabf7795e701f8a4d2d4bec 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 51a31d9fc286..b3e0891d3f62 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,9 +607,11 @@ - (void)registerViewFactory:(nonnull NSObject *)fact } } -// TODO(stuartmorgan): Make this NSObject once -// FlutterSceneLifeCycleDelegate has reached stable. -- (void)addSceneDelegate:(nonnull NSObject *)delegate { +- (void)addSceneDelegate:(nonnull NSObject *)delegate { +} + +- (nullable NSObject *)valuePublishedByPlugin:(nonnull NSString *)pluginKey { + return nil; } @end 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 aa458aa30cda..0e28185185cd 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.swift @@ -97,71 +97,69 @@ class TestFlutterTextureRegistry: NSObject, FlutterTextureRegistry { } } -// 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 +class TestFlutterPluginRegistrar: NSObject, FlutterPluginRegistrar { + var plugin: WebViewFlutterPlugin? = nil - #if os(iOS) - var viewController: UIViewController? - - func messenger() -> FlutterBinaryMessenger { - return TestBinaryMessenger() - } + #if os(iOS) + var viewController: UIViewController? - func textures() -> FlutterTextureRegistry { - return TestFlutterTextureRegistry() - } + func messenger() -> FlutterBinaryMessenger { + return TestBinaryMessenger() + } - func addApplicationDelegate(_ delegate: FlutterPlugin) { + func textures() -> FlutterTextureRegistry { + return TestFlutterTextureRegistry() + } - } + func addApplicationDelegate(_ delegate: FlutterPlugin) { - func register( - _ factory: FlutterPlatformViewFactory, withId factoryId: String, - gestureRecognizersBlockingPolicy: FlutterPlatformViewGestureRecognizersBlockingPolicy - ) { - } + } - func addSceneDelegate(_ delegate: any FlutterSceneLifeCycleDelegate) { - } - #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, fromPackage package: String) -> String { - return "" - } + func lookupKey(forAsset asset: String) -> String { + return "" } -#endif + + func lookupKey(forAsset asset: String, fromPackage package: String) -> String { + return "" + } + + func valuePublished(byPlugin: String) -> NSObject? { + return nil + } +} 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 39f911e5915c..e894f75ea1f8 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,7 +8,6 @@ /* 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 */; }; 8F0E23522EEB5D6B002AB342 /* ColorProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F0E23512EEB5D6B002AB342 /* ColorProxyAPITests.swift */; }; @@ -88,8 +87,6 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 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 = ""; }; 68BDCAE923C3F7CB00D9C032 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 68BDCAED23C3F7CB00D9C032 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -131,7 +128,6 @@ 8F1488E02D2DE27000191744 /* WebViewConfigurationProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WebViewConfigurationProxyAPITests.swift; path = ../../darwin/Tests/WebViewConfigurationProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8F1488E12D2DE27000191744 /* WebViewProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WebViewProxyAPITests.swift; path = ../../darwin/Tests/WebViewProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8F1489002D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponseProxyAPITests.swift; path = ../../darwin/Tests/AuthenticationChallengeResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; - 8F66D9D72D1362BE000835F9 /* RunnerTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RunnerTests-Bridging-Header.h"; sourceTree = ""; }; 8FEC64812DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GetTrustResultResponseProxyAPITests.swift; path = ../../darwin/Tests/GetTrustResultResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FEC64822DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecCertificateProxyAPITests.swift; path = ../../darwin/Tests/SecCertificateProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FEC64832DA2C6DC00C48569 /* SecTrustProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecTrustProxyAPITests.swift; path = ../../darwin/Tests/SecTrustProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; @@ -179,8 +175,6 @@ isa = PBXGroup; children = ( 8F0E23512EEB5D6B002AB342 /* ColorProxyAPITests.swift */, - 33C8DAD92E8D711500A9B7CA /* TemporaryObjCStub.h */, - 33C8DADA2E8D711500A9B7CA /* TemporaryObjCStub.m */, 8F0EDFD22E1F4967001938E6 /* ProxyAPIRegistrarTests.swift */, 8FEC64812DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift */, 8FEC64822DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift */, @@ -217,7 +211,6 @@ 8F1488E02D2DE27000191744 /* WebViewConfigurationProxyAPITests.swift */, 8F1488E12D2DE27000191744 /* WebViewProxyAPITests.swift */, 68BDCAED23C3F7CB00D9C032 /* Info.plist */, - 8F66D9D72D1362BE000835F9 /* RunnerTests-Bridging-Header.h */, ); path = RunnerTests; sourceTree = ""; @@ -397,7 +390,7 @@ ); mainGroup = 97C146E51CF9000F007C117D; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; @@ -493,7 +486,6 @@ 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 */, @@ -584,7 +576,6 @@ ); PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "RunnerTests/RunnerTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; @@ -607,7 +598,6 @@ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OBJC_BRIDGING_HEADER = "RunnerTests/RunnerTests-Bridging-Header.h"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; USE_HEADERMAP = NO; @@ -861,7 +851,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index ef4558defd55..03bd8e4ad04b 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -44,6 +44,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" shouldUseLaunchSchemeArgsEnv = "YES"> - -@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 deleted file mode 100644 index 2e8704e46aef..000000000000 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/TemporaryObjCStub.m +++ /dev/null @@ -1,65 +0,0 @@ -// 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 From cc6744647201fb26e89e2e4ebca8b9b2c64d1af9 Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Wed, 25 Mar 2026 12:01:59 -0700 Subject: [PATCH 41/55] [ci] Update create pull request script in github actions (#11350) I misunderstood the what the create-pull-request github action does. Its mechanism is to work with branch diff between base and target-branch and squash and push the change to into the target-branch to create a pr against the current working directory. It is designed to auto sync the current work directory with changes from other branches. In our use case, the branch has been prepared through the branch_for_batch_release script, so we don't want the github action to do the squashing and rehash the commit. Instead, we just need to use a simple gh cli to create a pr. ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .github/workflows/batch_release_pr.yml | 16 ++++++++-------- .github/workflows/sync_release_pr.yml | 18 +++++++++--------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/batch_release_pr.yml b/.github/workflows/batch_release_pr.yml index 032557912210..2baaf81fa0ba 100644 --- a/.github/workflows/batch_release_pr.yml +++ b/.github/workflows/batch_release_pr.yml @@ -56,13 +56,13 @@ jobs: with: ref: ${{ env.BRANCH_NAME }} - name: Create batch release PR - uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: "[${{ github.event.client_payload.package }}] Batch release" - title: "[${{ github.event.client_payload.package }}] Batch release" - body: "This PR was created automatically to batch release the `${{ github.event.client_payload.package }}`." - branch: ${{ env.BRANCH_NAME }} - base: release-${{ github.event.client_payload.package }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh pr create \ + --base "release-${{ github.event.client_payload.package }}" \ + --head "${{ env.BRANCH_NAME }}" \ + --title "[${{ github.event.client_payload.package }}] Batch release" \ + --body "This PR was created automatically to batch release the \`${{ github.event.client_payload.package }}\`." diff --git a/.github/workflows/sync_release_pr.yml b/.github/workflows/sync_release_pr.yml index 6cb19bb4edbc..66233b6839d9 100644 --- a/.github/workflows/sync_release_pr.yml +++ b/.github/workflows/sync_release_pr.yml @@ -18,12 +18,12 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - name: Create Pull Request - uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: "Sync ${{ github.ref_name }} to main" - title: "Sync ${{ github.ref_name }} to main" - body: "This automated PR syncs the changes from the release branch ${{ github.ref_name }} back to the main branch." - branch: ${{ github.ref_name }} - base: main - labels: "post-${{ github.ref_name }}" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh pr create \ + --base "main" \ + --head "${{ github.ref_name }}" \ + --title "Sync ${{ github.ref_name }} to main" \ + --body "This automated PR syncs the changes from the release branch ${{ github.ref_name }} back to the main branch." \ + --label "post-${{ github.ref_name }}" From 0dd2410791564020e6757234dc9969187e28eef6 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Wed, 25 Mar 2026 15:54:23 -0500 Subject: [PATCH 42/55] [two_dimensional_scrollables] Add alignment to TreeView and TableView (#11353) This PR implements declarative alignment for the content of TableView and TreeView widgets when that content is smaller than the viewport extent. Users can now use the alignment property to center or otherwise position the entire table/tree within the viewport. Alignment correctly reverts to start for axes that exceed viewport dimensions. Fixes flutter/flutter#170349 - TableView - Added an alignment property of type AlignmentGeometry (defaults to Alignment.topLeft). - Full support for both horizontal and vertical alignment. - Supports AlignmentDirectional to correctly handle TextDirection (LTR/RTL). - Works with pinned rows and columns, as well as reversed axis directions. - TreeView - Added an alignment property of type AlignmentGeometry (defaults to Alignment.topLeft). - Caveat: Currently only supports the vertical component of the alignment. The tree remains aligned to the horizontal "start" to maintain consistent indentation logic and avoid layout jumps caused by dynamic, lazily-loaded node widths. ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../two_dimensional_scrollables/CHANGELOG.md | 4 + .../lib/src/table_view/table.dart | 125 +++- .../lib/src/tree_view/render_tree.dart | 49 +- .../lib/src/tree_view/tree.dart | 23 +- .../two_dimensional_scrollables/pubspec.yaml | 2 +- .../test/table_view/alignment_test.dart | 608 ++++++++++++++++++ .../test/tree_view/alignment_test.dart | 91 +++ 7 files changed, 872 insertions(+), 30 deletions(-) create mode 100644 packages/two_dimensional_scrollables/test/table_view/alignment_test.dart create mode 100644 packages/two_dimensional_scrollables/test/tree_view/alignment_test.dart diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index c9332dcb13ac..6d84270e8b66 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.0 + +* Added `alignment` property to `TableView` and `TreeView` to align content within the viewport when it is smaller than the viewport extent. + ## 0.3.9 * Fixes TableSpan borders being flipped when one or both axis directions are reversed. diff --git a/packages/two_dimensional_scrollables/lib/src/table_view/table.dart b/packages/two_dimensional_scrollables/lib/src/table_view/table.dart index e0dd64e9e0b0..66e5cf5ca5c6 100644 --- a/packages/two_dimensional_scrollables/lib/src/table_view/table.dart +++ b/packages/two_dimensional_scrollables/lib/src/table_view/table.dart @@ -116,6 +116,7 @@ class TableView extends TwoDimensionalScrollView { super.dragStartBehavior, super.keyboardDismissBehavior, super.clipBehavior, + this.alignment = Alignment.topLeft, }); /// Creates a [TableView] of widgets that are created on demand. @@ -155,6 +156,7 @@ class TableView extends TwoDimensionalScrollView { required TableSpanBuilder columnBuilder, required TableSpanBuilder rowBuilder, required TableViewCellBuilder cellBuilder, + this.alignment = Alignment.topLeft, }) : assert(pinnedRowCount >= 0), assert(rowCount == null || rowCount >= 0), assert(rowCount == null || rowCount >= pinnedRowCount), @@ -199,6 +201,7 @@ class TableView extends TwoDimensionalScrollView { required TableSpanBuilder columnBuilder, required TableSpanBuilder rowBuilder, List> cells = const >[], + this.alignment = Alignment.topLeft, }) : assert(pinnedRowCount >= 0), assert(pinnedColumnCount >= 0), super( @@ -211,6 +214,11 @@ class TableView extends TwoDimensionalScrollView { ), ); + /// The alignment of the table within the viewport when there is extra space. + /// + /// Defaults to [Alignment.topLeft]. + final AlignmentGeometry alignment; + @override TableViewport buildViewport( BuildContext context, @@ -226,6 +234,7 @@ class TableView extends TwoDimensionalScrollView { mainAxis: mainAxis, cacheExtent: cacheExtent, clipBehavior: clipBehavior, + alignment: alignment, ); } } @@ -245,8 +254,12 @@ class TableViewport extends TwoDimensionalViewport { required super.mainAxis, super.cacheExtent, super.clipBehavior, + this.alignment = Alignment.topLeft, }); + /// The alignment of the table within the viewport when there is extra space. + final AlignmentGeometry alignment; + @override RenderTwoDimensionalViewport createRenderObject(BuildContext context) { return RenderTableViewport( @@ -259,6 +272,8 @@ class TableViewport extends TwoDimensionalViewport { clipBehavior: clipBehavior, delegate: delegate as TableCellDelegateMixin, childManager: context as TwoDimensionalChildManager, + alignment: alignment, + textDirection: Directionality.maybeOf(context), ); } @@ -275,7 +290,9 @@ class TableViewport extends TwoDimensionalViewport { ..mainAxis = mainAxis ..cacheExtent = cacheExtent ..clipBehavior = clipBehavior - ..delegate = delegate as TableCellDelegateMixin; + ..delegate = delegate as TableCellDelegateMixin + ..alignment = alignment + ..textDirection = Directionality.maybeOf(context); } } @@ -299,7 +316,10 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { required super.childManager, super.cacheExtent, super.clipBehavior, - }); + AlignmentGeometry alignment = Alignment.topLeft, + TextDirection? textDirection, + }) : _alignment = alignment, + _textDirection = textDirection; @override TableCellDelegateMixin get delegate => @@ -309,6 +329,31 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { super.delegate = value; } + /// The alignment of the table within the viewport when there is extra space. + AlignmentGeometry get alignment => _alignment; + AlignmentGeometry _alignment; + set alignment(AlignmentGeometry value) { + if (_alignment == value) { + return; + } + _alignment = value; + markNeedsLayout(); + } + + /// The text direction with which to resolve [alignment]. + TextDirection? get textDirection => _textDirection; + TextDirection? _textDirection; + set textDirection(TextDirection? value) { + if (_textDirection == value) { + return; + } + _textDirection = value; + markNeedsLayout(); + } + + double _hAlignmentOffset = 0.0; + double _vAlignmentOffset = 0.0; + // Skipped vicinities for the current frame based on merged cells. // This prevents multiple build calls for the same cell that spans multiple // vicinities. @@ -852,6 +897,33 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { _updateFirstAndLastVisibleCell(); } + final Alignment resolvedAlignment = alignment.resolve(textDirection); + _hAlignmentOffset = 0.0; + if (!_columnsAreInfinite && _columnMetrics.isNotEmpty) { + final double totalWidth = + _pinnedColumnsExtent + + _columnMetrics[delegate.columnCount! - 1]!.trailingOffset; + if (totalWidth < viewportDimension.width) { + _hAlignmentOffset = + (viewportDimension.width - totalWidth) * + (resolvedAlignment.x + 1.0) / + 2.0; + } + } + + _vAlignmentOffset = 0.0; + if (!_rowsAreInfinite && _rowMetrics.isNotEmpty) { + final double totalHeight = + _pinnedRowsExtent + + _rowMetrics[delegate.rowCount! - 1]!.trailingOffset; + if (totalHeight < viewportDimension.height) { + _vAlignmentOffset = + (viewportDimension.height - totalHeight) * + (resolvedAlignment.y + 1.0) / + 2.0; + } + } + if (_firstNonPinnedCell == null && _lastPinnedRow == null && _lastPinnedColumn == null) { @@ -862,19 +934,21 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { final double? offsetIntoColumn = _firstNonPinnedColumn != null ? horizontalOffset.pixels - _columnMetrics[_firstNonPinnedColumn]!.leadingOffset - - _pinnedColumnsExtent + _pinnedColumnsExtent - + _hAlignmentOffset : null; final double? offsetIntoRow = _firstNonPinnedRow != null ? verticalOffset.pixels - _rowMetrics[_firstNonPinnedRow]!.leadingOffset - - _pinnedRowsExtent + _pinnedRowsExtent - + _vAlignmentOffset : null; if (_lastPinnedRow != null && _lastPinnedColumn != null) { // Layout cells that are contained in both pinned rows and columns _layoutCells( start: TableVicinity.zero, end: TableVicinity(column: _lastPinnedColumn!, row: _lastPinnedRow!), - offset: Offset.zero, + offset: Offset(-_hAlignmentOffset, -_vAlignmentOffset), ); } @@ -886,7 +960,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { _layoutCells( start: TableVicinity(column: _firstNonPinnedColumn!, row: 0), end: TableVicinity(column: _lastNonPinnedColumn!, row: _lastPinnedRow!), - offset: Offset(offsetIntoColumn!, 0), + offset: Offset(offsetIntoColumn!, -_vAlignmentOffset), ); } if (_lastPinnedColumn != null && _firstNonPinnedRow != null) { @@ -897,7 +971,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { _layoutCells( start: TableVicinity(column: 0, row: _firstNonPinnedRow!), end: TableVicinity(column: _lastPinnedColumn!, row: _lastNonPinnedRow!), - offset: Offset(0, offsetIntoRow!), + offset: Offset(-_hAlignmentOffset, offsetIntoRow!), ); } if (_firstNonPinnedCell != null) { @@ -1176,6 +1250,9 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { // follows row or column major ordering. Here is slightly different // as we break the cells up into 4 main paint passes to clip for overlap. + final bool reversedH = axisDirectionIsReversed(horizontalAxisDirection); + final bool reversedV = axisDirectionIsReversed(verticalAxisDirection); + if (_firstNonPinnedCell != null) { // Paint all visible un-pinned cells assert(_lastNonPinnedCell != null); @@ -1183,12 +1260,10 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { needsCompositing, offset, Rect.fromLTWH( - axisDirectionIsReversed(horizontalAxisDirection) - ? 0.0 - : _pinnedColumnsExtent, - axisDirectionIsReversed(verticalAxisDirection) - ? 0.0 - : _pinnedRowsExtent, + (reversedH ? 0.0 : _pinnedColumnsExtent) + + (reversedH ? -_hAlignmentOffset : _hAlignmentOffset), + (reversedV ? 0.0 : _pinnedRowsExtent) + + (reversedV ? -_vAlignmentOffset : _vAlignmentOffset), viewportDimension.width - _pinnedColumnsExtent, viewportDimension.height - _pinnedRowsExtent, ), @@ -1214,12 +1289,13 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { needsCompositing, offset, Rect.fromLTWH( - axisDirectionIsReversed(horizontalAxisDirection) - ? viewportDimension.width - _pinnedColumnsExtent - : 0.0, - axisDirectionIsReversed(verticalAxisDirection) - ? 0.0 - : _pinnedRowsExtent, + reversedH + ? viewportDimension.width - + _pinnedColumnsExtent - + _hAlignmentOffset + : _hAlignmentOffset, + (reversedV ? 0.0 : _pinnedRowsExtent) + + (reversedV ? -_vAlignmentOffset : _vAlignmentOffset), _pinnedColumnsExtent, viewportDimension.height - _pinnedRowsExtent, ), @@ -1248,12 +1324,11 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { needsCompositing, offset, Rect.fromLTWH( - axisDirectionIsReversed(horizontalAxisDirection) - ? 0.0 - : _pinnedColumnsExtent, - axisDirectionIsReversed(verticalAxisDirection) - ? viewportDimension.height - _pinnedRowsExtent - : 0.0, + (reversedH ? 0.0 : _pinnedColumnsExtent) + + (reversedH ? -_hAlignmentOffset : _hAlignmentOffset), + reversedV + ? viewportDimension.height - _pinnedRowsExtent - _vAlignmentOffset + : _vAlignmentOffset, viewportDimension.width - _pinnedColumnsExtent, _pinnedRowsExtent, ), diff --git a/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart b/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart index f10c147a50db..10eb1ac3646a 100644 --- a/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart +++ b/packages/two_dimensional_scrollables/lib/src/tree_view/render_tree.dart @@ -38,9 +38,13 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { required super.childManager, super.cacheExtent, super.clipBehavior, + AlignmentGeometry alignment = Alignment.topLeft, + TextDirection? textDirection, }) : _activeAnimations = activeAnimations, _rowDepths = rowDepths, _indentation = indentation, + _alignment = alignment, + _textDirection = textDirection, assert(indentation >= 0), assert( verticalAxisDirection == AxisDirection.down && @@ -56,6 +60,30 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { super.delegate = value; } + /// The alignment of the tree within the viewport when there is extra space. + AlignmentGeometry get alignment => _alignment; + AlignmentGeometry _alignment; + set alignment(AlignmentGeometry value) { + if (_alignment == value) { + return; + } + _alignment = value; + markNeedsLayout(); + } + + /// The text direction with which to resolve [alignment]. + TextDirection? get textDirection => _textDirection; + TextDirection? _textDirection; + set textDirection(TextDirection? value) { + if (_textDirection == value) { + return; + } + _textDirection = value; + markNeedsLayout(); + } + + double _vAlignmentOffset = 0.0; + /// The currently active [TreeViewNode] animations. /// /// Since the index of animating nodes can change at any time, the unique key @@ -348,6 +376,19 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { _updateFirstAndLastVisibleRow(); } + final Alignment resolvedAlignment = alignment.resolve(textDirection); + _vAlignmentOffset = 0.0; + if (_rowMetrics.isNotEmpty) { + final double totalHeight = + _rowMetrics[_rowMetrics.length - 1]!.trailingOffset; + if (totalHeight < viewportDimension.height) { + _vAlignmentOffset = + (viewportDimension.height - totalHeight) * + (resolvedAlignment.y + 1.0) / + 2.0; + } + } + if (_firstRow == null) { assert(_lastRow == null); return; @@ -356,7 +397,9 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { _Span rowSpan; double rowOffset = - -verticalOffset.pixels + _rowMetrics[_firstRow!]!.leadingOffset; + -verticalOffset.pixels + + _rowMetrics[_firstRow!]!.leadingOffset + + _vAlignmentOffset; for (int row = _firstRow!; row <= _lastRow!; row++) { rowSpan = _rowMetrics[row]!; final double rowHeight = rowSpan.extent; @@ -489,11 +532,11 @@ class RenderTreeViewport extends RenderTwoDimensionalViewport { final double trailingOffset = _rowMetrics[segment.trailingIndex]!.trailingOffset; final rect = Rect.fromPoints( - Offset(0.0, leadingOffset - verticalOffset.pixels), + Offset(0.0, leadingOffset - verticalOffset.pixels + _vAlignmentOffset), Offset( viewportDimension.width, math.min( - trailingOffset - verticalOffset.pixels, + trailingOffset - verticalOffset.pixels + _vAlignmentOffset, viewportDimension.height, ), ), diff --git a/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart b/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart index 3c5fa67bf134..6819c9424018 100644 --- a/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart +++ b/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart @@ -322,6 +322,7 @@ class TreeView extends StatefulWidget { this.clipBehavior = Clip.hardEdge, this.addAutomaticKeepAlives = true, this.addRepaintBoundaries = true, + this.alignment = Alignment.topLeft, }) : assert( verticalDetails.direction == AxisDirection.down && horizontalDetails.direction == AxisDirection.right, @@ -496,6 +497,14 @@ class TreeView extends StatefulWidget { /// Defaults to true. final bool addRepaintBoundaries; + /// The alignment of the tree within the viewport when there is extra space. + /// + /// Currently, [TreeView] only supports the vertical component of [alignment] + /// for aligning the tree within the viewport. + /// + /// Defaults to [Alignment.topLeft]. + final AlignmentGeometry alignment; + /// The default [AnimationStyle] used for node expand and collapse animations, /// when one has not been provided in [toggleAnimationStyle]. // ignore: prefer_const_constructors @@ -758,6 +767,7 @@ class _TreeViewState extends State> }, addAutomaticKeepAlives: widget.addAutomaticKeepAlives, indentation: widget.indentation.value, + alignment: widget.alignment, ); } @@ -984,6 +994,7 @@ class _TreeView extends TwoDimensionalScrollView { required this.activeAnimations, required this.rowDepths, required this.indentation, + required this.alignment, required int rowCount, bool addAutomaticKeepAlives = true, }) : assert(verticalDetails.direction == AxisDirection.down), @@ -1000,6 +1011,7 @@ class _TreeView extends TwoDimensionalScrollView { final Map activeAnimations; final Map rowDepths; final double indentation; + final AlignmentGeometry alignment; @override TreeViewport buildViewport( @@ -1018,6 +1030,7 @@ class _TreeView extends TwoDimensionalScrollView { activeAnimations: activeAnimations, rowDepths: rowDepths, indentation: indentation, + alignment: alignment, ); } } @@ -1039,6 +1052,7 @@ class TreeViewport extends TwoDimensionalViewport { required this.activeAnimations, required this.rowDepths, required this.indentation, + this.alignment = Alignment.topLeft, }) : assert( verticalAxisDirection == AxisDirection.down && horizontalAxisDirection == AxisDirection.right, @@ -1063,6 +1077,9 @@ class TreeViewport extends TwoDimensionalViewport { /// for more options to customize the indented space. final double indentation; + /// The alignment of the tree within the viewport when there is extra space. + final AlignmentGeometry alignment; + @override RenderTreeViewport createRenderObject(BuildContext context) { return RenderTreeViewport( @@ -1077,6 +1094,8 @@ class TreeViewport extends TwoDimensionalViewport { clipBehavior: clipBehavior, delegate: delegate as TreeRowDelegateMixin, childManager: context as TwoDimensionalChildManager, + alignment: alignment, + textDirection: Directionality.maybeOf(context), ); } @@ -1095,6 +1114,8 @@ class TreeViewport extends TwoDimensionalViewport { ..verticalAxisDirection = verticalAxisDirection ..cacheExtent = cacheExtent ..clipBehavior = clipBehavior - ..delegate = delegate as TreeRowDelegateMixin; + ..delegate = delegate as TreeRowDelegateMixin + ..alignment = alignment + ..textDirection = Directionality.maybeOf(context); } } diff --git a/packages/two_dimensional_scrollables/pubspec.yaml b/packages/two_dimensional_scrollables/pubspec.yaml index 9d16a900d995..8525e06bff96 100644 --- a/packages/two_dimensional_scrollables/pubspec.yaml +++ b/packages/two_dimensional_scrollables/pubspec.yaml @@ -1,6 +1,6 @@ name: two_dimensional_scrollables description: Widgets that scroll using the two dimensional scrolling foundation. -version: 0.3.9 +version: 0.4.0 repository: https://github.com/flutter/packages/tree/main/packages/two_dimensional_scrollables issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+two_dimensional_scrollables%22+ diff --git a/packages/two_dimensional_scrollables/test/table_view/alignment_test.dart b/packages/two_dimensional_scrollables/test/table_view/alignment_test.dart new file mode 100644 index 000000000000..cba1e1fbc872 --- /dev/null +++ b/packages/two_dimensional_scrollables/test/table_view/alignment_test.dart @@ -0,0 +1,608 @@ +// 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 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:two_dimensional_scrollables/two_dimensional_scrollables.dart'; + +void main() { + group('TableView alignment', () { + testWidgets('Default alignment - topLeft', (WidgetTester tester) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 600, + height: 600, + child: TableView.builder( + columnCount: 1, + rowCount: 1, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Default is Alignment.topLeft (0, 0) + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect(tester.getTopLeft(cell00) - tableTopLeft, Offset.zero); + }); + + testWidgets('Horizontal alignment - center', (WidgetTester tester) async { + const viewportWidth = 600.0; + + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: viewportWidth, + height: 400, + child: TableView.builder( + columnCount: 3, + rowCount: 1, + alignment: Alignment.topCenter, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Table is 300 wide, viewport is 600 wide. Centered means 150 offset. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(150.0, 0.0), + ); + + final Finder cell20 = find.byKey(const ValueKey('cell 2:0')); + expect( + tester.getTopLeft(cell20) - tableTopLeft, + const Offset(350.0, 0.0), + ); + }); + + testWidgets('Horizontal alignment - end', (WidgetTester tester) async { + const viewportWidth = 600.0; + + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: viewportWidth, + height: 400, + child: TableView.builder( + columnCount: 3, + rowCount: 1, + alignment: Alignment.topRight, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Table is 300 wide, viewport is 600 wide. End means 300 offset. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(300.0, 0.0), + ); + }); + + testWidgets('Vertical alignment - center', (WidgetTester tester) async { + const viewportHeight = 600.0; + + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 400, + height: viewportHeight, + child: TableView.builder( + columnCount: 1, + rowCount: 2, + alignment: Alignment.centerLeft, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Table is 200 high, viewport is 600 high. Centered means 200 offset. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(0.0, 200.0), + ); + + final Finder cell01 = find.byKey(const ValueKey('cell 0:1')); + expect( + tester.getTopLeft(cell01) - tableTopLeft, + const Offset(0.0, 300.0), + ); + }); + + testWidgets('Combined alignment', (WidgetTester tester) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 600, + height: 600, + child: TableView.builder( + columnCount: 1, + rowCount: 1, + alignment: Alignment.center, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Table is 100x100, viewport is 600x600. Centered means 250, 250 offset. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(250.0, 250.0), + ); + }); + + testWidgets('Alignment with pinned columns', (WidgetTester tester) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 600, + height: 400, + child: TableView.builder( + columnCount: 3, + rowCount: 1, + pinnedColumnCount: 1, + alignment: Alignment.topCenter, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Total width 300 (1 pinned, 2 unpinned). Viewport 600. Offset 150. + // Pinned column 0 should be at 150. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(150.0, 0.0), + ); + + // Unpinned column 1 should be at 250. + final Finder cell10 = find.byKey(const ValueKey('cell 1:0')); + expect( + tester.getTopLeft(cell10) - tableTopLeft, + const Offset(250.0, 0.0), + ); + }); + + testWidgets('Alignment with pinned rows', (WidgetTester tester) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 400, + height: 600, + child: TableView.builder( + columnCount: 1, + rowCount: 3, + pinnedRowCount: 1, + alignment: Alignment.centerLeft, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Total height 300 (1 pinned, 2 unpinned). Viewport 600. Offset 150. + // Pinned row 0 should be at 150. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(0.0, 150.0), + ); + + // Unpinned row 1 should be at 250. + final Finder cell01 = find.byKey(const ValueKey('cell 0:1')); + expect( + tester.getTopLeft(cell01) - tableTopLeft, + const Offset(0.0, 250.0), + ); + }); + + testWidgets('Alignment with reversed horizontal axis', ( + WidgetTester tester, + ) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 600, + height: 400, + child: TableView.builder( + columnCount: 1, + rowCount: 1, + alignment: Alignment.topCenter, + horizontalDetails: const ScrollableDetails.horizontal( + reverse: true, + ), + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Reversed horizontal. Start is on the right (600). + // Center should still be at 250. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(250.0, 0.0), + ); + }); + + testWidgets('Alignment with reversed vertical axis', ( + WidgetTester tester, + ) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 400, + height: 600, + child: TableView.builder( + columnCount: 1, + rowCount: 1, + alignment: Alignment.centerLeft, + verticalDetails: const ScrollableDetails.vertical( + reverse: true, + ), + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Reversed vertical. Center should still be at 250. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(0.0, 250.0), + ); + }); + + testWidgets('Alignment with both axes reversed', ( + WidgetTester tester, + ) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 600, + height: 600, + child: TableView.builder( + columnCount: 1, + rowCount: 1, + alignment: Alignment.center, + horizontalDetails: const ScrollableDetails.horizontal( + reverse: true, + ), + verticalDetails: const ScrollableDetails.vertical( + reverse: true, + ), + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Both reversed. Center should still be at (250, 250). + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(250.0, 250.0), + ); + }); + + testWidgets('AlignmentDirectional with RTL', (WidgetTester tester) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.rtl, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 600, + height: 400, + child: TableView.builder( + columnCount: 1, + rowCount: 1, + alignment: AlignmentDirectional.centerEnd, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // RTL + centerEnd means alignment to the left. + // Table is 100 wide, viewport 600. centerEnd in RTL resolved to left (x = -1). + // Wait, centerEnd in RTL is actually Alignment(-1.0, 0.0) which is left. + // centerEnd in LTR is Alignment(1.0, 0.0) which is right. + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(0.0, 150.0), // Center Y is 150 (400-100)/2 + ); + }); + + testWidgets('Overflow alignment behaves like start in overflow axis', ( + WidgetTester tester, + ) async { + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 200, + height: 400, + child: TableView.builder( + columnCount: 3, // 300 wide + rowCount: 1, + alignment: Alignment.center, + columnBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (context, vicinity) { + return TableViewCell( + child: SizedBox( + key: ValueKey( + 'cell ${vicinity.column}:${vicinity.row}', + ), + ), + ); + }, + ), + ), + ), + ), + ), + ); + + final Offset tableTopLeft = tester.getTopLeft(find.byType(TableView)); + // Table (300) > Viewport (200). Horizontal alignment should be ignored (start). + // Viewport (400) > Table (100) Row. Vertical alignment should be center (150). + final Finder cell00 = find.byKey(const ValueKey('cell 0:0')); + expect( + tester.getTopLeft(cell00) - tableTopLeft, + const Offset(0.0, 150.0), + ); + }); + }); +} diff --git a/packages/two_dimensional_scrollables/test/tree_view/alignment_test.dart b/packages/two_dimensional_scrollables/test/tree_view/alignment_test.dart new file mode 100644 index 000000000000..9783e253309e --- /dev/null +++ b/packages/two_dimensional_scrollables/test/tree_view/alignment_test.dart @@ -0,0 +1,91 @@ +// 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 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:two_dimensional_scrollables/two_dimensional_scrollables.dart'; + +void main() { + group('TreeView alignment', () { + testWidgets('Default alignment - topLeft', (WidgetTester tester) async { + final tree = >[TreeViewNode('Root')]; + + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 400, + height: 400, + child: TreeView( + tree: tree, + treeNodeBuilder: (context, node, toggleAnimationStyle) => + SizedBox( + key: const ValueKey('Root'), + height: 100, + child: Text(node.content), + ), + treeRowBuilder: (node) => + const TreeRow(extent: FixedTreeRowExtent(100)), + ), + ), + ), + ), + ), + ); + + final Offset treeTopLeft = tester.getTopLeft( + find.byType(TreeView), + ); + // Default is Alignment.topLeft (0, 0) + final Finder root = find.byKey(const ValueKey('Root')); + expect(tester.getTopLeft(root) - treeTopLeft, Offset.zero); + }); + + testWidgets('Vertical alignment - center', (WidgetTester tester) async { + const viewportHeight = 600.0; + final tree = >[TreeViewNode('Root')]; + + await tester.pumpWidget( + WidgetsApp( + color: const Color(0xFFFFFFFF), + debugShowCheckedModeBanner: false, + builder: (context, child) => Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 400, + height: viewportHeight, + child: TreeView( + tree: tree, + alignment: Alignment.center, + treeNodeBuilder: (context, node, toggleAnimationStyle) => + SizedBox( + key: const ValueKey('Root'), + height: 100, + child: Text(node.content), + ), + treeRowBuilder: (node) => + const TreeRow(extent: FixedTreeRowExtent(100)), + ), + ), + ), + ), + ), + ); + + final Offset treeTopLeft = tester.getTopLeft( + find.byType(TreeView), + ); + // Tree is 100 high, viewport is 600 high. Centered means 250 offset. + final Finder root = find.byKey(const ValueKey('Root')); + expect(tester.getTopLeft(root) - treeTopLeft, const Offset(0.0, 250.0)); + }); + }); +} From d8737b485f0a059c501389e953e610765de59ea6 Mon Sep 17 00:00:00 2001 From: Hannah Jin Date: Thu, 26 Mar 2026 11:22:09 -0700 Subject: [PATCH 43/55] Fix typo in release_from_branches.yml (#11356) *reusable_release ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .github/workflows/release_from_branches.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release_from_branches.yml b/.github/workflows/release_from_branches.yml index a235a2576ef3..5286cc18e041 100644 --- a/.github/workflows/release_from_branches.yml +++ b/.github/workflows/release_from_branches.yml @@ -5,7 +5,7 @@ on: - 'release-go_router' jobs: release: - uses: ./.github/workflows/resuable_release.yml + uses: ./.github/workflows/reusable_release.yml with: is-batch-release: true branch-name: '${{ github.ref_name }}' From e6275038e5ccc83173d2fad08413932401528f73 Mon Sep 17 00:00:00 2001 From: Tarrin Neal Date: Thu, 26 Mar 2026 15:20:56 -0700 Subject: [PATCH 44/55] [pigeon] Adds support for analyzer 10 (#11346) minimal required changes fixes https://github.com/flutter/flutter/issues/183568 --- packages/pigeon/CHANGELOG.md | 4 ++++ packages/pigeon/lib/src/generator_tools.dart | 2 +- packages/pigeon/lib/src/pigeon_lib_internal.dart | 8 ++++++-- packages/pigeon/pubspec.yaml | 5 +++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index d14e07c1b4b4..16ca19f5515a 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 26.3.2 + +* Updates `analyzer` dependency to support version 10. + ## 26.3.1 * Fixes dartdoc comments that accidentally used HTML. diff --git a/packages/pigeon/lib/src/generator_tools.dart b/packages/pigeon/lib/src/generator_tools.dart index 2890bb571542..e06ddf0bd228 100644 --- a/packages/pigeon/lib/src/generator_tools.dart +++ b/packages/pigeon/lib/src/generator_tools.dart @@ -15,7 +15,7 @@ import 'generator.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '26.3.1'; +const String pigeonVersion = '26.3.2'; /// Default plugin package name. const String defaultPluginPackageName = 'dev.flutter.pigeon'; diff --git a/packages/pigeon/lib/src/pigeon_lib_internal.dart b/packages/pigeon/lib/src/pigeon_lib_internal.dart index 75bbb96a293e..19da4613ce42 100644 --- a/packages/pigeon/lib/src/pigeon_lib_internal.dart +++ b/packages/pigeon/lib/src/pigeon_lib_internal.dart @@ -1922,10 +1922,14 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { // resolved return type, via // `node.declaredFragment!.element.returnType`. String erroneousDeclaration = node.name.lexeme; - final dart_ast.AstNode? enclosingDeclaration = node.parent; + dart_ast.AstNode? enclosingDeclaration = node.parent; + while (enclosingDeclaration != null && + enclosingDeclaration is! dart_ast.ClassDeclaration) { + enclosingDeclaration = enclosingDeclaration.parent; + } if (enclosingDeclaration is dart_ast.ClassDeclaration) { erroneousDeclaration = - '${enclosingDeclaration.name}.$erroneousDeclaration'; + '${enclosingDeclaration.name.lexeme}.$erroneousDeclaration'; } _errors.add( Error( diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 0fc8a2cdd64c..7a1359aec30c 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,13 +2,13 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22 -version: 26.3.1 # This must match the version in lib/src/generator_tools.dart +version: 26.3.2 # This must match the version in lib/src/generator_tools.dart environment: sdk: ^3.9.0 dependencies: - analyzer: ">=8.0.0 <10.0.0" + analyzer: ">=8.0.0 <11.0.0" args: ^2.5.0 code_builder: ^4.10.0 collection: ^1.15.0 @@ -27,3 +27,4 @@ topics: - interop - platform-channels - plugin-development + From 049cc84a479d396579efd3f010af5ad0cdb03cd3 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Thu, 26 Mar 2026 17:56:17 -0500 Subject: [PATCH 45/55] [two_dimensional_scrollables] Add debug check for pinning out of bounds (#11366) Fixes https://github.com/flutter/flutter/issues/136833 This cleans up an old todo from when we added support for pinned rows and columns to TableView. It is possible for the pinned extents to exceed the viewport bounds, which would make scrolling impossible, and unpinned rows/columns inaccessible. This adds debug check during layout to catch this now. ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../two_dimensional_scrollables/CHANGELOG.md | 4 + .../lib/src/table_view/table.dart | 51 +++- .../two_dimensional_scrollables/pubspec.yaml | 2 +- .../pinned_extent_warning_test.dart | 241 ++++++++++++++++++ 4 files changed, 290 insertions(+), 8 deletions(-) create mode 100644 packages/two_dimensional_scrollables/test/table_view/pinned_extent_warning_test.dart diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index 6d84270e8b66..2f031898ab46 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.1 + +* Adds warnings for TableView pinned rows and columns that exceed the viewport dimensions. + ## 0.4.0 * Added `alignment` property to `TableView` and `TreeView` to align content within the viewport when it is smaller than the viewport extent. diff --git a/packages/two_dimensional_scrollables/lib/src/table_view/table.dart b/packages/two_dimensional_scrollables/lib/src/table_view/table.dart index 66e5cf5ca5c6..b09a7898e852 100644 --- a/packages/two_dimensional_scrollables/lib/src/table_view/table.dart +++ b/packages/two_dimensional_scrollables/lib/src/table_view/table.dart @@ -429,13 +429,6 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { ); } - // TODO(Piinks): Pinned rows/cols do not account for what is visible on the - // screen. Ostensibly, we would not want to have pinned rows/columns that - // extend beyond the viewport, we would never see them as they would never - // scroll into view. So this currently implementation is fairly assuming - // we will never have rows/cols that are outside of the viewport. We should - // maybe add an assertion for this during layout. - // https://github.com/flutter/flutter/issues/136833 int? get _lastPinnedRow => delegate.pinnedRowCount > 0 ? delegate.pinnedRowCount - 1 : null; int? get _lastPinnedColumn => @@ -448,6 +441,49 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { ? _columnMetrics[_lastPinnedColumn]!.trailingOffset : 0.0; + void _debugCheckPinnedExtent() { + assert(() { + if (_pinnedColumnsExtent > viewportDimension.width) { + debugPrint( + 'TableView has pinned columns with a total width of ' + '$_pinnedColumnsExtent, which exceeds the viewport width of ' + '${viewportDimension.width}. This will prevent unpinned columns ' + 'from being visible.', + ); + } else if (_pinnedColumnsExtent == viewportDimension.width) { + final bool hasUnpinnedColumns = + delegate.columnCount == null || + delegate.columnCount! > delegate.pinnedColumnCount; + if (hasUnpinnedColumns) { + debugPrint( + 'TableView has pinned columns that fully consume the viewport width. ' + 'Unpinned columns will not be visible.', + ); + } + } + + if (_pinnedRowsExtent > viewportDimension.height) { + debugPrint( + 'TableView has pinned rows with a total height of ' + '$_pinnedRowsExtent, which exceeds the viewport height of ' + '${viewportDimension.height}. This will prevent unpinned rows ' + 'from being visible.', + ); + } else if (_pinnedRowsExtent == viewportDimension.height) { + final bool hasUnpinnedRows = + delegate.rowCount == null || + delegate.rowCount! > delegate.pinnedRowCount; + if (hasUnpinnedRows) { + debugPrint( + 'TableView has pinned rows that fully consume the viewport height. ' + 'Unpinned rows will not be visible.', + ); + } + } + return true; + }()); + } + @override TableViewParentData parentDataOf(RenderBox child) => super.parentDataOf(child) as TableViewParentData; @@ -892,6 +928,7 @@ class RenderTableViewport extends RenderTwoDimensionalViewport { _updateColumnMetrics(); _updateRowMetrics(); _updateScrollBounds(); + _debugCheckPinnedExtent(); } else { // Updates the visible cells based on cached table metrics. _updateFirstAndLastVisibleCell(); diff --git a/packages/two_dimensional_scrollables/pubspec.yaml b/packages/two_dimensional_scrollables/pubspec.yaml index 8525e06bff96..8e6d131bc8e0 100644 --- a/packages/two_dimensional_scrollables/pubspec.yaml +++ b/packages/two_dimensional_scrollables/pubspec.yaml @@ -1,6 +1,6 @@ name: two_dimensional_scrollables description: Widgets that scroll using the two dimensional scrolling foundation. -version: 0.4.0 +version: 0.4.1 repository: https://github.com/flutter/packages/tree/main/packages/two_dimensional_scrollables issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+two_dimensional_scrollables%22+ diff --git a/packages/two_dimensional_scrollables/test/table_view/pinned_extent_warning_test.dart b/packages/two_dimensional_scrollables/test/table_view/pinned_extent_warning_test.dart new file mode 100644 index 000000000000..af0d6625b6e8 --- /dev/null +++ b/packages/two_dimensional_scrollables/test/table_view/pinned_extent_warning_test.dart @@ -0,0 +1,241 @@ +// 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 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:two_dimensional_scrollables/two_dimensional_scrollables.dart'; + +void main() { + group('TableView pinned extent warnings', () { + testWidgets('Warns when pinned columns exceed viewport width', ( + WidgetTester tester, + ) async { + // Regression test for https://github.com/flutter/flutter/issues/136833 + final log = []; + final DebugPrintCallback oldDebugPrint = debugPrint; + debugPrint = (String? message, {int? wrapWidth}) { + log.add(message!); + }; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: SizedBox( + width: 200, + height: 400, + child: TableView.builder( + columnCount: 5, + rowCount: 5, + pinnedColumnCount: 3, + columnBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (BuildContext context, TableVicinity vicinity) => + const TableViewCell(child: SizedBox.shrink()), + ), + ), + ), + ), + ); + + // Pinned columns extent = 300 (3 * 100), viewport width = 200. + // A warning is expected because the pinned columns are wider than the + // viewport, meaning even the pinned content cannot be fully displayed. + expect( + log, + contains( + matches( + r'TableView has pinned columns with a total width of 300(\.0)?, which exceeds the viewport width of 200(\.0)?', + ), + ), + ); + debugPrint = oldDebugPrint; + }); + + testWidgets('Warns when pinned rows exceed viewport height', ( + WidgetTester tester, + ) async { + // Regression test for https://github.com/flutter/flutter/issues/136833 + final log = []; + final DebugPrintCallback oldDebugPrint = debugPrint; + debugPrint = (String? message, {int? wrapWidth}) { + log.add(message!); + }; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 200, + child: TableView.builder( + columnCount: 5, + rowCount: 5, + pinnedRowCount: 3, + columnBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (BuildContext context, TableVicinity vicinity) => + const TableViewCell(child: SizedBox.shrink()), + ), + ), + ), + ), + ); + + // Pinned rows extent = 300 (3 * 100), viewport height = 200. + // A warning is expected because the pinned rows are taller than the + // viewport, meaning even the pinned content cannot be fully displayed. + expect( + log, + contains( + matches( + r'TableView has pinned rows with a total height of 300(\.0)?, which exceeds the viewport height of 200(\.0)?', + ), + ), + ); + debugPrint = oldDebugPrint; + }); + + testWidgets( + 'Warns when pinned columns fully consume viewport width and there are unpinned columns', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/136833 + final log = []; + final DebugPrintCallback oldDebugPrint = debugPrint; + debugPrint = (String? message, {int? wrapWidth}) { + log.add(message!); + }; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: SizedBox( + width: 200, + height: 400, + child: TableView.builder( + columnCount: 3, + rowCount: 5, + pinnedColumnCount: 2, + columnBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (BuildContext context, TableVicinity vicinity) => + const TableViewCell(child: SizedBox.shrink()), + ), + ), + ), + ), + ); + + // Pinned columns extent = 200 (2 * 100), viewport width = 200. + // There is 1 unpinned column (columnCount: 3, pinnedColumnCount: 2). + // Since the pinned columns take up the entire viewport width, the + // unpinned column will never be visible during scrolling. + expect( + log, + contains( + 'TableView has pinned columns that fully consume the viewport width. Unpinned columns will not be visible.', + ), + ); + debugPrint = oldDebugPrint; + }, + ); + + testWidgets( + 'Warns when pinned rows fully consume viewport height and there are unpinned rows', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/136833 + final log = []; + final DebugPrintCallback oldDebugPrint = debugPrint; + debugPrint = (String? message, {int? wrapWidth}) { + log.add(message!); + }; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: SizedBox( + width: 400, + height: 200, + child: TableView.builder( + columnCount: 5, + rowCount: 3, + pinnedRowCount: 2, + columnBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (BuildContext context, TableVicinity vicinity) => + const TableViewCell(child: SizedBox.shrink()), + ), + ), + ), + ), + ); + + // Pinned rows extent = 200 (2 * 100), viewport height = 200. + // There is 1 unpinned row (rowCount: 3, pinnedRowCount: 2). + // Since the pinned rows take up the entire viewport height, the + // unpinned row will never be visible during scrolling. + expect( + log, + contains( + 'TableView has pinned rows that fully consume the viewport height. Unpinned rows will not be visible.', + ), + ); + debugPrint = oldDebugPrint; + }, + ); + + testWidgets( + 'Does not warn when all columns are pinned even if they consume viewport', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/136833 + final log = []; + final DebugPrintCallback oldDebugPrint = debugPrint; + debugPrint = (String? message, {int? wrapWidth}) { + log.add(message!); + }; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: SizedBox( + width: 200, + height: 400, + child: TableView.builder( + columnCount: 2, + rowCount: 5, + pinnedColumnCount: 2, + columnBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + rowBuilder: (int index) => + const TableSpan(extent: FixedTableSpanExtent(100)), + cellBuilder: (BuildContext context, TableVicinity vicinity) => + const TableViewCell(child: SizedBox.shrink()), + ), + ), + ), + ), + ); + + // Pinned columns extent = 200 (2 * 100), viewport width = 200. + // Although the pinned columns fully consume the viewport width, + // ALL columns are pinned (columnCount: 2, pinnedColumnCount: 2). + // Since there are no unpinned columns, no warning is issued about + // unpinned columns being hidden. + expect( + log, + isNot(contains(contains('Unpinned columns will not be visible'))), + ); + debugPrint = oldDebugPrint; + }, + ); + }); +} From eb722e0d8db9c069bf44e42686f1298c1da3b9cb Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 26 Mar 2026 19:44:23 -0400 Subject: [PATCH 46/55] Manual roll Flutter from 82d96ef98a33 to e79bf6cbc140 (32 revisions) (#11372) Manual roll Flutter from 82d96ef98a33 to e79bf6cbc140 (32 revisions) Manual roll requested by tarrinneal@google.com https://github.com/flutter/flutter/compare/82d96ef98a33...e79bf6cbc140 2026-03-26 engine-flutter-autoroll@skia.org Roll Dart SDK from a3af8949863e to 7587a31814c6 (1 revision) (flutter/flutter#184213) 2026-03-26 30870216+gaaclarke@users.noreply.github.com Adds rockchip series to block list for vulkan. (flutter/flutter#184207) 2026-03-26 41930132+hellohuanlin@users.noreply.github.com [ios]add ci/cd label to ios triage (flutter/flutter#184214) 2026-03-26 engine-flutter-autoroll@skia.org Roll Skia from 10c97361d8f3 to bee5a06ef578 (1 revision) (flutter/flutter#184203) 2026-03-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from rS5ezRgehkw26fKRX... to BIlBJNOlKjQeRFoFy... (flutter/flutter#184197) 2026-03-26 engine-flutter-autoroll@skia.org Roll Packages from 5909bdde6090 to 0dd241079156 (3 revisions) (flutter/flutter#184198) 2026-03-26 1776065+b055man@users.noreply.github.com fix: use atomic write for engine.stamp to prevent race conditions (flutter/flutter#184131) 2026-03-26 engine-flutter-autoroll@skia.org Roll Skia from 77dfb68002cd to 10c97361d8f3 (1 revision) (flutter/flutter#184195) 2026-03-26 engine-flutter-autoroll@skia.org Roll Dart SDK from 349dbbbdba99 to a3af8949863e (1 revision) (flutter/flutter#184194) 2026-03-26 engine-flutter-autoroll@skia.org Roll Skia from 81ef2238cb09 to 77dfb68002cd (12 revisions) (flutter/flutter#184186) 2026-03-26 jason-simmons@users.noreply.github.com Revert "Keep glyphs for variable fonts (#183857)" (flutter/flutter#184147) 2026-03-26 97480502+b-luk@users.noreply.github.com Expand simple shape path optimization logic and move it from dl_dispatcher to dl_builder (flutter/flutter#184096) 2026-03-26 jacksongardner@google.com Fix merge changelog workflow. (flutter/flutter#184145) 2026-03-26 34871572+gmackall@users.noreply.github.com Add notes on HCPP to `Android-Platform-Views.md` (flutter/flutter#183859) 2026-03-26 30870216+gaaclarke@users.noreply.github.com Adds explicit name to the cicd label job. (flutter/flutter#184070) 2026-03-26 engine-flutter-autoroll@skia.org Roll Dart SDK from 26f80b9403f5 to 349dbbbdba99 (3 revisions) (flutter/flutter#184176) 2026-03-26 34871572+gmackall@users.noreply.github.com Collect impeller analytics for appbundles (flutter/flutter#184146) 2026-03-26 737941+loic-sharma@users.noreply.github.com [Dot shorthands] Migrate examples/api/lib/material (flutter/flutter#183963) 2026-03-26 jason-simmons@users.noreply.github.com Roll Dart DevTools to a version with correct CIPD tags (flutter/flutter#184172) 2026-03-25 47866232+chunhtai@users.noreply.github.com Pipes ScrollCacheExtent through more scroll views (flutter/flutter#184078) 2026-03-25 32538273+ValentinVignal@users.noreply.github.com Add widget of the week link in SensitiveContent documentation (flutter/flutter#183972) 2026-03-25 engine-flutter-autoroll@skia.org Roll Packages from 8dcfd1186ef9 to 5909bdde6090 (13 revisions) (flutter/flutter#184123) 2026-03-25 engine-flutter-autoroll@skia.org Roll Dart SDK from c48f0c954d86 to 26f80b9403f5 (1 revision) (flutter/flutter#184117) 2026-03-25 engine-flutter-autoroll@skia.org Roll Skia from 51725ae49ef5 to 81ef2238cb09 (3 revisions) (flutter/flutter#184115) 2026-03-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from M3sjWggTQmP2AD4bS... to rS5ezRgehkw26fKRX... (flutter/flutter#184114) 2026-03-25 104349824+huycozy@users.noreply.github.com Add SensitiveContent widget sample code (flutter/flutter#183846) 2026-03-25 rmolivares@renzo-olivares.dev SelectableRegion should passthrough constraints to child unmodified (flutter/flutter#184083) 2026-03-25 engine-flutter-autoroll@skia.org Roll Dart SDK from ce171d5026ff to c48f0c954d86 (2 revisions) (flutter/flutter#184105) 2026-03-25 engine-flutter-autoroll@skia.org Roll Skia from 789ad6b12776 to 51725ae49ef5 (3 revisions) (flutter/flutter#184106) 2026-03-25 engine-flutter-autoroll@skia.org Roll Skia from f4e59f82dc69 to 789ad6b12776 (7 revisions) (flutter/flutter#184098) 2026-03-25 engine-flutter-autoroll@skia.org Roll Dart SDK from b08bd0a3ee39 to ce171d5026ff (4 revisions) (flutter/flutter#184095) 2026-03-24 srawlins@google.com [flutter_goldens] Remove dead check on null being in a list of non-nullables (flutter/flutter#183938) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC stuartmorgan@google.com,tarrinneal@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 ... --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 21aae04dd65f..8c3ea6ad58ed 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -82d96ef98a33f3f35dabf7795e701f8a4d2d4bec +e79bf6cbc14078179ed09a6d203028a38ee9bd28 From 7ae082a7f6cd1bc6a219c6ab0adf27a3d8ffdc23 Mon Sep 17 00:00:00 2001 From: Elijah Okoroh Date: Fri, 27 Mar 2026 04:15:22 -0700 Subject: [PATCH 47/55] [quick_actions_ios] UIScene Migration (#11047) Migrate quick_actions_ios to adopt UIScene Fixes flutter/flutter#170179 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../quick_actions_ios/CHANGELOG.md | 5 + .../example/ios/Runner/AppDelegate.swift | 7 +- .../example/ios/Runner/Info.plist | 21 ++++ .../RunnerTests/QuickActionsPluginTests.swift | 104 ++++++++++++++++++ .../quick_actions_ios/example/pubspec.yaml | 4 +- .../QuickActionsPlugin.swift | 46 +++++++- .../quick_actions_ios/pubspec.yaml | 6 +- 7 files changed, 185 insertions(+), 8 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index 506580fd211c..4f1cbc7cf8eb 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.2.4 + +* Adds support for UIScene lifecycle. +* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. + ## 1.2.3 * Updates to Pigeon 26. diff --git a/packages/quick_actions/quick_actions_ios/example/ios/Runner/AppDelegate.swift b/packages/quick_actions/quick_actions_ios/example/ios/Runner/AppDelegate.swift index 6fa401143d5a..b5bc5f9682ba 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/Runner/AppDelegate.swift +++ b/packages/quick_actions/quick_actions_ios/example/ios/Runner/AppDelegate.swift @@ -6,14 +6,17 @@ import Flutter import UIKit @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) super.application(application, didFinishLaunchingWithOptions: launchOptions) // For UI integration tests. See https://github.com/flutter/plugins/pull/3811. return false } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } } diff --git a/packages/quick_actions/quick_actions_ios/example/ios/Runner/Info.plist b/packages/quick_actions/quick_actions_ios/example/ios/Runner/Info.plist index fd3b62987824..7fba3010b0d8 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/Runner/Info.plist +++ b/packages/quick_actions/quick_actions_ios/example/ios/Runner/Info.plist @@ -45,5 +45,26 @@ UIApplicationSupportsIndirectInputEvents + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/QuickActionsPluginTests.swift b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/QuickActionsPluginTests.swift index 98766194b3bc..ad2f043af105 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/QuickActionsPluginTests.swift +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/QuickActionsPluginTests.swift @@ -223,4 +223,108 @@ struct QuickActionsPluginTests { plugin.applicationDidBecomeActive(UIApplication.shared) } } + + // MARK: - Scene lifecycle tests + + @Test func windowScenePerformActionForShortcutItem() async { + let flutterApi: MockFlutterApi = MockFlutterApi() + let mockShortcutItemProvider = MockShortcutItemProvider() + + let plugin = QuickActionsPlugin( + flutterApi: flutterApi, + shortcutItemProvider: mockShortcutItemProvider) + + let item = UIApplicationShortcutItem( + type: "SearchTheThing", + localizedTitle: "Search the thing", + localizedSubtitle: nil, + icon: UIApplicationShortcutIcon(templateImageName: "search_the_thing.png"), + userInfo: nil) + + await confirmation("shortcut should be handled via windowScene") { confirmed in + flutterApi.launchActionCallback = { aString in + #expect(aString == item.type) + confirmed() + } + + let windowScene = UIApplication.shared.connectedScenes.first as! UIWindowScene + var completionSuccess: Bool? + let actionResult = plugin.windowScene( + windowScene, + performActionFor: item + ) { success in + completionSuccess = success + } + + #expect(actionResult, "windowScene performActionFor must return true.") + #expect(completionSuccess == true) + } + } + + @Test func sceneWillConnectToWithoutShortcut() { + let flutterApi: MockFlutterApi = MockFlutterApi() + let mockShortcutItemProvider = MockShortcutItemProvider() + + let plugin = QuickActionsPlugin( + flutterApi: flutterApi, + shortcutItemProvider: mockShortcutItemProvider) + + let connectResult = plugin.scene( + UIApplication.shared.connectedScenes.first!, + willConnectTo: UIApplication.shared.connectedScenes.first!.session, + options: nil) + #expect( + !connectResult, + "scene willConnectTo must return false if not launched from shortcut.") + } + + @Test func sceneDidBecomeActiveLaunchWithoutShortcut() async { + let flutterApi: MockFlutterApi = MockFlutterApi() + let mockShortcutItemProvider = MockShortcutItemProvider() + + let plugin = QuickActionsPlugin( + flutterApi: flutterApi, + shortcutItemProvider: mockShortcutItemProvider) + + let connectResult = plugin.scene( + UIApplication.shared.connectedScenes.first!, + willConnectTo: UIApplication.shared.connectedScenes.first!.session, + options: nil) + #expect(!connectResult) + + await confirmation("launchAction should not be called", expectedCount: 0) { confirmed in + flutterApi.launchActionCallback = { _ in + confirmed() + } + plugin.sceneDidBecomeActive(UIApplication.shared.connectedScenes.first!) + } + } + + @Test func sceneDidBecomeActiveLaunchWithShortcut() async { + let item = UIApplicationShortcutItem( + type: "SearchTheThing", + localizedTitle: "Search the thing", + localizedSubtitle: nil, + icon: UIApplicationShortcutIcon(templateImageName: "search_the_thing.png"), + userInfo: nil) + + let flutterApi: MockFlutterApi = MockFlutterApi() + let mockShortcutItemProvider = MockShortcutItemProvider() + + let plugin = QuickActionsPlugin( + flutterApi: flutterApi, + shortcutItemProvider: mockShortcutItemProvider) + + await confirmation("shortcut should be handled when scene becomes active") { confirmed in + flutterApi.launchActionCallback = { aString in + #expect(aString == item.type) + confirmed() + } + + let connectResult = plugin.handleSceneWillConnectTo(shortcutItem: item) + #expect(connectResult, "scene willConnectTo must return true when shortcut is provided.") + + plugin.sceneDidBecomeActive(UIApplication.shared.connectedScenes.first!) + } + } } diff --git a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml index 8917f495bf01..46a29f8dc9ee 100644 --- a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the quick_actions plugin. publish_to: none environment: - sdk: ^3.9.0 - flutter: ">=3.35.0" + sdk: ^3.10.0 + flutter: ">=3.38.0" dependencies: flutter: diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift index 3f2d91518a11..0ff0980c81d5 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift @@ -3,8 +3,11 @@ // found in the LICENSE file. import Flutter +import UIKit -public final class QuickActionsPlugin: NSObject, FlutterPlugin, IOSQuickActionsApi { +public final class QuickActionsPlugin: NSObject, FlutterPlugin, IOSQuickActionsApi, + FlutterSceneLifeCycleDelegate +{ public static func register(with registrar: FlutterPluginRegistrar) { let messenger = registrar.messenger() @@ -12,6 +15,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin, IOSQuickActionsA let instance = QuickActionsPlugin(flutterApi: flutterApi) IOSQuickActionsApiSetup.setUp(binaryMessenger: messenger, api: instance) registrar.addApplicationDelegate(instance) + registrar.addSceneDelegate(instance) } private let shortcutItemProvider: ShortcutItemProviding @@ -72,6 +76,46 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin, IOSQuickActionsA } } + // MARK: - FlutterSceneLifeCycleDelegate + + public func scene( + _ scene: UIScene, + willConnectTo session: UISceneSession, + options connectionOptions: UIScene.ConnectionOptions? + ) -> Bool { + return handleSceneWillConnectTo(shortcutItem: connectionOptions?.shortcutItem) + } + + func handleSceneWillConnectTo(shortcutItem: UIApplicationShortcutItem?) -> Bool { + if let shortcutItem { + // Keep hold of the shortcut type and handle it in the + // `sceneDidBecomeActive:` method once the Dart MethodChannel + // is initialized. + launchingShortcutType = shortcutItem.type + return true + } + return false + } + + public func sceneDidBecomeActive(_ scene: UIScene) { + if let shortcutType = launchingShortcutType { + handleShortcut(shortcutType) + launchingShortcutType = nil + } + } + + public func windowScene( + _ windowScene: UIWindowScene, + performActionFor shortcutItem: UIApplicationShortcutItem, + completionHandler: @escaping (Bool) -> Void + ) -> Bool { + handleShortcut(shortcutItem.type) + completionHandler(true) + return true + } + + // MARK: - Shortcut handling + func handleShortcut(_ shortcut: String) { flutterApi.launchAction(action: shortcut) { _ in // noop diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index 478edffea6ea..e1f48024ccf0 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -2,11 +2,11 @@ name: quick_actions_ios description: An implementation for the iOS platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.2.3 +version: 1.2.4 environment: - sdk: ^3.9.0 - flutter: ">=3.35.0" + sdk: ^3.10.0 + flutter: ">=3.38.0" flutter: plugin: From 4e8e8c44bb92d2cb0083193e80894656bac90748 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Fri, 27 Mar 2026 12:45:31 -0500 Subject: [PATCH 48/55] [two_dimensional_scrollables] Add regression test (#11376) Fixes https://github.com/flutter/flutter/issues/137112 This PR adds a regression test for flutter/flutter#137112, where TableView would crash when focusing a widget outside of the table while a previously focused TextField inside the table was scrolled out of view. While this issue appears to have been resolved by changes in the Flutter framework specifically flutter/flutter#135182 which addressed how focus keeps children alive in two-dimensional scrollables, this PR adds a dedicated test case to the package to ensure this behavior does not regress. ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- .../test/table_view/table_test.dart | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/packages/two_dimensional_scrollables/test/table_view/table_test.dart b/packages/two_dimensional_scrollables/test/table_view/table_test.dart index 50ec9d4640db..a59a3301a778 100644 --- a/packages/two_dimensional_scrollables/test/table_view/table_test.dart +++ b/packages/two_dimensional_scrollables/test/table_view/table_test.dart @@ -4175,6 +4175,105 @@ void main() { ); }, ); + + testWidgets( + 'Table does not crash when focusing outside of the table while focused text field is not in the view', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/137112 + final verticalController = ScrollController(); + final horizontalController = ScrollController(); + addTearDown(() { + verticalController.dispose(); + horizontalController.dispose(); + }); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: Column( + children: [ + const TextField(key: Key('outside_textfield')), + Expanded( + child: TableView.builder( + verticalDetails: ScrollableDetails.vertical( + controller: verticalController, + ), + horizontalDetails: ScrollableDetails.horizontal( + controller: horizontalController, + ), + cellBuilder: + (BuildContext context, TableVicinity vicinity) { + return TableViewCell( + child: Center( + child: TextField( + key: Key( + 'cell_${vicinity.row}_${vicinity.column}', + ), + ), + ), + ); + }, + columnCount: 20, + columnBuilder: (int index) { + return const TableSpan( + foregroundDecoration: TableSpanDecoration( + border: TableSpanBorder(trailing: BorderSide()), + ), + extent: FixedTableSpanExtent(100), + ); + }, + rowCount: 40, + rowBuilder: (int index) { + return TableSpan( + backgroundDecoration: TableSpanDecoration( + color: index.isEven ? Colors.purple[100] : null, + border: const TableSpanBorder( + trailing: BorderSide(width: 3), + ), + ), + extent: const FixedTableSpanExtent(50), + ); + }, + ), + ), + ], + ), + ), + ), + ); + + // 1. Select a TextField in the table. + // Use the vicinity from the original crash report. + const vicinity = TableVicinity(row: 5, column: 6); + final Finder cellTextField = find.byKey( + Key('cell_${vicinity.row}_${vicinity.column}'), + ); + // Bring it into view. + verticalController.jumpTo(250); + horizontalController.jumpTo(600); + await tester.pumpAndSettle(); + + await tester.tap(cellTextField); + await tester.pumpAndSettle(); + expect(FocusManager.instance.primaryFocus, isNotNull); + + // 2. Scroll until it disappears from the view, without unfocusing it. + verticalController.jumpTo(verticalController.offset + 1000); + await tester.pumpAndSettle(); + + // 3. Select another TextField outside of the table. + final Finder outsideTextField = find.byKey( + const Key('outside_textfield'), + ); + await tester.tap(outsideTextField); + await tester.pumpAndSettle(); + + // 4. Scroll back and ensure the table does not crash. + verticalController.jumpTo(verticalController.offset - 1000); + await tester.pumpAndSettle(); + expect(cellTextField, findsOneWidget); + }, + ); } class _NullBuildContext implements BuildContext, TwoDimensionalChildManager { From 312839a535064f6b4f5d663685d6d32b3eb7c73a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 27 Mar 2026 14:02:41 -0400 Subject: [PATCH 49/55] Roll Flutter from e79bf6cbc140 to fb03253e32ce (16 revisions) (#11379) https://github.com/flutter/flutter/compare/e79bf6cbc140...fb03253e32ce 2026-03-27 kevmoo@users.noreply.github.com flutter_driver: remove @internal annotation on field (flutter/flutter#184235) 2026-03-27 engine-flutter-autoroll@skia.org Roll Skia from 5299de75c97b to 8c705ac86366 (2 revisions) (flutter/flutter#184245) 2026-03-27 engine-flutter-autoroll@skia.org Roll Packages from 0dd241079156 to 7ae082a7f6cd (5 revisions) (flutter/flutter#184248) 2026-03-27 engine-flutter-autoroll@skia.org Roll Skia from 9beded929d5a to 5299de75c97b (1 revision) (flutter/flutter#184243) 2026-03-27 engine-flutter-autoroll@skia.org Roll Skia from 4f4f07084ef0 to 9beded929d5a (4 revisions) (flutter/flutter#184237) 2026-03-27 engine-flutter-autoroll@skia.org Roll Dart SDK from ea1bce22b45b to dfd1f8af3c52 (2 revisions) (flutter/flutter#184234) 2026-03-27 engine-flutter-autoroll@skia.org Roll Skia from 1b7154852825 to 4f4f07084ef0 (1 revision) (flutter/flutter#184231) 2026-03-27 engine-flutter-autoroll@skia.org Roll Skia from aec9a7ab7ed9 to 1b7154852825 (1 revision) (flutter/flutter#184230) 2026-03-27 34465683+rkishan516@users.noreply.github.com fix: show window after first frame callback (flutter/flutter#183454) 2026-03-27 engine-flutter-autoroll@skia.org Roll Dart SDK from 7587a31814c6 to ea1bce22b45b (1 revision) (flutter/flutter#184228) 2026-03-27 okorohelijah@google.com skip interactive keyboard tests (flutter/flutter#183757) 2026-03-26 git@reb0.org Build engine for windows_arm on beta and stable (flutter/flutter#176385) 2026-03-26 engine-flutter-autoroll@skia.org Roll Skia from bee5a06ef578 to aec9a7ab7ed9 (4 revisions) (flutter/flutter#184222) 2026-03-26 magder@google.com Update iOS/macOS flutter_tools CODEOWNERS (flutter/flutter#183287) 2026-03-26 evanwall@buffalo.edu Update changelog for 3.41.6 stable hotfix (flutter/flutter#184220) 2026-03-26 47866232+chunhtai@users.noreply.github.com Updates scroll cache extent doc (flutter/flutter#184142) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC stuartmorgan@google.com,tarrinneal@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 8c3ea6ad58ed..1623836863db 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -e79bf6cbc14078179ed09a6d203028a38ee9bd28 +fb03253e32ce6aba92872ed9c1224e999ec6abcb From 60eb967dbafd7db83fea8e6176e2ba2e67e404c0 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 27 Mar 2026 15:26:21 -0400 Subject: [PATCH 50/55] Roll Flutter (stable) from 2c9eb20739df to db50e20168db (6 revisions) (#11380) https://github.com/flutter/flutter/compare/2c9eb20739df...db50e20168db If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-stable-packages Please CC stuartmorgan@google.com,tarrinneal@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Flutter (stable): https://github.com/flutter/flutter/issues/new/choose To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index ad241bc2bef7..cab742975b85 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -2c9eb20739dfec95e2c74bd3dfa4601b0a8a36aa +db50e20168db8fee486b9abf32fc912de3bc5b6a From cd608608bca2ca5ca7c34716ad73ad6da222c519 Mon Sep 17 00:00:00 2001 From: Mohellebi Abdessalem <116356835+AbdeMohlbi@users.noreply.github.com> Date: Fri, 27 Mar 2026 21:18:38 +0100 Subject: [PATCH 51/55] [Animations] add example to `openCntainer` (#11189) Fixes the todo : `TODO(goderbauer): Add example animations and sample code.` ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. --- packages/animations/CHANGELOG.md | 3 +- .../animations/lib/src/open_container.dart | 41 ++++++++++++++++++- packages/animations/pubspec.yaml | 2 +- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/packages/animations/CHANGELOG.md b/packages/animations/CHANGELOG.md index 6d7110f9b8ec..0779bea39e8a 100644 --- a/packages/animations/CHANGELOG.md +++ b/packages/animations/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.1.2 * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. +* Adds an example of using `OpenContainer` ## 2.1.1 diff --git a/packages/animations/lib/src/open_container.dart b/packages/animations/lib/src/open_container.dart index 10dd2b2f5e70..4683c3597642 100644 --- a/packages/animations/lib/src/open_container.dart +++ b/packages/animations/lib/src/open_container.dart @@ -66,7 +66,46 @@ typedef ClosedCallback = void Function(S data); /// `T` refers to the type of data returned by the route when the container /// is closed. This value can be accessed in the `onClosed` function. /// -// TODO(goderbauer): Add example animations and sample code. +/// The following example shows an [OpenContainer] that transforms a blue +/// container widget into a full screen page using the Material container +/// transform animation. When the user taps the closed widget, the container +/// expands and morphs into the destination page defined in [openBuilder], +/// while the original widget from [closedBuilder] fades out during the +/// transition. +/// +/// ```dart +/// OpenContainer( +/// transitionDuration: const Duration(milliseconds: 500), +/// transitionType: ContainerTransitionType.fadeThrough, +/// openBuilder: (context, action) { +/// return Scaffold( +/// appBar: AppBar(title: const Text('Details Page')), +/// body: const Center( +/// child: Text( +/// 'This page opened with Container Transform animation', +/// style: TextStyle(fontSize: 18), +/// textAlign: TextAlign.center, +/// ), +/// ), +/// ); +/// }, +/// closedBuilder: (context, action) { +/// return Container( +/// width: 200, +/// height: 120, +/// alignment: Alignment.center, +/// decoration: BoxDecoration( +/// color: Colors.blue, +/// borderRadius: BorderRadius.circular(16), +/// ), +/// child: const Text( +/// 'Open Details', +/// style: TextStyle(color: Colors.white, fontSize: 18), +/// ), +/// ); +/// }, +/// ), +/// ``` /// /// See also: /// diff --git a/packages/animations/pubspec.yaml b/packages/animations/pubspec.yaml index 012218b3db2b..0670649c6e95 100644 --- a/packages/animations/pubspec.yaml +++ b/packages/animations/pubspec.yaml @@ -2,7 +2,7 @@ name: animations description: Fancy pre-built animations that can easily be integrated into any Flutter application. repository: https://github.com/flutter/packages/tree/main/packages/animations issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+animations%22 -version: 2.1.1 +version: 2.1.2 environment: sdk: ^3.9.0 From ea4c006d6e8eac6c4dc0e7aa6870be1f83735698 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 27 Mar 2026 16:29:18 -0400 Subject: [PATCH 52/55] Roll Flutter (stable) from 2c9eb20739df to db50e20168db (6 revisions) (#11380) https://github.com/flutter/flutter/compare/2c9eb20739df...db50e20168db If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-stable-packages Please CC stuartmorgan@google.com,tarrinneal@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Flutter (stable): https://github.com/flutter/flutter/issues/new/choose To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md From e8df95dc2e16d350b6255eda3b102da70310cad3 Mon Sep 17 00:00:00 2001 From: stuartmorgan-g Date: Fri, 27 Mar 2026 17:21:17 -0400 Subject: [PATCH 53/55] Remove CODEOWNERS (#11375) CODEOWNERS was originally added to deal with the problem of routing reviews to the right people, given the highly disparate ownership of packages in this repo. However, it has always had some significant drawbacks due the rigid implementation GitHub has for it, and some are getting worse: - Low-quality PRs that should be handled in initial triage were going directly to individual reviewers, who don't necessarily know what kinds of pre-review filters to apply, causing some wasted reviewer effort - The increase of agent-generated PRs is making this worse, and that trend will almost certainly continue to increase - Some PRs (e.g., rolling all the minimum SDK versions when a new `stable` is released) spam a lot of people who don't actually need to do the review, again wasting some people's time. - The way the new batch release process merges changes across branches will make this much more common. - Plugin PRs are routed to all reviewers at once. In some cases platform reviewers would review implementations before the cross-platform owner reviewed, and either asked for fundamental API changes, or decided it wasn't something we should do at all, which wastes reviewer time and is a terrible experience for the contributor. Ideally the cross-platform owners should sanity-check the proposed change before looping in platform implementation reviewers. - It's impossible to remove people who don't need to review for whatever reason. This means the state of the `Reviewers` section in a PR's sidebar often doesn't (and can't) reflect reality, making triage of current PR states much harder. The `triage-` label system that we have added more recently solves a lot of the problems that CODEOWNERS was meant to solve in the first place, without any of the downsides. It will also bring flutter/packages PR handling more in line with flutter/flutter PR handling, which makes our processes more coherent. Rather than eliminating the file entirely, I turned it into a markdown file that we can refer to. I no longer have repo tool enforcement however, to allow for changes in structure over time (e.g., for some low-traffic subteam-owned packages, they may prefer not have specific owners, and just triage to individuals in an ad-hoc way in their subteam triage). As a starting point it has the same people that the CODEOWNERs did, and we can iterate from there (or remove it later if it turns out that keeping it up to date isn't a good use of time). --- CODEOWNERS | 127 ------------ SUGGESTED_REVIEWERS.md | 187 ++++++++++++++++++ script/tool/lib/src/common/file_filters.dart | 2 +- .../src/repo_package_info_check_command.dart | 34 +--- script/tool/test/analyze_command_test.dart | 6 +- .../test/build_examples_command_test.dart | 2 +- .../tool/test/common/file_filters_test.dart | 2 +- script/tool/test/dart_test_command_test.dart | 2 +- .../test/drive_examples_command_test.dart | 2 +- .../test/firebase_test_lab_command_test.dart | 2 +- .../tool/test/native_test_command_test.dart | 2 +- .../repo_package_info_check_command_test.dart | 71 +------ 12 files changed, 199 insertions(+), 240 deletions(-) delete mode 100644 CODEOWNERS create mode 100644 SUGGESTED_REVIEWERS.md diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index a49a588717fc..000000000000 --- a/CODEOWNERS +++ /dev/null @@ -1,127 +0,0 @@ -# Below is a list of Flutter team members who are suggested reviewers -# for contributions to packages in this repository. -# -# These names are just suggestions. It is fine to have your changes -# reviewed by someone else. - -packages/animations/** @hannah-hyj -packages/camera/** @bparrishMines -packages/cross_file/** @stuartmorgan-g -packages/cupertino_ui/** @dkwingsmt -packages/extension_google_sign_in_as_googleapis_auth/** @stuartmorgan-g -packages/file_selector/** @stuartmorgan-g -packages/flutter_lints/** @chunhtai -packages/flutter_template_images/** @stuartmorgan-g -packages/go_router/** @chunhtai -packages/go_router_builder/** @chunhtai -packages/google_adsense/** @sokoloff06 @ditman -packages/google_identity_services_web/** @mdebbar -packages/google_fonts/** @Piinks -packages/google_maps_flutter/** @stuartmorgan-g -packages/google_sign_in/** @stuartmorgan-g -packages/image_picker/** @tarrinneal -packages/interactive_media_ads/** @bparrishMines -packages/in_app_purchase/** @bparrishMines -packages/local_auth/** @stuartmorgan-g -packages/material_ui/** @qunccccccc -packages/metrics_center/** @bkonyi -packages/multicast_dns/** @vashworth -packages/path_provider/** @stuartmorgan-g -packages/pigeon/** @tarrinneal -packages/platform/** @stuartmorgan-g -packages/plugin_platform_interface/** @stuartmorgan-g -packages/pointer_interceptor/** @ditman -packages/quick_actions/** @bparrishMines -packages/rfw/** @Hixie -packages/shared_preferences/** @tarrinneal -packages/standard_message_codec/** @stuartmorgan-g -packages/two_dimensional_scrollables/** @Piinks -packages/url_launcher/** @stuartmorgan-g -packages/vector_graphics/** @jtmcdole -packages/vector_graphics_codec/** @jtmcdole -packages/vector_graphics_compiler/** @jtmcdole -packages/video_player/** @tarrinneal -packages/web_benchmarks/** @yjbanov -packages/webview_flutter/** @bparrishMines -packages/xdg_directories/** @stuartmorgan-g -third_party/packages/cupertino_icons/** @victorsanni -third_party/packages/cupertino_icons/test/goldens/** @LongCatIsLooong -third_party/packages/flutter_svg/** @domesticmouse -third_party/packages/flutter_svg_test/** @domesticmouse -third_party/packages/mustache_template/** @bkonyi @parlough -third_party/packages/path_parsing/** @domesticmouse - -# Plugin platform implementation rules. These should stay last, since the last -# matching entry takes precedence. - -# - Web -packages/camera/camera_web/** @mdebbar -packages/file_selector/file_selector_web/** @mdebbar -packages/google_maps_flutter/google_maps_flutter_web/** @mdebbar -packages/google_sign_in/google_sign_in_web/** @mdebbar -packages/image_picker/image_picker_for_web/** @mdebbar -packages/pointer_interceptor/pointer_interceptor_web/** @mdebbar -packages/shared_preferences/shared_preferences_web/** @mdebbar -packages/url_launcher/url_launcher_web/** @mdebbar -packages/video_player/video_player_web/** @mdebbar -packages/webview_flutter/webview_flutter_web/** @mdebbar - -# - Android -packages/camera/camera_android/** @camsim99 -packages/camera/camera_android_camerax/** @camsim99 -packages/espresso/** @jesswrd -packages/file_selector/file_selector_android/** @mboetger -packages/flutter_plugin_android_lifecycle/** @reidbaker -packages/google_maps_flutter/google_maps_flutter_android/** @reidbaker -packages/google_sign_in/google_sign_in_android/** @reidbaker -packages/image_picker/image_picker_android/** @gmackall -packages/in_app_purchase/in_app_purchase_android/** @gmackall -packages/local_auth/local_auth_android/** @mboetger -packages/path_provider/path_provider_android/** @camsim99 -packages/quick_actions/quick_actions_android/** @jesswrd -packages/shared_preferences/shared_preferences_android/** @jesswrd -packages/url_launcher/url_launcher_android/** @gmackall -packages/video_player/video_player_android/** @mboetger -# Owned by ecosystem team for now during the wrapper evaluation. -packages/webview_flutter/webview_flutter_android/** @bparrishMines - -# - Darwin -packages/camera/camera_avfoundation/** @hellohuanlin @louisehsu -packages/file_selector/file_selector_ios/** @okorohelijah @vashworth -packages/file_selector/file_selector_macos/** @okorohelijah @vashworth -packages/google_maps_flutter/google_maps_flutter_ios/** @vashworth @LongCatIsLooong -packages/google_maps_flutter/google_maps_flutter_ios_sdk9/** @vashworth @LongCatIsLooong -packages/google_maps_flutter/google_maps_flutter_ios_sdk10/** @vashworth @LongCatIsLooong -packages/google_sign_in/google_sign_in_ios/** @LongCatIsLooong @okorohelijah -packages/image_picker/image_picker_ios/** @okorohelijah @vashworth -packages/image_picker/image_picker_macos/** @okorohelijah @vashworth -packages/in_app_purchase/in_app_purchase_storekit/** @louisehsu @LongCatIsLooong -packages/local_auth/local_auth_darwin/** @louisehsu @okorohelijah -packages/path_provider/path_provider_foundation/** @LongCatIsLooong @vashworth -packages/pointer_interceptor/pointer_interceptor_ios/** @louisehsu @hellohuanlin -packages/quick_actions/quick_actions_ios/** @louisehsu @LongCatIsLooong -packages/shared_preferences/shared_preferences_foundation/** @tarrinneal -packages/url_launcher/url_launcher_ios/** @vashworth @LongCatIsLooong -packages/url_launcher/url_launcher_macos/** @vashworth @LongCatIsLooong -packages/video_player/video_player_avfoundation/** @hellohuanlin @louisehsu -packages/webview_flutter/webview_flutter_wkwebview/** @LongCatIsLooong @hellohuanlin - -# - Linux -packages/file_selector/file_selector_linux/** @robert-ancell @stuartmorgan-g -packages/image_picker/image_picker_linux/** @robert-ancell @stuartmorgan-g -packages/path_provider/path_provider_linux/** @robert-ancell @stuartmorgan-g -packages/shared_preferences/shared_preferences_linux/** @robert-ancell @stuartmorgan-g -packages/url_launcher/url_launcher_linux/** @robert-ancell @stuartmorgan-g - -# - Windows -packages/camera/camera_windows/** @stuartmorgan-g -packages/file_selector/file_selector_windows/** @stuartmorgan-g -packages/image_picker/image_picker_windows/** @stuartmorgan-g -packages/local_auth/local_auth_windows/** @stuartmorgan-g -packages/path_provider/path_provider_windows/** @stuartmorgan-g -packages/shared_preferences/shared_preferences_windows/** @stuartmorgan-g -packages/url_launcher/url_launcher_windows/** @stuartmorgan-g - -# - DevTools extensions -# @adsonpleal is the actual maintainer of shared_preferences_tool but is not yet a committer, so can't be listed as the owner. -packages/shared_preferences/shared_preferences_tool/** @tarrinneal diff --git a/SUGGESTED_REVIEWERS.md b/SUGGESTED_REVIEWERS.md new file mode 100644 index 000000000000..ad9a954e7683 --- /dev/null +++ b/SUGGESTED_REVIEWERS.md @@ -0,0 +1,187 @@ +Below is a list of Flutter team members who are suggested reviewers +for contributions to packages in this repository. + +These names are just suggestions. It is fine to have your changes +reviewed by someone else. + +`animations`: + - @hannah-hyj + +`camera`: + - **Cross-platform**: @bparrishMines + - **Android**: @camsim99 + - **iOS**: @hellohuanlin, @louisehsu + - **Web**: @mdebbar + - **Windows**: @stuartmorgan-g + +`cross_file`: + - @stuartmorgan-g + +`cupertino_icons`: + - @victorsanni + +`cupertino_ui`: + - @dkwingsmt + +`espresso`: + - @jesswrd + +`extension_google_sign_in_as_googleapis_auth`: + - @stuartmorgan-g + +`file_selector`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @mboetger + - **iOS**: @okorohelijah, @vashworth + - **Linux**: @robert-ancell, @stuartmorgan-g + - **macOS**: @okorohelijah, @vashworth + - **Web**: @mdebbar + - **Windows**: @stuartmorgan-g + +`flutter_lints`: + - @chunhtai + +`flutter_plugin_android_lifecycle`: + - @reidbaker + +`flutter_svg, flutter_svg_test`: + - @domesticmouse + +`flutter_template_images`: + - @stuartmorgan-g + +`go_router / go_router_builder`: + - @chunhtai + +`google_adsense`: + - @sokoloff06, @ditman + +`google_identity_services_web`: + - @mdebbar + +`google_fonts`: + - @Piinks + +`google_maps_flutter`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @reidbaker + - **iOS**: @vashworth, @LongCatIsLooong + - **Web**: @mdebbar + +`google_sign_in`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @reidbaker + - **iOS**: @LongCatIsLooong, @okorohelijah + - **Web**: @mdebbar + +`image_picker`: + - **Cross-platform**: @tarrinneal + - **Android**: @gmackall + - **iOS**: @okorohelijah, @vashworth + - **Linux**: @robert-ancell, @stuartmorgan-g + - **macOS**: @okorohelijah, @vashworth + - **Web**: @mdebbar + - **Windows**: @stuartmorgan-g + +`interactive_media_ads`: + - @bparrishMines + +`in_app_purchase`: + - **Cross-platform**: @bparrishMines + - **Android**: @gmackall + - **iOS**: @louisehsu, @LongCatIsLooong + +`local_auth`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @mboetger + - **iOS/macOS**: @louisehsu, @okorohelijah + - **Windows**: @stuartmorgan-g + +`material_ui`: + - @qunccccccc + +`metrics_center`: + - @bkonyi + +`multicast_dns`: + - @vashworth + +`mustache_template`: + - @bkonyi, @parlough + +`path_parsing`: + - @domesticmouse + +`path_provider`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @camsim99 + - **iOS/macOS**: @LongCatIsLooong, @vashworth + - **Linux**: @robert-ancell, @stuartmorgan-g + - **Windows**: @stuartmorgan-g + +`pigeon`: + - @tarrinneal + +`platform`: + - @stuartmorgan-g + +`plugin_platform_interface`: + - @stuartmorgan-g + +`pointer_interceptor`: + - **Cross-platform**: @ditman + - **iOS**: @louisehsu, @hellohuanlin + - **Web**: @mdebbar + +`quick_actions`: + - **Cross-platform**: @bparrishMines + - **Android**: @jesswrd + - **iOS**: @louisehsu, @LongCatIsLooong + +`rfw`: + - @Hixie + +`shared_preferences`: + - **Cross-platform**: @tarrinneal + - **Android**: @jesswrd + - **iOS/macOS**: @tarrinneal + - **Linux**: @robert-ancell, @stuartmorgan-g + - **Windows**: @stuartmorgan-g + - **Web**: @mdebbar + - **Devtools**: @adsonpleal + +`standard_message_codec`: + - @stuartmorgan-g + +`two_dimensional_scrollables`: + - @Piinks + +`url_launcher`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @gmackall + - **iOS**: @vashworth, @LongCatIsLooong + - **Linux**: @robert-ancell, @stuartmorgan-g + - **macOS**: @vashworth, @LongCatIsLooong + - **Windows**: @stuartmorgan-g + - **Web**: @mdebbar + +`vector_graphics, vector_graphics_codec, vector_graphics_compiler`: + - @jtmcdole + +`video_player`: + - **Cross-platform**: @tarrinneal + - **Android**: @mboetger + - **iOS/macOS**: @hellohuanlin, @louisehsu + - **Web**: @mdebbar + +`web_benchmarks`: + - @yjbanov + +`webview_flutter`: + - **Cross-platform**: @bparrishMines + - **Android**: @bparrishMines + - **iOS/macOS**: @bparrishMines, @LongCatIsLooong, @hellohuanlin + - **Web**: @mdebbar + +`xdg_directories`: + - @stuartmorgan-g diff --git a/script/tool/lib/src/common/file_filters.dart b/script/tool/lib/src/common/file_filters.dart index 7a1bafd06a5c..90be24da8d03 100644 --- a/script/tool/lib/src/common/file_filters.dart +++ b/script/tool/lib/src/common/file_filters.dart @@ -9,10 +9,10 @@ bool isRepoLevelNonCodeImpactingFile(String path) { return [ 'AUTHORS', - 'CODEOWNERS', 'CONTRIBUTING.md', 'LICENSE', 'README.md', + 'SUGGESTED_REVIEWERS.md', 'AGENTS.md', // This deliberate lists specific files rather than excluding the whole // .github directory since it's better to have false negatives than to diff --git a/script/tool/lib/src/repo_package_info_check_command.dart b/script/tool/lib/src/repo_package_info_check_command.dart index c423d760ea85..1c213fd2d0f3 100644 --- a/script/tool/lib/src/repo_package_info_check_command.dart +++ b/script/tool/lib/src/repo_package_info_check_command.dart @@ -16,7 +16,7 @@ const int _exitBadTableEntry = 3; const int _exitUnknownPackageEntry = 4; /// A command to verify repository-level metadata about packages, such as -/// repo README and CODEOWNERS entries. +/// repo README and auto-label entries. class RepoPackageInfoCheckCommand extends PackageLoopingCommand { /// Creates Dependabot check command instance. RepoPackageInfoCheckCommand(super.packagesDir, {super.gitDir}); @@ -27,9 +27,6 @@ class RepoPackageInfoCheckCommand extends PackageLoopingCommand { final Map> _readmeTableEntries = >{}; - /// Packages with entries in CODEOWNERS. - final List _ownedPackages = []; - /// Packages with entries in labeler.yml. final List _autoLabeledPackages = []; @@ -82,25 +79,6 @@ class RepoPackageInfoCheckCommand extends PackageLoopingCommand { } } - // Extract all of the CODEOWNERS package entries. - final packageOwnershipPattern = RegExp( - r'^((?:third_party/)?packages/(?:[^/]*/)?([^/]*))/\*\*', - ); - for (final String line - in _repoRoot.childFile('CODEOWNERS').readAsLinesSync()) { - final RegExpMatch? match = packageOwnershipPattern.firstMatch(line); - if (match == null) { - continue; - } - final String path = match.group(1)!; - final String name = match.group(2)!; - if (!_repoRoot.childDirectory(path).existsSync()) { - printError('Unknown directory "$path" in CODEOWNERS'); - throw ToolExit(_exitUnknownPackageEntry); - } - _ownedPackages.add(name); - } - // Extract all of the lebeler.yml package entries. // Validate the match rules rather than the label itself, as the labels // don't always correspond 1:1 to packages and package names. @@ -126,16 +104,6 @@ class RepoPackageInfoCheckCommand extends PackageLoopingCommand { final String packageName = package.directory.basename; final errors = []; - // All packages should have an owner. - // Platform interface packages are considered to be owned by the app-facing - // package owner. - if (!(_ownedPackages.contains(packageName) || - package.isPlatformInterface && - _ownedPackages.contains(package.directory.parent.basename))) { - printError('${indentation}Missing CODEOWNERS entry.'); - errors.add('Missing CODEOWNERS entry'); - } - // All packages should have an auto-applied label. For plugins, only the // group needs a rule, so check the app-facing package. if (!(package.isFederated && !package.isAppFacing) && diff --git a/script/tool/test/analyze_command_test.dart b/script/tool/test/analyze_command_test.dart index 0509f8d25988..ef2a609579ac 100644 --- a/script/tool/test/analyze_command_test.dart +++ b/script/tool/test/analyze_command_test.dart @@ -758,7 +758,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), @@ -1064,7 +1064,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md packages/package_a/lib/foo.dart ''', @@ -1669,7 +1669,7 @@ packages/package_a/$file .gemini/config.yaml AGENTS.md README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md packages/package_a/lib/foo.dart ''', diff --git a/script/tool/test/build_examples_command_test.dart b/script/tool/test/build_examples_command_test.dart index b2f66c5dbd6f..2b8a8c8952fd 100644 --- a/script/tool/test/build_examples_command_test.dart +++ b/script/tool/test/build_examples_command_test.dart @@ -1133,7 +1133,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/common/file_filters_test.dart b/script/tool/test/common/file_filters_test.dart index 0143fb3dde30..dd06515509f2 100644 --- a/script/tool/test/common/file_filters_test.dart +++ b/script/tool/test/common/file_filters_test.dart @@ -9,10 +9,10 @@ void main() { group('isRepoLevelNonCodeImpactingFile', () { test('returns true for known non-code files', () { expect(isRepoLevelNonCodeImpactingFile('AUTHORS'), isTrue); - expect(isRepoLevelNonCodeImpactingFile('CODEOWNERS'), isTrue); expect(isRepoLevelNonCodeImpactingFile('CONTRIBUTING.md'), isTrue); expect(isRepoLevelNonCodeImpactingFile('LICENSE'), isTrue); expect(isRepoLevelNonCodeImpactingFile('README.md'), isTrue); + expect(isRepoLevelNonCodeImpactingFile('SUGGESTED_REVIEWERS.md'), isTrue); expect(isRepoLevelNonCodeImpactingFile('AGENTS.md'), isTrue); expect( isRepoLevelNonCodeImpactingFile('.github/PULL_REQUEST_TEMPLATE.md'), diff --git a/script/tool/test/dart_test_command_test.dart b/script/tool/test/dart_test_command_test.dart index 1a16a3703b3f..a6cac49ac0e7 100644 --- a/script/tool/test/dart_test_command_test.dart +++ b/script/tool/test/dart_test_command_test.dart @@ -881,7 +881,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/drive_examples_command_test.dart b/script/tool/test/drive_examples_command_test.dart index f4aebdb569ac..6d4e44ca748a 100644 --- a/script/tool/test/drive_examples_command_test.dart +++ b/script/tool/test/drive_examples_command_test.dart @@ -1801,7 +1801,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md .gitignore packages/package_a/CHANGELOG.md ''', diff --git a/script/tool/test/firebase_test_lab_command_test.dart b/script/tool/test/firebase_test_lab_command_test.dart index e469e1f2c645..2fd731ef8ad2 100644 --- a/script/tool/test/firebase_test_lab_command_test.dart +++ b/script/tool/test/firebase_test_lab_command_test.dart @@ -1068,7 +1068,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index 6c51ed7f2fd1..1a34ebf5acb5 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -492,7 +492,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/repo_package_info_check_command_test.dart b/script/tool/test/repo_package_info_check_command_test.dart index 341e0b2892c2..820c45ca6ce0 100644 --- a/script/tool/test/repo_package_info_check_command_test.dart +++ b/script/tool/test/repo_package_info_check_command_test.dart @@ -44,22 +44,6 @@ void main() { '''; } - void writeCodeOwners(List ownedPackages) { - final List subpaths = ownedPackages - .map( - (RepositoryPackage p) => p.isFederated - ? [ - p.directory.parent.basename, - p.directory.basename, - ].join('/') - : p.directory.basename, - ) - .toList(); - root.childFile('CODEOWNERS').writeAsStringSync(''' -${subpaths.map((String subpath) => 'packages/$subpath/** @someone').join('\n')} -'''); - } - String readmeTableEntry(String packageName) { final String encodedTag = Uri.encodeComponent('p: $packageName'); return '| [$packageName](./packages/$packageName/) | ' @@ -100,7 +84,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); final List output = await runCapturingPrint(runner, [ 'repo-package-info-check', @@ -130,7 +113,6 @@ ${readmeTableEntry(pluginName)} '''); writeAutoLabelerYaml([packages.first]); writeAutoLabelerYaml([packages.first]); - writeCodeOwners(packages); // 4 packages * 2 checks (git, gh) = 8 calls. // Default mocks in setUp cover 1 call each. We need 3 more each. @@ -162,7 +144,6 @@ ${readmeTableHeader()} ${readmeTableEntry('another_package')} '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -193,7 +174,6 @@ ${readmeTableHeader()} ${readmeTableEntry('another_package')} '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -237,7 +217,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -282,7 +261,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -329,7 +307,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -376,7 +353,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -423,7 +399,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -470,7 +445,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -496,53 +470,15 @@ $entry ); }); - test('fails for missing CODEOWNER', () async { - const packageName = 'a_package'; - final packages = [ - createFakePackage('a_package', packagesDir), - ]; - - root.childFile('README.md').writeAsStringSync(''' -${readmeTableHeader()} -${readmeTableEntry(packageName)} -'''); - writeAutoLabelerYaml(packages); - writeCodeOwners([]); - - Error? commandError; - final List output = await runCapturingPrint( - runner, - ['repo-package-info-check'], - errorHandler: (Error e) { - commandError = e; - }, - ); - - expect(commandError, isA()); - expect( - output, - containsAllInOrder([ - contains('Missing CODEOWNERS entry.'), - contains( - 'a_package:\n' - ' Missing CODEOWNERS entry', - ), - ]), - ); - }); - test('fails for missing auto-labeler entry', () async { const packageName = 'a_package'; - final packages = [ - createFakePackage('a_package', packagesDir), - ]; + createFakePackage('a_package', packagesDir); root.childFile('README.md').writeAsStringSync(''' ${readmeTableHeader()} ${readmeTableEntry(packageName)} '''); writeAutoLabelerYaml([]); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -578,7 +514,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); package.ciConfigFile.writeAsStringSync(''' release: @@ -603,7 +538,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); final List output = await runCapturingPrint(runner, [ 'repo-package-info-check', @@ -626,7 +560,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); package.ciConfigFile.writeAsStringSync(''' something: true '''); @@ -660,7 +593,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); package.ciConfigFile.writeAsStringSync(''' release: batch: 1 @@ -699,7 +631,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); return package; } From 2dc597c153c465b87abe5c6684d06308f72bc7f8 Mon Sep 17 00:00:00 2001 From: Tarrin Neal Date: Fri, 27 Mar 2026 17:23:22 -0700 Subject: [PATCH 54/55] [pigeon] bumps analyzer support to between 10 and 12 (#11358) Don't land this until [previous bump ](https://github.com/flutter/packages/pull/11346)lands fixes https://github.com/flutter/flutter/issues/184119 fixes https://github.com/flutter/flutter/issues/182064 fixes https://github.com/flutter/flutter/issues/184269 --- packages/go_router_builder/CHANGELOG.md | 4 ++++ packages/go_router_builder/pubspec.yaml | 4 ++-- packages/pigeon/CHANGELOG.md | 4 ++++ packages/pigeon/lib/src/generator_tools.dart | 2 +- .../pigeon/lib/src/pigeon_lib_internal.dart | 20 +++++++++---------- packages/pigeon/pubspec.yaml | 4 ++-- 6 files changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/go_router_builder/CHANGELOG.md b/packages/go_router_builder/CHANGELOG.md index f9e9da0393ab..498ba7174dcb 100644 --- a/packages/go_router_builder/CHANGELOG.md +++ b/packages/go_router_builder/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.2.1 + +* Adds support for analyzer 11 and 12. + ## 4.2.0 - Adds supports for `TypedQueryParameter` annotation. diff --git a/packages/go_router_builder/pubspec.yaml b/packages/go_router_builder/pubspec.yaml index 9985c37166a4..536b9c94b813 100644 --- a/packages/go_router_builder/pubspec.yaml +++ b/packages/go_router_builder/pubspec.yaml @@ -2,7 +2,7 @@ name: go_router_builder description: >- A builder that supports generated strongly-typed route helpers for package:go_router -version: 4.2.0 +version: 4.2.1 repository: https://github.com/flutter/packages/tree/main/packages/go_router_builder issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router_builder%22 @@ -11,7 +11,7 @@ environment: flutter: ">=3.35.0" dependencies: - analyzer: ">=8.2.0 <10.0.0" + analyzer: ">=8.2.0 <13.0.0" async: ^2.8.0 # TODO(piinks): Pin version once new stable rolls. build: ">=3.0.0 <5.0.0" diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 16ca19f5515a..368abc59a80f 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 26.3.3 + +* Updates `analyzer` dependency to support versions 10 through 12. + ## 26.3.2 * Updates `analyzer` dependency to support version 10. diff --git a/packages/pigeon/lib/src/generator_tools.dart b/packages/pigeon/lib/src/generator_tools.dart index e06ddf0bd228..604691d46d3e 100644 --- a/packages/pigeon/lib/src/generator_tools.dart +++ b/packages/pigeon/lib/src/generator_tools.dart @@ -15,7 +15,7 @@ import 'generator.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '26.3.2'; +const String pigeonVersion = '26.3.3'; /// Default plugin package name. const String defaultPluginPackageName = 'dev.flutter.pigeon'; diff --git a/packages/pigeon/lib/src/pigeon_lib_internal.dart b/packages/pigeon/lib/src/pigeon_lib_internal.dart index 19da4613ce42..617a901f37cc 100644 --- a/packages/pigeon/lib/src/pigeon_lib_internal.dart +++ b/packages/pigeon/lib/src/pigeon_lib_internal.dart @@ -1579,7 +1579,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { _errors.add( Error( message: - 'API "${node.name.lexeme}" can only have one API annotation but contains: ${node.metadata}', + 'API "${node.namePart.typeName.lexeme}" can only have one API annotation but contains: ${node.metadata}', lineNumber: calculateLineNumber(source, node.offset), ), ); @@ -1606,7 +1606,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { } _currentApi = AstHostApi( - name: node.name.lexeme, + name: node.namePart.typeName.lexeme, methods: [], dartHostTestHandler: dartHostTestHandler, documentationComments: _documentationCommentsParser( @@ -1615,7 +1615,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { ); } else if (_hasMetadata(node.metadata, 'FlutterApi')) { _currentApi = AstFlutterApi( - name: node.name.lexeme, + name: node.namePart.typeName.lexeme, methods: [], documentationComments: _documentationCommentsParser( node.documentationComment?.tokens, @@ -1642,7 +1642,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { _errors.add( Error( message: - 'ProxyApis should either set the super class in the annotation OR use extends: ("${node.name.lexeme}").', + 'ProxyApis should either set the super class in the annotation OR use extends: ("${node.namePart.typeName.lexeme}").', lineNumber: calculateLineNumber(source, node.offset), ), ); @@ -1713,7 +1713,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { } _currentApi = AstProxyApi( - name: node.name.lexeme, + name: node.namePart.typeName.lexeme, methods: [], constructors: [], fields: [], @@ -1760,7 +1760,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { ); } _currentApi = AstEventChannelApi( - name: node.name.lexeme, + name: node.namePart.typeName.lexeme, methods: [], swiftOptions: swiftOptions, kotlinOptions: kotlinOptions, @@ -1771,7 +1771,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { } } else { _currentClass = Class( - name: node.name.lexeme, + name: node.namePart.typeName.lexeme, fields: [], superClassName: node.implementsClause?.interfaces.first.name.toString() ?? @@ -1929,7 +1929,7 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { } if (enclosingDeclaration is dart_ast.ClassDeclaration) { erroneousDeclaration = - '${enclosingDeclaration.name.lexeme}.$erroneousDeclaration'; + '${enclosingDeclaration.namePart.typeName}.$erroneousDeclaration'; } _errors.add( Error( @@ -1986,8 +1986,8 @@ class RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { Object? visitEnumDeclaration(dart_ast.EnumDeclaration node) { _enums.add( Enum( - name: node.name.lexeme, - members: node.constants + name: node.namePart.typeName.lexeme, + members: node.body.constants .map( (dart_ast.EnumConstantDeclaration e) => EnumMember( name: e.name.lexeme, diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 7a1359aec30c..637fb3f6fe6b 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,13 +2,13 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22 -version: 26.3.2 # This must match the version in lib/src/generator_tools.dart +version: 26.3.3 # This must match the version in lib/src/generator_tools.dart environment: sdk: ^3.9.0 dependencies: - analyzer: ">=8.0.0 <11.0.0" + analyzer: ">=10.0.0 <13.0.0" args: ^2.5.0 code_builder: ^4.10.0 collection: ^1.15.0 From 582f0e7149742a15525a297cd3d4db2b7be25a24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 09:31:30 +0000 Subject: [PATCH 55/55] Bump lewagon/wait-on-check-action from 1.5.0 to 1.6.0 in the all-github-actions group (#11388) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the all-github-actions group with 1 update: [lewagon/wait-on-check-action](https://github.com/lewagon/wait-on-check-action). Updates `lewagon/wait-on-check-action` from 1.5.0 to 1.6.0
Release notes

Sourced from lewagon/wait-on-check-action's releases.

v1.6.0

Added

  • Add checks-discovery-timeout option (#139)
Changelog

Sourced from lewagon/wait-on-check-action's changelog.

Changelog

Unreleased

v1.6.0 - 2026-03-29

Added

  • Add checks-discovery-timeout option

v1.5.0 - 2026-01-25

Added

  • Add fail-on-no-checks option

Fixed

  • Bump rexml to 3.4.2

v1.4.1 - 2025-09-21

Fixed

  • Linux ARM64 support

v1.4.0 - 2025-06-27

Added

  • Add class docs
  • Add frozen_string_literal comments

Removed

  • Remove OpenStruct instances
  • Remove Double quotes
  • Remove Double assertions
  • Remove allow_any uses

Fixed

  • Fix spelling mistakes
  • Fix CI gem caching
  • Convert config.verbose to a boolean
  • Bump rexml to 3.3.9

v1.3.4 - 2024-04-04

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=lewagon/wait-on-check-action&package-manager=github_actions&previous-version=1.5.0&new-version=1.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
--- .github/workflows/release.yml | 4 ++-- .github/workflows/reusable_release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c86bbd62a607..ab14d6890c24 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,7 +40,7 @@ jobs: # because there doesn't appear to be anything to wait for. To avoid that, # explicitly wait for one LUCI test by name first. - name: Wait for test check-in - uses: lewagon/wait-on-check-action@74049309dfeff245fe8009a0137eacf28136cb3c + uses: lewagon/wait-on-check-action@a08fbe2b86f9336198f33be6ad9c16b96f92799c with: ref: ${{ github.sha }} check-name: 'Linux ci_yaml packages roller' @@ -52,7 +52,7 @@ jobs: # This workflow should be the last to run. So wait for all the other tests to succeed. - name: Wait on all tests - uses: lewagon/wait-on-check-action@74049309dfeff245fe8009a0137eacf28136cb3c + uses: lewagon/wait-on-check-action@a08fbe2b86f9336198f33be6ad9c16b96f92799c with: ref: ${{ github.sha }} running-workflow-name: 'release' diff --git a/.github/workflows/reusable_release.yml b/.github/workflows/reusable_release.yml index 6d519bec1e0b..e6fc6f2d1c4c 100644 --- a/.github/workflows/reusable_release.yml +++ b/.github/workflows/reusable_release.yml @@ -44,7 +44,7 @@ jobs: # because there doesn't appear to be anything to wait for. To avoid that, # explicitly wait for one LUCI test by name first. - name: Wait for test check-in - uses: lewagon/wait-on-check-action@74049309dfeff245fe8009a0137eacf28136cb3c + uses: lewagon/wait-on-check-action@a08fbe2b86f9336198f33be6ad9c16b96f92799c with: ref: ${{ github.sha }} check-name: 'Linux ci_yaml packages roller' @@ -56,7 +56,7 @@ jobs: # This workflow should be the last to run. So wait for all the other tests to succeed. - name: Wait on all tests - uses: lewagon/wait-on-check-action@74049309dfeff245fe8009a0137eacf28136cb3c + uses: lewagon/wait-on-check-action@a08fbe2b86f9336198f33be6ad9c16b96f92799c with: ref: ${{ github.sha }} running-workflow-name: 'release'