From 2290472bcf83574a1a70d9708dd0289b8482ac40 Mon Sep 17 00:00:00 2001 From: Louise Hsu Date: Fri, 22 Mar 2024 16:02:18 -0700 Subject: [PATCH 1/8] remove extra proj files --- .../FLTGoogleMapTileOverlayController.m | 76 ++++++++++++------- 1 file changed, 47 insertions(+), 29 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m index 5863697d7b9b..9253029b6e09 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m @@ -122,37 +122,55 @@ - (void)requestTileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom receiver:(id)receiver { - [self.methodChannel - invokeMethod:@"tileOverlay#getTile" - arguments:@{ - @"tileOverlayId" : self.tileOverlayIdentifier, - @"x" : @(x), - @"y" : @(y), - @"zoom" : @(zoom) - } - result:^(id _Nullable result) { - UIImage *tileImage; - if ([result isKindOfClass:[NSDictionary class]]) { - FlutterStandardTypedData *typedData = (FlutterStandardTypedData *)result[@"data"]; - if (typedData == nil) { - tileImage = kGMSTileLayerNoTile; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.methodChannel + invokeMethod:@"tileOverlay#getTile" + arguments:@{ + @"tileOverlayId" : self.tileOverlayIdentifier, + @"x" : @(x), + @"y" : @(y), + @"zoom" : @(zoom) + } + result:^(id _Nullable result) { + UIImage *tileImage; + if ([result isKindOfClass:[NSDictionary class]]) { + FlutterStandardTypedData *typedData = (FlutterStandardTypedData *)result[@"data"]; + if (typedData == nil) { + tileImage = kGMSTileLayerNoTile; + } else { + tileImage = [UIImage imageWithData:typedData.data]; + CGImageRef imageRef = tileImage.CGImage; + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + bool isFloat = (bitmapInfo && kCGBitmapFloatComponents); + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + // Engine use f16 pixel format for wide gamut images + // If it is wide gamut, we want to downsample it + if (isFloat & (bitsPerComponent == 16)) { + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = CGBitmapContextCreate(nil, tileImage.size.width, tileImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast); + CGContextDrawImage(context, CGRectMake(0, 0, tileImage.size.width, tileImage.size.height), tileImage.CGImage); + CGImageRef image = CGBitmapContextCreateImage(context); + tileImage = [UIImage imageWithCGImage:image]; + CGImageRelease(image); + CGContextRelease(context); + CGColorSpaceRelease(colorSpace); + } + } } else { - tileImage = [UIImage imageWithData:typedData.data]; - } - } else { - if ([result isKindOfClass:[FlutterError class]]) { - FlutterError *error = (FlutterError *)result; - NSLog(@"Can't get tile: errorCode = %@, errorMessage = %@, details = %@", - [error code], [error message], [error details]); - } - if ([result isKindOfClass:[FlutterMethodNotImplemented class]]) { - NSLog(@"Can't get tile: notImplemented"); + if ([result isKindOfClass:[FlutterError class]]) { + FlutterError *error = (FlutterError *)result; + NSLog(@"Can't get tile: errorCode = %@, errorMessage = %@, details = %@", + [error code], [error message], [error details]); + } + if ([result isKindOfClass:[FlutterMethodNotImplemented class]]) { + NSLog(@"Can't get tile: notImplemented"); + } + tileImage = kGMSTileLayerNoTile; } - tileImage = kGMSTileLayerNoTile; - } - - [receiver receiveTileWithX:x y:y zoom:zoom image:tileImage]; - }]; + [receiver receiveTileWithX:x y:y zoom:zoom image:tileImage]; + }]; + }); } @end From c80245b2a31f38e6df53d6c58d0c5e847da04196 Mon Sep 17 00:00:00 2001 From: Louise Hsu Date: Fri, 22 Mar 2024 16:13:52 -0700 Subject: [PATCH 2/8] delicious formatting --- .../FLTGoogleMapTileOverlayController.m | 97 ++++++++++--------- 1 file changed, 50 insertions(+), 47 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m index 9253029b6e09..3bc5cd4d733a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m @@ -123,53 +123,56 @@ - (void)requestTileForX:(NSUInteger)x zoom:(NSUInteger)zoom receiver:(id)receiver { dispatch_async(dispatch_get_main_queue(), ^{ - [self.methodChannel - invokeMethod:@"tileOverlay#getTile" - arguments:@{ - @"tileOverlayId" : self.tileOverlayIdentifier, - @"x" : @(x), - @"y" : @(y), - @"zoom" : @(zoom) - } - result:^(id _Nullable result) { - UIImage *tileImage; - if ([result isKindOfClass:[NSDictionary class]]) { - FlutterStandardTypedData *typedData = (FlutterStandardTypedData *)result[@"data"]; - if (typedData == nil) { - tileImage = kGMSTileLayerNoTile; - } else { - tileImage = [UIImage imageWithData:typedData.data]; - CGImageRef imageRef = tileImage.CGImage; - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - bool isFloat = (bitmapInfo && kCGBitmapFloatComponents); - size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); - - // Engine use f16 pixel format for wide gamut images - // If it is wide gamut, we want to downsample it - if (isFloat & (bitsPerComponent == 16)) { - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef context = CGBitmapContextCreate(nil, tileImage.size.width, tileImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast); - CGContextDrawImage(context, CGRectMake(0, 0, tileImage.size.width, tileImage.size.height), tileImage.CGImage); - CGImageRef image = CGBitmapContextCreateImage(context); - tileImage = [UIImage imageWithCGImage:image]; - CGImageRelease(image); - CGContextRelease(context); - CGColorSpaceRelease(colorSpace); - } - } - } else { - if ([result isKindOfClass:[FlutterError class]]) { - FlutterError *error = (FlutterError *)result; - NSLog(@"Can't get tile: errorCode = %@, errorMessage = %@, details = %@", - [error code], [error message], [error details]); - } - if ([result isKindOfClass:[FlutterMethodNotImplemented class]]) { - NSLog(@"Can't get tile: notImplemented"); - } - tileImage = kGMSTileLayerNoTile; - } - [receiver receiveTileWithX:x y:y zoom:zoom image:tileImage]; - }]; + [self.methodChannel invokeMethod:@"tileOverlay#getTile" + arguments:@{ + @"tileOverlayId" : self.tileOverlayIdentifier, + @"x" : @(x), + @"y" : @(y), + @"zoom" : @(zoom) + } + result:^(id _Nullable result) { + UIImage *tileImage; + if ([result isKindOfClass:[NSDictionary class]]) { + FlutterStandardTypedData *typedData = (FlutterStandardTypedData *)result[@"data"]; + if (typedData == nil) { + tileImage = kGMSTileLayerNoTile; + } else { + tileImage = [UIImage imageWithData:typedData.data]; + CGImageRef imageRef = tileImage.CGImage; + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + bool isFloat = (bitmapInfo && kCGBitmapFloatComponents); + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + // Engine use f16 pixel format for wide gamut images + // If it is wide gamut, we want to downsample it + if (isFloat & (bitsPerComponent == 16)) { + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = + CGBitmapContextCreate(nil, tileImage.size.width, tileImage.size.height, 8, 0, + colorSpace, kCGImageAlphaPremultipliedLast); + CGContextDrawImage(context, + CGRectMake(0, 0, tileImage.size.width, tileImage.size.height), + tileImage.CGImage); + CGImageRef image = CGBitmapContextCreateImage(context); + tileImage = [UIImage imageWithCGImage:image]; + CGImageRelease(image); + CGContextRelease(context); + CGColorSpaceRelease(colorSpace); + } + } + } else { + if ([result isKindOfClass:[FlutterError class]]) { + FlutterError *error = (FlutterError *)result; + NSLog(@"Can't get tile: errorCode = %@, errorMessage = %@, details = %@", + [error code], [error message], [error details]); + } + if ([result isKindOfClass:[FlutterMethodNotImplemented class]]) { + NSLog(@"Can't get tile: notImplemented"); + } + tileImage = kGMSTileLayerNoTile; + } + [receiver receiveTileWithX:x y:y zoom:zoom image:tileImage]; + }]; }); } From 5d95c7dc5cf249c8157f28901d3a7139633f7905 Mon Sep 17 00:00:00 2001 From: Louise Hsu Date: Tue, 26 Mar 2024 16:44:23 -0700 Subject: [PATCH 3/8] add test --- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 135 +++++++++++++++++- .../ios14/ios/RunnerTests/GoogleMapsTests.m | 20 +++ .../FLTGoogleMapTileOverlayController.m | 48 ++++--- 4 files changed, 181 insertions(+), 24 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index e271ffe8da9a..f8d70602adf7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ Date: Tue, 26 Mar 2024 16:45:52 -0700 Subject: [PATCH 4/8] missed asset file oopsies --- .../ios14/ios/RunnerTests/assets/widegamut.png | Bin 0 -> 3025 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/assets/widegamut.png diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/assets/widegamut.png b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/RunnerTests/assets/widegamut.png new file mode 100644 index 0000000000000000000000000000000000000000..32f032bae3de42c8c7ba9529d2d18ad41e81bede GIT binary patch literal 3025 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 b>|umk_w!q81@)IS|E7FBS2Ip|gs1%tSx05K literal 0 HcmV?d00001 From efb9f4df26a1bdc4ea892cea01b16de62d423c97 Mon Sep 17 00:00:00 2001 From: Louise Hsu Date: Tue, 26 Mar 2024 19:25:38 -0700 Subject: [PATCH 5/8] pr updates, removed lingering RunnerUITest references --- .../ios/Runner.xcodeproj/project.pbxproj | 131 +----------------- .../ios14/ios/RunnerTests/GoogleMapsTests.m | 10 +- .../FLTGoogleMapTileOverlayController.m | 3 +- 3 files changed, 10 insertions(+), 134 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/Runner.xcodeproj/project.pbxproj b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/Runner.xcodeproj/project.pbxproj index 4a674c741fd3..e8c5c23b19fa 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios14/ios/Runner.xcodeproj/project.pbxproj @@ -23,13 +23,6 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - F26930352BB36EF300BF17C4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 97C146E61CF9000F007C117D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 97C146ED1CF9000F007C117D; - remoteInfo = Runner; - }; F7151F15265D7ED70028CB91 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 97C146E61CF9000F007C117D /* Project object */; @@ -76,7 +69,6 @@ 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 = ""; }; F267F68029D1A4E2E4C572A7 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F269302F2BB36EF300BF17C4 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 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 = ""; }; @@ -92,13 +84,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F269302C2BB36EF300BF17C4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; F7151F0D265D7ED70028CB91 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -149,7 +134,6 @@ children = ( 97C146EE1CF9000F007C117D /* Runner.app */, F7151F10265D7ED70028CB91 /* RunnerTests.xctest */, - F269302F2BB36EF300BF17C4 /* RunnerUITests.xctest */, ); name = Products; sourceTree = ""; @@ -226,24 +210,6 @@ productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; }; - F269302E2BB36EF300BF17C4 /* RunnerUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = F26930392BB36EF300BF17C4 /* Build configuration list for PBXNativeTarget "RunnerUITests" */; - buildPhases = ( - F269302B2BB36EF300BF17C4 /* Sources */, - F269302C2BB36EF300BF17C4 /* Frameworks */, - F269302D2BB36EF300BF17C4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - F26930362BB36EF300BF17C4 /* PBXTargetDependency */, - ); - name = RunnerUITests; - productName = RunnerUITests; - productReference = F269302F2BB36EF300BF17C4 /* RunnerUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; F7151F0F265D7ED70028CB91 /* RunnerTests */ = { isa = PBXNativeTarget; buildConfigurationList = F7151F19265D7ED70028CB91 /* Build configuration list for PBXNativeTarget "RunnerTests" */; @@ -276,10 +242,6 @@ 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; }; - F269302E2BB36EF300BF17C4 = { - CreatedOnToolsVersion = 15.3; - TestTargetID = 97C146ED1CF9000F007C117D; - }; F7151F0F265D7ED70028CB91 = { CreatedOnToolsVersion = 12.5; ProvisioningStyle = Automatic; @@ -302,7 +264,6 @@ targets = ( 97C146ED1CF9000F007C117D /* Runner */, F7151F0F265D7ED70028CB91 /* RunnerTests */, - F269302E2BB36EF300BF17C4 /* RunnerUITests */, ); }; /* End PBXProject section */ @@ -319,13 +280,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F269302D2BB36EF300BF17C4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; F7151F0E265D7ED70028CB91 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -441,13 +395,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F269302B2BB36EF300BF17C4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; F7151F0C265D7ED70028CB91 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -460,11 +407,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - F26930362BB36EF300BF17C4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 97C146ED1CF9000F007C117D /* Runner */; - targetProxy = F26930352BB36EF300BF17C4 /* PBXContainerItemProxy */; - }; F7151F16265D7ED70028CB91 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 97C146ED1CF9000F007C117D /* Runner */; @@ -606,7 +548,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - DEVELOPMENT_TEAM = S8QB4VV633; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -652,66 +594,6 @@ }; name = Release; }; - F26930372BB36EF300BF17C4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = S8QB4VV633; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.4; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Runner; - }; - name = Debug; - }; - F26930382BB36EF300BF17C4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = S8QB4VV633; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.4; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Runner; - }; - name = Release; - }; F7151F17265D7ED70028CB91 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = E52C6A6210A56F027C582EF9 /* Pods-RunnerTests.debug.xcconfig */; @@ -719,7 +601,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = S8QB4VV633; + DEVELOPMENT_TEAM = ""; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64"; INFOPLIST_FILE = RunnerTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -774,15 +656,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F26930392BB36EF300BF17C4 /* Build configuration list for PBXNativeTarget "RunnerUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F26930372BB36EF300BF17C4 /* Debug */, - F26930382BB36EF300BF17C4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; F7151F19265D7ED70028CB91 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 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 30dc10fdd3f4..aed6b41cbe8c 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 @@ -69,17 +69,19 @@ - (void)testMapsServiceSync { - (void)testWideGamutImagesProperlyHandled { FLTTileProviderController *controller = [[FLTTileProviderController alloc] init]; - UIImage *wideGamutImage = [UIImage imageWithContentsOfFile:@"assets/widegamut.png"]; + NSString *imagePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"widegamut" ofType:@"png" inDirectory:@"assets"]; + UIImage *wideGamutImage = [UIImage imageWithContentsOfFile:imagePath]; + + XCTAssertNotNil(wideGamutImage, @"The image should be loaded."); UIImage *downsampledImage = [controller handleResultTile:wideGamutImage]; CGImageRef imageRef = downsampledImage.CGImage; CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - bool isFloat = (bitmapInfo && kCGBitmapFloatComponents); size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); - XCTAssert(isFloat == false); - XCTAssert(bitsPerComponent != 16); + // non wide gamut images use 8 bit format + XCTAssert(bitsPerComponent == 8); } @end diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m index 6fba2d7050ad..7f530d23f218 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m @@ -121,7 +121,7 @@ - (instancetype)init:(FlutterMethodChannel *)methodChannel - (UIImage *)handleResultTile:(nullable UIImage*)tile { CGImageRef imageRef = tile.CGImage; CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - bool isFloat = (bitmapInfo && kCGBitmapFloatComponents); + BOOL isFloat = bitmapInfo && kCGBitmapFloatComponents; size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); // Engine use f16 pixel format for wide gamut images @@ -136,6 +136,7 @@ - (UIImage *)handleResultTile:(nullable UIImage*)tile { tile.CGImage); CGImageRef image = CGBitmapContextCreateImage(context); tile = [UIImage imageWithCGImage:image]; + CGImageRelease(image); CGContextRelease(context); CGColorSpaceRelease(colorSpace); From 5912d9422e40e60ac3c5281823c22bcdb62602c9 Mon Sep 17 00:00:00 2001 From: Louise Hsu Date: Tue, 26 Mar 2024 19:26:59 -0700 Subject: [PATCH 6/8] test name --- .../example/ios14/ios/RunnerTests/GoogleMapsTests.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 aed6b41cbe8c..ef0afb3f4206 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 @@ -66,7 +66,7 @@ - (void)testMapsServiceSync { XCTAssertEqual(factory1.sharedMapServices, factory2.sharedMapServices); } -- (void)testWideGamutImagesProperlyHandled { +- (void)testHandleResultTileDownsamplesWideGamutImages { FLTTileProviderController *controller = [[FLTTileProviderController alloc] init]; NSString *imagePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"widegamut" ofType:@"png" inDirectory:@"assets"]; From d889ab94e7a648b4faf21e956fa4acb9546ce2e9 Mon Sep 17 00:00:00 2001 From: Louise Hsu Date: Tue, 26 Mar 2024 19:30:07 -0700 Subject: [PATCH 7/8] pubspec, changelog, formatting --- .../google_maps_flutter_ios/CHANGELOG.md | 4 ++ .../ios14/ios/RunnerTests/GoogleMapsTests.m | 6 ++- .../FLTGoogleMapTileOverlayController.m | 43 +++++++++---------- .../google_maps_flutter_ios/pubspec.yaml | 2 +- 4 files changed, 29 insertions(+), 26 deletions(-) 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 96468dc393fc..2d1f96e1db09 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.5.2 + +* Fixes the tile overlay not correctly displaying on physical ios devices. + ## 2.5.1 * Makes the tile overlay callback invoke the platform channel on the platform thread. 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 ef0afb3f4206..a1bfbd1da196 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 @@ -18,7 +18,7 @@ @interface GoogleMapsTests : XCTestCase @end @interface FLTTileProviderController (Testing) -- (UIImage*)handleResultTile:(nullable UIImage*)tileImage; +- (UIImage *)handleResultTile:(nullable UIImage *)tileImage; @end @implementation GoogleMapsTests @@ -69,7 +69,9 @@ - (void)testMapsServiceSync { - (void)testHandleResultTileDownsamplesWideGamutImages { FLTTileProviderController *controller = [[FLTTileProviderController alloc] init]; - NSString *imagePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"widegamut" ofType:@"png" inDirectory:@"assets"]; + NSString *imagePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"widegamut" + ofType:@"png" + inDirectory:@"assets"]; UIImage *wideGamutImage = [UIImage imageWithContentsOfFile:imagePath]; XCTAssertNotNil(wideGamutImage, @"The image should be loaded."); diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m index 7f530d23f218..73eab6c1eadb 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m +++ b/packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/FLTGoogleMapTileOverlayController.m @@ -118,29 +118,26 @@ - (instancetype)init:(FlutterMethodChannel *)methodChannel #pragma mark - GMSTileLayer method -- (UIImage *)handleResultTile:(nullable UIImage*)tile { - CGImageRef imageRef = tile.CGImage; - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - BOOL isFloat = bitmapInfo && kCGBitmapFloatComponents; - size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); - - // Engine use f16 pixel format for wide gamut images - // If it is wide gamut, we want to downsample it - if (isFloat & (bitsPerComponent == 16)) { - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef context = - CGBitmapContextCreate(nil, tile.size.width, tile.size.height, 8, 0, - colorSpace, kCGImageAlphaPremultipliedLast); - CGContextDrawImage(context, - CGRectMake(0, 0, tile.size.width, tile.size.height), - tile.CGImage); - CGImageRef image = CGBitmapContextCreateImage(context); - tile = [UIImage imageWithCGImage:image]; - - CGImageRelease(image); - CGContextRelease(context); - CGColorSpaceRelease(colorSpace); - } +- (UIImage *)handleResultTile:(nullable UIImage *)tile { + CGImageRef imageRef = tile.CGImage; + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + BOOL isFloat = bitmapInfo && kCGBitmapFloatComponents; + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + // Engine use f16 pixel format for wide gamut images + // If it is wide gamut, we want to downsample it + if (isFloat & (bitsPerComponent == 16)) { + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = CGBitmapContextCreate(nil, tile.size.width, tile.size.height, 8, 0, + colorSpace, kCGImageAlphaPremultipliedLast); + CGContextDrawImage(context, CGRectMake(0, 0, tile.size.width, tile.size.height), tile.CGImage); + CGImageRef image = CGBitmapContextCreateImage(context); + tile = [UIImage imageWithCGImage:image]; + + CGImageRelease(image); + CGContextRelease(context); + CGColorSpaceRelease(colorSpace); + } return tile; } 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 c1ebb4e2cea2..0a3d3e0894fa 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.5.1 +version: 2.5.2 environment: sdk: ^3.2.3 From 3a7a54eb50d2e440365c60169f730d694eeacdff Mon Sep 17 00:00:00 2001 From: Louise Hsu Date: Tue, 26 Mar 2024 20:55:04 -0700 Subject: [PATCH 8/8] warning --- .../example/ios14/ios/RunnerTests/GoogleMapsTests.m | 1 - 1 file changed, 1 deletion(-) 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 a1bfbd1da196..b3ac89e2441d 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 @@ -79,7 +79,6 @@ - (void)testHandleResultTileDownsamplesWideGamutImages { UIImage *downsampledImage = [controller handleResultTile:wideGamutImage]; CGImageRef imageRef = downsampledImage.CGImage; - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); // non wide gamut images use 8 bit format