使用SwiftFlutterJailbreakDetectionPlugin遇并发安全错误:FlutterMethodNotImplemented引用问题
解决FlutterMethodNotImplemented并发不安全问题
在Swift编写Flutter插件时,调用result(FlutterMethodNotImplemented)触发并发不安全警告,核心原因是FlutterMethodNotImplemented是全局可变变量,涉及共享可变状态,不符合Swift并发安全规范。
修复方案
直接构造局部的FlutterError实例替代全局变量,代码示例如下:
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "jailbroken": let check2 = IOSSecuritySuite.amIJailbroken() result(check2) case "developerMode": result(IOSSecuritySuite.amIRunInEmulator()) default: // 用局部构造的FlutterError替换全局变量 result(FlutterError(code: "unimplemented", message: "Method not implemented", details: nil)) } }
完整修改后的代码
import Flutter import UIKit import IOSSecuritySuite public class SwiftFlutterJailbreakDetectionPlugin: NSObject, FlutterPlugin { public static func register(with registrar: FlutterPluginRegistrar) { let channel = FlutterMethodChannel(name: "flutter_jailbreak_detection", binaryMessenger: registrar.messenger()) let instance = SwiftFlutterJailbreakDetectionPlugin() registrar.addMethodCallDelegate(instance, channel: channel) } public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "jailbroken": let check2 = IOSSecuritySuite.amIJailbroken() result(check2) case "developerMode": result(IOSSecuritySuite.amIRunInEmulator()) default: result(FlutterError(code: "unimplemented", message: "Method not implemented", details: nil)) } } }
该方案既满足Swift并发安全要求,也能准确向Flutter端传递方法未实现的错误信息。
内容的提问来源于stack exchange,提问作者Mahendra Telure
相关产品推荐
相关产品推荐

