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 b2b80b419e8..4628305517c 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.15.9 + +* Converts top-level plugin implementation to Swift. + ## 2.15.8 * Replaces internal use of deprecated methods. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/ExtractIconFromDataTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/ExtractIconFromDataTests.m index d90ce8491d1..4d7da98cac5 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/ExtractIconFromDataTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/ExtractIconFromDataTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; #import diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m index 28f2225931f..f9baaa10184 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMClusterManagersControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMConversionsUtilsTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMConversionsUtilsTests.m index 127f5b4c280..8f24f77836c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMConversionsUtilsTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FGMConversionsUtilsTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FLTGoogleMapHeatmapControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FLTGoogleMapHeatmapControllerTests.m index 2f345e02c57..f3752f15f03 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FLTGoogleMapHeatmapControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/FLTGoogleMapHeatmapControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; @import GoogleMapsUtils; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsCircleControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsCircleControllerTests.m index b6da47435aa..7514a70704f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsCircleControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsCircleControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsGroundOverlayControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsGroundOverlayControllerTests.m index 03ec813c644..4d33c1eb564 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsGroundOverlayControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsGroundOverlayControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsMarkerControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsMarkerControllerTests.m index 55272563162..8dbe833b4b2 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsMarkerControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsMarkerControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolygonControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolygonControllerTests.m index 77c5a962967..2cb386e0fc5 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolygonControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolygonControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolylineControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolylineControllerTests.m index 848c9c71f41..4ec56c66fb8 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolylineControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsPolylineControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m index 41e6f5d51eb..35c38601160 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; @@ -11,10 +10,6 @@ #import "FGMCATransactionWrapper.h" #import "PartiallyMockedMapView.h" -@interface FLTGoogleMapFactory (Test) -@property(strong, nonatomic, readonly) id sharedMapServices; -@end - @interface GoogleMapsTests : XCTestCase @end @@ -25,7 +20,7 @@ - (UIImage *)handleResultTile:(nullable UIImage *)tileImage; @implementation GoogleMapsTests - (void)testPlugin { - FLTGoogleMapsPlugin *plugin = [[FLTGoogleMapsPlugin alloc] init]; + GoogleMapsPlugin *plugin = [[GoogleMapsPlugin alloc] init]; XCTAssertNotNil(plugin); } @@ -56,18 +51,6 @@ - (void)testFrameObserver { XCTAssertEqual(mapView.frameObserverCount, 0); } -- (void)testMapsServiceSync { - id registrar = OCMProtocolMock(@protocol(FlutterPluginRegistrar)); - FLTGoogleMapFactory *factory1 = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar]; - XCTAssertNotNil(factory1.sharedMapServices); - FLTGoogleMapFactory *factory2 = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar]; - // Test pointer equality, should be same retained singleton +[GMSServices sharedServices] object. - // Retaining the opaque object should be enough to avoid multiple internal initializations, - // but don't test the internals of the GoogleMaps API. Assume that it does what is documented. - // https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_services#a436e03c32b1c0be74e072310a7158831 - XCTAssertEqual(factory1.sharedMapServices, factory2.sharedMapServices); -} - - (void)testHandleResultTileDownsamplesWideGamutImages { FLTTileProviderController *controller = [[FLTTileProviderController alloc] init]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTileOverlayControllerTests.m b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTileOverlayControllerTests.m index a727386bfd2..e7b1118a8d5 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTileOverlayControllerTests.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/GoogleMapsTileOverlayControllerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import google_maps_flutter_ios; -@import google_maps_flutter_ios.Test; @import XCTest; @import GoogleMaps; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h deleted file mode 100644 index 59341252e00..00000000000 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.h +++ /dev/null @@ -1,20 +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 "FGMClusterManagersController.h" -#import "GoogleMapCircleController.h" -#import "GoogleMapController.h" -#import "GoogleMapMarkerController.h" -#import "GoogleMapPolygonController.h" -#import "GoogleMapPolylineController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FLTGoogleMapsPlugin : NSObject -@end - -NS_ASSUME_NONNULL_END diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.m deleted file mode 100644 index 86391b40892..00000000000 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.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 "FLTGoogleMapsPlugin.h" - -#pragma mark - GoogleMaps plugin implementation - -@implementation FLTGoogleMapsPlugin - -+ (void)registerWithRegistrar:(NSObject *)registrar { - FLTGoogleMapFactory *googleMapFactory = [[FLTGoogleMapFactory alloc] initWithRegistrar:registrar]; - [registrar registerViewFactory:googleMapFactory - withId:@"plugins.flutter.dev/google_maps_ios" - gestureRecognizersBlockingPolicy: - FlutterPlatformViewGestureRecognizersBlockingPolicyWaitUntilTouchesEnded]; -} - -@end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.swift b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.swift new file mode 100644 index 00000000000..5235f6c2374 --- /dev/null +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapsPlugin.swift @@ -0,0 +1,42 @@ +// 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 GoogleMaps + +public class GoogleMapsPlugin: NSObject, FlutterPlugin { + + public static func register(with registrar: FlutterPluginRegistrar) { + let factory = GoogleMapFactory(registrar: registrar) + registrar.register( + factory, withId: "plugins.flutter.dev/google_maps_ios", + gestureRecognizersBlockingPolicy: + FlutterPlatformViewGestureRecognizersBlockingPolicyWaitUntilTouchesEnded) + } + +} + +class GoogleMapFactory: NSObject, FlutterPlatformViewFactory { + weak var registrar: FlutterPluginRegistrar? + static var sharedMapServices = GMSServices() + init(registrar: FlutterPluginRegistrar) { + self.registrar = registrar + } + + func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?) + -> any FlutterPlatformView + { + // Precache shared map services, if needed. Initializing this prepares GMSServices + // on a background thread controlled by the GoogleMaps framework. + _ = GoogleMapFactory.sharedMapServices + + return FLTGoogleMapController( + frame: frame, viewIdentifier: viewId, + creationParameters: args as! FGMPlatformMapViewCreationParams, registrar: registrar!) + } + + func createArgsCodec() -> any FlutterMessageCodec & NSObjectProtocol { + return FGMGetMessagesCodec() + } +} diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h index 51dba3aa962..20555aab816 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.h @@ -26,9 +26,4 @@ NS_ASSUME_NONNULL_BEGIN - (nullable GMSCameraPosition *)cameraPosition; @end -// Allows the engine to create new Google Map instances. -@interface FLTGoogleMapFactory : NSObject -- (instancetype)initWithRegistrar:(NSObject *)registrar; -@end - NS_ASSUME_NONNULL_END diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m index dc8d6fa6db2..d8b728bc1a0 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m @@ -14,58 +14,6 @@ #import "FLTGoogleMapTileOverlayController.h" #import "messages.g.h" -#pragma mark - Conversion of JSON-like values sent via platform channels. Forward declarations. - -@interface FLTGoogleMapFactory () - -@property(weak, nonatomic) NSObject *registrar; -@property(strong, nonatomic, readonly) id sharedMapServices; - -@end - -@implementation FLTGoogleMapFactory - -@synthesize sharedMapServices = _sharedMapServices; - -- (instancetype)initWithRegistrar:(NSObject *)registrar { - self = [super init]; - if (self) { - _registrar = registrar; - } - return self; -} - -- (NSObject *)createArgsCodec { - return FGMGetMessagesCodec(); -} - -- (NSObject *)createWithFrame:(CGRect)frame - viewIdentifier:(int64_t)viewId - arguments:(id _Nullable)args { - // Precache shared map services, if needed. - // Retain the shared map services singleton, don't use the result for anything. - (void)[self sharedMapServices]; - - return [[FLTGoogleMapController alloc] initWithFrame:frame - viewIdentifier:viewId - creationParameters:args - registrar:self.registrar]; -} - -- (id)sharedMapServices { - if (_sharedMapServices == nil) { - // Calling this prepares GMSServices on a background thread controlled - // by the GoogleMaps framework. - // Retain the singleton to cache the initialization work across all map views. - _sharedMapServices = [GMSServices sharedServices]; - } - return _sharedMapServices; -} - -@end - -#pragma mark - - /// Private declarations of the FGMMapCallHandler. @interface FGMMapCallHandler () - (instancetype)initWithMapController:(nonnull FLTGoogleMapController *)controller diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/google_maps_flutter_ios-umbrella.h b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/google_maps_flutter_ios-umbrella.h deleted file mode 100644 index e35e8c3aa70..00000000000 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/google_maps_flutter_ios-umbrella.h +++ /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 -#import -#import -#import -#import -#import -#import -#import -#import -#import - -FOUNDATION_EXPORT double google_maps_flutterVersionNumber; -FOUNDATION_EXPORT const unsigned char google_maps_flutterVersionString[]; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/google_maps_flutter_ios.modulemap b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/google_maps_flutter_ios.modulemap deleted file mode 100644 index 3b0f295f9aa..00000000000 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/google_maps_flutter_ios.modulemap +++ /dev/null @@ -1,17 +0,0 @@ -framework module google_maps_flutter_ios { - umbrella header "google_maps_flutter_ios-umbrella.h" - - export * - module * { export * } - - explicit module Test { - header "FGMGroundOverlayController_Test.h" - header "FLTGoogleMapHeatmapController_Test.h" - header "FLTGoogleMapTileOverlayController_Test.h" - header "GoogleMapCircleController_Test.h" - header "GoogleMapController_Test.h" - header "GoogleMapMarkerController_Test.h" - header "GoogleMapPolygonController_Test.h" - header "GoogleMapPolylineController_Test.h" - } -} 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 f744daa6853..f0175c9b02f 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 @@ -14,9 +14,8 @@ Downloaded by pub (not CocoaPods). s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } s.source = { :http => 'https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter/ios' } s.documentation_url = 'https://pub.dev/packages/google_maps_flutter_ios' - s.source_files = 'Classes/**/*.{h,m}' + s.source_files = 'Classes/**/*.{h,m,swift}' s.public_header_files = 'Classes/**/*.h' - s.module_map = 'Classes/google_maps_flutter_ios.modulemap' s.dependency 'Flutter' # Allow any version up to the next breaking change after the latest version that # has been confirmed to be compatible via an example in examples/. See discussion @@ -37,5 +36,6 @@ Downloaded by pub (not CocoaPods). 'LIBRARY_SEARCH_PATHS' => '$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)/ $(SDKROOT)/usr/lib/swift', 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) /usr/lib/swift', } + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.resource_bundles = {'google_maps_flutter_ios_privacy' => ['Resources/PrivacyInfo.xcprivacy']} end 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 eb4fe6d3a4e..cf6e5c81ac7 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.15.8 +version: 2.15.9 environment: sdk: ^3.8.0 @@ -13,7 +13,7 @@ flutter: implements: google_maps_flutter platforms: ios: - pluginClass: FLTGoogleMapsPlugin + pluginClass: GoogleMapsPlugin dartPluginClass: GoogleMapsFlutterIOS dependencies: