新闻详情

新闻详情

首页 / 资讯中心 / 详情

google_maps_flutter_ios_sdk10 版本演进全解析:从 2.17.3 到 2.18.13 的 Swift 化重构与功能迭代

发布时间:2026/9/19 15:36:51来源:尧图网络
google_maps_flutter_ios_sdk10 版本演进全解析:从 2.17.3 到 2.18.13 的 Swift 化重构与功能迭代
google_maps_flutter_ios_sdk10 版本演进全解析从 2.17.3 到 2.18.13 的 Swift 化重构与功能迭代【免费下载链接】packagesA collection of useful packages maintained by the Flutter team项目地址: https://gitcode.com/GitHub_Trending/pac/packagesgoogle_maps_flutter_ios_sdk10 是 Flutter 官方在 google_maps_flutter 联邦插件架构下、面向 iOS 平台、基于 Google Maps iOS SDK 10.x 的实现包。本文以该仓库中 CHANGELOG.md 为主线逐版本梳理其从 2.17.3 初始发布到 2.18.13 的全部演进历史——包括高级标记Advanced Markers支持、UIScene 兼容、Swift Package Manager 集成优化以及贯穿 2.18.62.18.13 的大规模 Objective-C 到 Swift 迁移。读完本文你将清楚每个版本改了什么、为什么改、源码中如何落地以及升级该插件时需要注意的配置前提iOS 16、API Key、依赖版本等。一、插件定位非默认 endorsed 实现的 SDK 10 专用分支在深入版本历史之前先明确这个包在项目中的位置。根据其 README.md 与 pubspec.yaml该包是google_maps_flutter的 iOS 实现底层绑定Google Maps SDK 10.x并声明implements: google_maps_flutter成为联邦插件的一个实现分支flutter: plugin: implements: google_maps_flutter platforms: ios: pluginClass: GoogleMapsPlugin dartPluginClass: GoogleMapsFlutterIOS关键点在于它不是默认的 endorsed 实现。默认情况下 Flutter 应用依赖google_maps_flutter时会自动选用默认 iOS 实现基于 SDK 9 的google_maps_flutter_ios。要切换到 SDK 10 版本必须在应用自己的 pubspec.yaml 中显式添加对google_maps_flutter_ios_sdk10的依赖之后它会自动替换默认实现而上层的google_maps_flutterAPI 用法完全不变dependencies: google_maps_flutter: ^2.14.2 google_maps_flutter_ios_sdk10: ^2.18.13值得注意的设计约束同样写在 README 中如果正在编写一个库package除非有充分理由否则不要直接依赖这类具体实现包而应只依赖google_maps_flutter把 SDK 版本的选择权留给最终应用开发者以便他们根据自身最低 iOS 版本目标挑选合适的 SDK 分支。二、版本演进总览CHANGELOG 记录了从 2.17.3 到 2.18.13 共 17 个版本其中 2.17.x 共 3 个版本2.17.32.17.52.18.x 共 14 个版本2.18.02.18.13。整体演进可以划分为三个阶段阶段版本区间主题初始发布与基础加固2.17.32.17.5基于google_maps_flutter_ios2.17.3 起步标准化 Objective-C 类名补上 UIScene 兼容功能与集成能力扩展2.18.02.18.5高级标记Advanced Markers、SPM 静态构建要求移除、Google Maps SDK 归因 ID、隐私清单去重、tile 降采样编译修复Swift 化重构冲刺2.18.62.18.13逐模块把 Objective-C 迁移为 Swift升级 Pigeon最终采用 Pigeon 的 async Swift 支持当前仓库发布版本为 2.18.13见 pubspec.yaml 中version: 2.18.13与 CHANGELOG 最新条目一致。三、初始发布与基础加固2.17.32.17.53.1 2.17.3基于google_maps_flutter_ios2.17.3 的初始发布CHANGELOG 明确记载这是该包的第一个发布版本代码基线直接取自google_maps_flutter_ios的 2.17.3。之所以要单独拆出一个 SDK 10 分支从 Package.swift 的依赖声明可以看得很清楚——它绑定的是 Google Maps SDK 10 的大版本区间.package(url: https://github.com/googlemaps/ios-maps-sdk, 10.0.0..11.0.0), .package(url: https://github.com/googlemaps/google-maps-ios-utils, exact: 6.1.3),其中对google-maps-ios-utils使用exact: 6.1.3精确锁定版本文件内注释说明了原因该工具库曾在 6.1.3 版本中未提升主版本号就从 GoogleMaps 9.x 切换到 10.x为防止未来 SDK 11 出现同样情况导致破坏采用精确锁定。对应的 podspec 中也声明了s.dependency GoogleMaps, ~ 10.0与s.dependency Google-Maps-iOS-Utils, ~ 6.1.3。3.2 2.17.4标准化 Objective-C 类名该版本对实现中的 Objective-C 类名进行了统一规范化。这属于 2.18.x 大规模 Swift 化之前的命名整顿目的是让类名约定清晰一致降低后续迁移成本。3.3 2.17.5新增 UIScene 兼容UIScene 是 iOS 13 引入的应用生命周期机制SwiftUI 与多窗口场景依赖。该版本让插件在基于 UIScene 的应用生命周期下也能正常工作是适配现代 iOS 应用架构的基础兼容性补丁。四、功能与集成能力扩展2.18.02.18.54.1 2.18.0支持高级标记Advanced Markers这是 2.18 系列最重量级的功能更新。高级标记基于 Google Maps SDK 10 的新标记体系支持碰撞行为collision behavior、更灵活的渲染等能力。这一承诺在 Dart 侧源码中得到完整印证google_maps_flutter_ios.dart 中暴露了能力探测方法isAdvancedMarkersAvailable()用于查询当前 SDK 是否支持高级标记标记转换逻辑中同文件 L632-L634当marker is AdvancedMarker时会把collisionBehavior映射为平台侧的PlatformMarkerCollisionBehaviorPigeon 生成的协议里定义了PlatformMarkerType { marker, advancedMarker }枚举见 messages.g.dart并通过dev.flutter.pigeon.google_maps_flutter_ios.MapsApi.isAdvancedMarkersAvailable通道与原生侧通信。这意味着开发者可以在 Dart 层用AdvancedMarker类型创建标记并配置MarkerCollisionBehavior.requiredDisplay、optionalAndHidesLowerPriority、requiredAndHidesOptional三种碰撞策略由原生 SDK 负责碰撞避让渲染。4.2 2.18.1移除 Swift Package Manager 下静态构建的强制要求早期版本在通过 Swift Package ManagerSPM集成时要求静态构建该版本移除了这一限制。从 Package.swift 可以看到当前包以 Swift 5.9swift-tools-version: 5.9声明仅要求 iOS 16 平台。这降低了 SPM 集成的门槛使工程集成方式更加灵活。4.3 2.18.2为 Google Maps SDK 使用添加归因 IDGoogle Maps SDK 要求宿主应用声明归因 IDattribution ID用于 SDK 使用统计与合规。该版本在原生侧补上了这一标识属于接入 Google Maps SDK 10 时必须满足的集成细节。4.4 2.18.3移除与 Google Maps SDK 重复的隐私清单条目自 iOS 隐私清单Privacy Manifest要求推行以来插件需要提供PrivacyInfo.xcprivacy。Google Maps SDK 本身已声明了部分隐私相关用途本版本清理掉插件侧重复声明的条目避免重复与冲突。当前仓库中仍保留了插件自身的隐私清单资源文件 PrivacyInfo.xcprivacy并在 podspec 中通过resource_bundles打包为google_maps_flutter_ios_sdk10_privacy。4.5 2.18.4README 补充安装配置信息该版本在 README 中补充了接入说明即本文第一部分引用的 API Key 配置步骤、iOS 16 最低版本要求以及热力图支持选项表。这也是本仓库 README.md 当前所呈现的形态。4.6 2.18.5修复 tile 降采样中的潜在编译问题瓦片Tile Overlay在降采样downscaling路径中存在潜在编译问题本版本予以修复。tile 降采样与TileOverlay的tileSize等参数相关Dart 侧对 TileOverlay 的转换逻辑位于 google_maps_flutter_ios.dart原生侧实现对应 TileOverlayController.swift。五、Swift 化重构里程碑2.18.62.18.132.18.6 至 2.18.13 是 CHANGELOG 中最具连续性的演进段落主题高度一致把原生实现从 Objective-C 全面迁移到 Swift。当前仓库ios/目录下 Sources/google_maps_flutter_ios_sdk10 的 17 个 Swift 文件正是这一迁移的最终成果CHANGELOG 版本迁移内容对应现仓库 Swift 文件推断对应模块2.18.6转换实现的部分代码GoogleMapsPlugin.swift、GoogleMapFactory.swift、ConversionUtils.swift 等起步模块2.18.7圆形、多边形、折线控制器CircleController.swift、PolygonController.swift、PolylineController.swift2.18.8叠加层控制器GroundOverlayController.swift、TileOverlayController.swift 等2.18.10标记控制器MarkerController.swift、MarkerUserData.swift2.18.11热力图控制器与数据转换HeatmapController.swift 及对应的数据转换逻辑2.18.12剩余 Objective-C 代码全部收尾包括 MapEventDelegate.swift、ClusterManagersController.swift、ImageUtils.swift、AssetProvider.swift 等2.18.13采用 Pigeon 新 async Swift 支持生成代码 Messages.g.swift 基于新模板产出几个值得展开的细节2.18.9 的工程性更新该版本把 Pigeon 的 dev_dependency 更新到^27.3.2以兼容 analyzer 14。而当前 pubspec.yaml 中pigeon: ^29.0.1已进一步前进说明这条依赖链一直在随 Dart/Flutter 工具链同步升级。Pigeon 在迁移中的角色Pigeon 是这个插件跨语言通信的核心工具。Dart 侧的接口定义位于 pigeons/messages.dart由它生成 Dart 侧 messages.g.dart 与原生侧 Messages.g.swift。2.18.13 的 adopts new Pigeon async Swift support 意味着生成的 Swift 代码采用 async/await 风格的新模板原生侧的异步方法以现代 Swift 并发方式暴露这也解释了为何迁移能顺利进行——Swift 的 async 支持让 Method Channel 回调链更简洁。迁移的技术动因从源码结构看Swift 化完成后整个原生实现模块划分清晰每个地图对象Marker、Polygon、Polyline、Circle、Heatmap、GroundOverlay、TileOverlay、ClusterManager都有独立的 Controller 类配合 ConversionUtils 统一做类型转换可维护性与可测试性都显著优于混合 Objective-C/Swift 的中间状态。六、热力图支持矩阵README 中的能力边界README 用一张表明确了该实现当前对热力图选项的支持情况这是选型时的重要参考字段是否支持Heatmap.dissipating✗Heatmap.maxIntensity✗Heatmap.minimumZoomIntensity✓Heatmap.maximumZoomIntensity✓HeatmapGradient.colorMapSize✓结合 google_maps_flutter_ios.dart 的转换代码可以看到Dart 侧PlatformHeatmap携带了minimumZoomIntensity、maximumZoomIntensity、opacity、radius、gradient含colorMapSize等字段并原样透传给原生侧而dissipating与maxIntensity两项在 iOS SDK 10 实现中尚未支持开发者跨平台使用热力图时需注意这一差异。七、接入前提与工程配置速查综合 CHANGELOG 之外的项目文档与配置文件接入该插件需要满足以下前提iOS 最低版本 16.0Google Maps SDK 10.x 要求 iOS 16Package.swift与 podspec 中均以.iOS(.v16)/platform :ios, 16.0声明。若应用尚未要求 iOS 16需上调部署版本或改用支持更低 iOS 版本的其他 SDK 分支。配置 API Key在应用委托ios/Runner/AppDelegate.swift中调用GMSServices.provideAPIKey(YOUR KEY HERE)并确保在GeneratedPluginRegistrant.register(with: self)之前调用import UIKit import Flutter import GoogleMaps UIApplicationMain objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) - Bool { GMSServices.provideAPIKey(YOUR KEY HERE) GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } }显式声明依赖在应用 pubspec.yaml 中同时添加google_maps_flutter与本实现包见第一部分示例。Dart/Flutter 版本要求当前版本要求sdk: ^3.10.0、flutter: 3.38.0见 pubspec.yaml。八、升级建议与注意事项紧跟 Swift 化主线2.18.6 之后的每个版本都在减少 Objective-C 存量升级到 2.18.13 意味着获得完全 Swift 化的实现与 Pigeon async 支持对后续维护和崩溃堆栈可读性都有益。注意 2.18.0 的 API 能力探测使用高级标记前建议先通过isAdvancedMarkersAvailable()探测能力Dart 侧入口见 google_maps_flutter_ios.dart避免在低版本 SDK 上调用不存在的功能。隐私合规升级到 2.18.3 后插件侧隐私清单已与 Google Maps SDK 去重若你的应用需要向 App Store 提交隐私报告请以最终生效的清单为准。依赖锁定策略Google Maps SDK 10 与 google-maps-ios-utils 之间曾出现过不兼容的版本交叉见 Package.swift 注释生产环境建议沿用上游的精确锁定策略。总而言之google_maps_flutter_ios_sdk10 的 CHANGELOG 浓缩了一个 Flutter 官方 iOS 地图插件从移植分支走向独立成熟实现的完整过程以高级标记为代表的 SDK 10 能力落地、以 UIScene 和 SPM 为代表的现代集成方式适配以及最后连续 8 个版本完成的 Swift 化重构。对于正在或计划基于 Google Maps SDK 10 构建 Flutter iOS 应用的团队这份演进历史既是版本升级的路线图也是理解其源码结构与工程约束的最佳索引。【免费下载链接】packagesA collection of useful packages maintained by the Flutter team项目地址: https://gitcode.com/GitHub_Trending/pac/packages创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OpenClaw 模型调用失败,走 TaoToken 能通吗? 2026/9/19 16:18:59

OpenClaw 模型调用失败,走 TaoToken 能通吗?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
均方误差MSE详解:回归模型评估与损失函数的工程实践 2026/9/19 16:18:59

均方误差MSE详解:回归模型评估与损失函数的工程实践

这两年做机器学习项目,尤其是回归类任务时,几乎每个模型评估报告里都会出现“均方误差(Mean Squared Error, MSE)”这个词。无论是房价预测、销量预估,还是传感器数据拟合,MSE都是最常用的误差衡量指标之一…

阅读更多 →
Caffe ImageData 层完全指南:从图片文件列表直接构建数据输入管线 2026/9/19 16:18:59

Caffe ImageData 层完全指南:从图片文件列表直接构建数据输入管线

Caffe ImageData 层完全指南:从图片文件列表直接构建数据输入管线 【免费下载链接】caffe Caffe: a fast open framework for deep learning. 项目地址: https://gitcode.com/gh_mirrors/ca/caffe ImageData(ImageData)是 Caffe 中最常…

阅读更多 →
开源语音克隆音色包:800+款可配置情绪音效工作流 2026/9/19 16:18:59

开源语音克隆音色包:800+款可配置情绪音效工作流

1. 项目概述:这不是“音效包”,而是一套可即插即用的语音生产流水线你刷短视频时有没有注意过——那些3秒内情绪炸裂的“震惊体”配音、古装短剧里突然拔高八度的“本宫赐你一丈红”、知识类账号里自带磁性低音炮的“听懂掌声”的收尾,几乎都…

阅读更多 →
open-code-review:面向工程语义的LLM代码审查协作者 2026/9/19 16:18:59

open-code-review:面向工程语义的LLM代码审查协作者

1. 这不是又一个“AI代码审查”玩具:open-code-review 的真实定位与设计哲学你点开 GitHub 搜索 “open-code-review”,大概率会看到几个星标不多、更新不勤的仓库,README 里写着“基于 LLM 的自动化代码审查工具”,配图是 Termin…

阅读更多 →
用 OfficeCLI 在 PPT 中构建散点图:从 scatterstyle 到趋势线/误差线的完整实战指南 2026/9/19 16:15:58

用 OfficeCLI 在 PPT 中构建散点图:从 scatterstyle 到趋势线/误差线的完整实战指南

用 OfficeCLI 在 PPT 中构建散点图:从 scatterstyle 到趋势线/误差线的完整实战指南 【免费下载链接】OfficeCLI OfficeCLI 是首款也是最佳的专为 AI 代理设计的命令行工具,可用于读取、编辑和自动化处理 Word、Excel 和 PowerPoint 文件。它免费、开源&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞