Explorar o código

fix(ios): properly access IPC data (#6280)

Lucas Fernandes Nogueira %!s(int64=2) %!d(string=hai) anos
pai
achega
1b75839701

+ 3 - 7
core/tauri/mobile/ios-api/Sources/Tauri/Invoke.swift

@@ -2,10 +2,6 @@ import Foundation
 import MetalKit
 
 @objc public class Invoke: NSObject, JSValueContainer, BridgedJSValueContainer {
-	public var jsObjectRepresentation: JSObject {
-		return data as? JSObject ?? [:]
-	}
-
 	public var dictionaryRepresentation: NSDictionary {
 		return data as NSDictionary
 	}
@@ -15,11 +11,11 @@ import MetalKit
 	}()
 
 	var sendResponse: (JsonValue?, JsonValue?) -> Void
-	var data: NSDictionary
+	public var data: JSObject
 
-	public init(sendResponse: @escaping (JsonValue?, JsonValue?) -> Void, data: NSDictionary) {
+	public init(sendResponse: @escaping (JsonValue?, JsonValue?) -> Void, data: JSObject?) {
 		self.sendResponse = sendResponse
-		self.data = data
+		self.data = data ?? [:]
 	}
 
 	public func resolve(_ data: JsonValue? = nil) {

+ 12 - 12
core/tauri/mobile/ios-api/Sources/Tauri/JSTypes.swift

@@ -121,52 +121,52 @@ extension JSObjectContainer {
 public protocol JSValueContainer: JSStringContainer, JSBoolContainer, JSIntContainer, JSFloatContainer,
 	JSDoubleContainer, JSDateContainer, JSArrayContainer, JSObjectContainer {
 	static var jsDateFormatter: ISO8601DateFormatter { get }
-	var jsObjectRepresentation: JSObject { get }
+	var data: JSObject { get }
 }
 
 extension JSValueContainer {
 	public func getValue(_ key: String) -> JSValue? {
-		return jsObjectRepresentation[key]
+		return data[key]
 	}
 
 	public func getString(_ key: String) -> String? {
-		return jsObjectRepresentation[key] as? String
+		return data[key] as? String
 	}
 
 	public func getBool(_ key: String) -> Bool? {
-		return jsObjectRepresentation[key] as? Bool
+		return data[key] as? Bool
 	}
 
 	public func getInt(_ key: String) -> Int? {
-		return jsObjectRepresentation[key] as? Int
+		return data[key] as? Int
 	}
 
 	public func getFloat(_ key: String) -> Float? {
-		if let floatValue = jsObjectRepresentation[key] as? Float {
+		if let floatValue = data[key] as? Float {
 			return floatValue
-		} else if let doubleValue = jsObjectRepresentation[key] as? Double {
+		} else if let doubleValue = data[key] as? Double {
 			return Float(doubleValue)
 		}
 		return nil
 	}
 
 	public func getDouble(_ key: String) -> Double? {
-		return jsObjectRepresentation[key] as? Double
+		return data[key] as? Double
 	}
 
 	public func getDate(_ key: String) -> Date? {
-		if let isoString = jsObjectRepresentation[key] as? String {
+		if let isoString = data[key] as? String {
 			return Self.jsDateFormatter.date(from: isoString)
 		}
-		return jsObjectRepresentation[key] as? Date
+		return data[key] as? Date
 	}
 
 	public func getArray(_ key: String) -> JSArray? {
-		return jsObjectRepresentation[key] as? JSArray
+		return data[key] as? JSArray
 	}
 
 	public func getObject(_ key: String) -> JSObject? {
-		return jsObjectRepresentation[key] as? JSObject
+		return data[key] as? JSObject
 	}
 }
 

+ 2 - 2
core/tauri/mobile/ios-api/Sources/Tauri/Tauri.swift

@@ -91,7 +91,7 @@ func postIpcMessage(webview: WKWebView, name: UnsafePointer<SRString>, methodNam
 			payloadJson = "`\(error)`"
 		}
 		webview.evaluateJavaScript("window['_\(fn)'](\(payloadJson))")
-	}, data: data)
+	}, data: JSTypes.coerceDictionaryToJSObject(data, formattingDatesAsStrings: true))
 	PluginManager.shared.invoke(name: name.pointee.to_string(), methodName: methodName.pointee.to_string(), invoke: invoke)
 }
 
@@ -112,6 +112,6 @@ func runPluginMethod(
 			payloadJson = "`\(error)`"
 		}
 		callback(id, success, payloadJson.cString(using: String.Encoding.utf8))
-	}, data: data)
+	}, data: JSTypes.coerceDictionaryToJSObject(data, formattingDatesAsStrings: true))
 	PluginManager.shared.invoke(name: name.pointee.to_string(), methodName: methodName.pointee.to_string(), invoke: invoke)
 }