mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-07-24 17:20:51 +02:00
fix(log): iOS simulator freezes when calling os_log too early (#2626)
let's delay logs on simulator to prevent deadlocks - looks like the logging system isn't available when the Rust process starts, and it's freezing the app (simulator only) closes https://github.com/tauri-apps/tauri/issues/12172
This commit is contained in:
committed by
GitHub
parent
db7baff3fc
commit
686a839c96
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
"log": patch
|
||||||
|
"log-js": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix iOS app stuck when using the iOS Simulator and the log plugin due to a deadlock when calling os_log too early.
|
||||||
@@ -2,16 +2,41 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
import UIKit
|
|
||||||
import Tauri
|
|
||||||
import SwiftRs
|
import SwiftRs
|
||||||
|
import Tauri
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
#if targetEnvironment(simulator)
|
||||||
|
var logReady = false
|
||||||
|
#else
|
||||||
|
var logReady = true
|
||||||
|
#endif
|
||||||
|
|
||||||
@_cdecl("tauri_log")
|
@_cdecl("tauri_log")
|
||||||
func log(level: Int, message: NSString) {
|
func log(level: Int, message: NSString) {
|
||||||
switch level {
|
if logReady {
|
||||||
case 1: Logger.debug(message as String)
|
os_log(level, message)
|
||||||
case 2: Logger.info(message as String)
|
} else {
|
||||||
case 3: Logger.error(message as String)
|
dispatch_log(level, message)
|
||||||
default: break
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func dispatch_log(_ level: Int, _ message: NSString) {
|
||||||
|
// delay logging when the logger isn't immediately available
|
||||||
|
// in some cases when using the simulator the app would hang when calling os_log too soon
|
||||||
|
// better be safe here and wait a few seconds than actually freeze the app in dev mode
|
||||||
|
// in production this isn't a problem
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
||||||
|
os_log(level, message)
|
||||||
|
logReady = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func os_log(_ level: Int, _ message: NSString) {
|
||||||
|
switch level {
|
||||||
|
case 1: Logger.debug(message as String)
|
||||||
|
case 2: Logger.info(message as String)
|
||||||
|
case 3: Logger.error(message as String)
|
||||||
|
default: break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user