Flutter能否在Debug模式下禁用断言?iOS端flutter_reactive_ble断言问题求助
问题描述
- Flutter应用调用原生Swift代码包时仅iOS端出现问题
- 涉及包:
flutter_reactive_ble - 触发问题的Swift方法:
PluginController.scanForDevices(name:args:completion:) - 触发的断言:
assert(!central.isScanning) - 已知Release模式下断言会被禁用,需求是Debug模式下禁用该断言
Debug模式下禁用Swift断言的解决方法
方法1:全局禁用项目断言
- 打开iOS项目的Xcode工程(
ios/Runner.xcworkspace) - 选中
Runner目标,切换到Build Settings标签页 - 搜索
ENABLE_NS_ASSERTIONS - 将Debug模式下的该选项设置为
NO
注:此操作会禁用整个项目(包括第三方库)的所有NSAssert和Swift断言
方法2:针对特定断言禁用(精细化处理)
若只想禁用flutter_reactive_ble中的该断言,可修改包源码:
- 进入Flutter项目的
ios/Pods/flutter_reactive_ble/Classes目录,找到PluginController.swift文件 - 定位到包含
assert(!central.isScanning)的代码段 - 直接注释该行,或用条件编译包裹:
// #if DEBUG // assert(!central.isScanning) // #endif
注:Pod更新后修改会被覆盖,建议fork包维护自定义版本,或向官方提交Issue修复重复扫描的逻辑问题
额外建议
断言触发本质是代码存在重复调用扫描的情况,优先排查Flutter代码是否多次调用scanForDevices却未正确停止扫描,从根源解决比禁用断言更稳妥
内容的提问来源于stack exchange,提问作者Shion
相关产品推荐
相关产品推荐

