iOS 17真机上Flutter HERE SDK初始化致设备重启问题求助
iOS17物理设备初始化Flutter HERE Explore SDK崩溃重启问题解决指南
问题背景
在iOS17物理设备上调用SDKNativeEngine.makeSharedInstance(sdkOptions)时触发应用崩溃并导致设备重启,模拟器可正常运行。当前环境:Flutter 3.13.8、HERE Explore SDK 4.16.1.0(2023年10月23日发布),改为按钮点击触发初始化后问题依旧。
排查修复步骤
- 升级HERE SDK版本:4.16.1.0发布时间与iOS17正式版接近,大概率存在未适配的系统API冲突。直接升级到官方最新稳定版(优先选2023年11月及以后的版本),官方通常会快速跟进新系统的适配修复。
- 校验iOS权限配置:iOS17对权限校验更严格,确认
Info.plist中已添加以下必要权限:- 定位权限:
NSLocationWhenInUseUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription(需后台定位时) - 确保应用已获得网络访问权限(蜂窝+WiFi),HERE SDK依赖网络加载地图资源
- 定位权限:
- 调整初始化时机与线程:将
SdkContext.init()移至main()函数最早期,并用addPostFrameCallback确保SDK实例创建在主线程完成:void main() async { WidgetsFlutterBinding.ensureInitialized(); SdkContext.init(IsolateOrigin.main); runApp(const YourApp()); } @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { String accessKeyId = "<yourAccessKey>"; SDKOptions sdkOptions = SDKOptions.withAccessKeySecret(accessKeyId, yourApiSecret); try { await SDKNativeEngine.makeSharedInstance(sdkOptions); } on InstantiationException catch (e) { print("HERE SDK初始化失败: $e"); } }); } - 查看设备崩溃日志:连接设备到Xcode,通过
Window > Devices and Simulators打开设备日志,搜索崩溃记录的Exception Type和主线程栈信息,定位具体崩溃模块。如果是SDK内部问题,可将日志提交给HERE官方技术支持。 - 关闭Bitcode:iOS17部分第三方SDK对Bitcode支持存在兼容问题,在Xcode的
Runner > Build Settings > Build Options中,将Enable Bitcode设为No,重新打包测试。
临时规避方案
如果暂时无法升级SDK,可尝试在初始化前添加短延迟,给系统足够时间加载依赖库:
await Future.delayed(const Duration(milliseconds: 500)); await SDKNativeEngine.makeSharedInstance(sdkOptions);
内容的提问来源于stack exchange,提问作者Francesco Califano
相关产品推荐
相关产品推荐

