Skip to content

Commit 9799f0d

Browse files
authored
fix(log): iOS simulator freezing due to early logging (#2802)
* fix(log): iOS simulator freezing due to early logging follow-up for #2626 * use logger * set logReady
1 parent 8cdaacd commit 9799f0d

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

.changes/fix-log-freeze.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"log": patch:bug
3+
"log-js": patch:bug
4+
---
5+
6+
Fixes iOS simulator still freezing sometimes due to early logging.

plugins/log/ios/Sources/LogPlugin.swift

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,47 @@
55
import SwiftRs
66
import Tauri
77
import UIKit
8+
import os.log
89

910
#if targetEnvironment(simulator)
1011
var logReady = false
1112
#else
1213
var logReady = true
1314
#endif
1415

16+
var pendingLogs: [(Int, NSString)] = []
17+
var elapsedTime: TimeInterval = 0
18+
var logFlushScheduled = false
19+
1520
@_cdecl("tauri_log")
1621
func log(level: Int, message: NSString) {
1722
if logReady {
1823
os_log(level, message)
1924
} else {
20-
dispatch_log(level, message)
25+
pendingLogs.append((level, message))
26+
scheduleLogFlush()
2127
}
2228
}
2329

24-
func dispatch_log(_ level: Int, _ message: NSString) {
25-
// delay logging when the logger isn't immediately available
26-
// in some cases when using the simulator the app would hang when calling os_log too soon
27-
// better be safe here and wait a few seconds than actually freeze the app in dev mode
28-
// in production this isn't a problem
29-
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
30-
os_log(level, message)
30+
// delay logging when the logger isn't immediately available
31+
// in some cases when using the simulator the app would hang when calling os_log too soon
32+
// better be safe here and wait a few seconds than actually freeze the app in dev mode
33+
// in production this isn't a problem
34+
func scheduleLogFlush() {
35+
guard !logFlushScheduled else { return }
36+
logFlushScheduled = true
37+
38+
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
3139
logReady = true
40+
flushLogs()
41+
}
42+
}
43+
44+
func flushLogs() {
45+
for (level, message) in pendingLogs {
46+
os_log(level, message)
3247
}
48+
pendingLogs.removeAll()
3349
}
3450

3551
func os_log(_ level: Int, _ message: NSString) {

0 commit comments

Comments
 (0)