Skip to content

Commit c9b6db3

Browse files
authored
[Enhancement]Improve swift concurrency task lifecycle (#861)
1 parent ca05dca commit c9b6db3

File tree

135 files changed

+2380
-1873
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

135 files changed

+2380
-1873
lines changed

.swiftlint.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ custom_rules:
1717
regex: '\bTimer\s*(\.\s*)?publish\b'
1818
message: "Avoid using Timer.publish. User the TimerStorage instead."
1919
severity: error
20+
discourage_task_init:
21+
name: "Discouraged Task { usage"
22+
regex: '\bTask\s*\{'
23+
message: "Avoid using Task { directly. Prefer adding the Task in a disposable bag to offer some basic lifecycle management."
24+
severity: error
25+
excluded:
26+
- DemoApp
27+
- DemoAppUIKit
28+
- Sources/StreamVideoSwiftUI
29+
- Sources/StreamVideoUIKit
2030

2131
# Enabled/disabled rules
2232
only_rules:

DemoApp/Sources/Components/MemoryLogDestination/OSLogDestination.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ final class OSLogDestination: BaseLogDestination, @unchecked Sendable {
4040
extendedDetails += "[\(logDetails.functionName)] "
4141
}
4242

43+
if showThreadName {
44+
extendedDetails += logDetails.threadName
45+
}
46+
4347
var extendedMessage = "\(extendedDetails)> \(logDetails.message)"
4448
if let error = logDetails.error {
4549
extendedMessage += "[Error: \(error)]"

DemoApp/Sources/Views/Login/DebugMenu.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@ struct DebugMenu: View {
253253
label: "Performance Tracker"
254254
) { self.performanceTrackerVisibility = $0 }
255255

256+
makeMenu(
257+
for: [.debug, .info, .warning, .error],
258+
currentValue: LogConfig.level,
259+
label: "Log Level"
260+
) { LogConfig.level = $0 }
261+
256262
Button {
257263
isLogsViewerVisible = true
258264
} label: {
@@ -500,3 +506,21 @@ struct DebugMenu: View {
500506
}
501507
}
502508
}
509+
510+
extension LogLevel: Debuggable {
511+
var title: String {
512+
switch self {
513+
case .debug:
514+
return "Debug"
515+
516+
case .info:
517+
return "Info"
518+
519+
case .warning:
520+
return "Warning"
521+
522+
case .error:
523+
return "Error"
524+
}
525+
}
526+
}

DemoApp/Sources/Views/StatsView/DemoStatsAdapter.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ final class DemoStatsAdapter {
1111

1212
private var activeCallCancellable: AnyCancellable?
1313
private var callStatsReportCancellable: AnyCancellable?
14+
private let disposableBag = DisposableBag()
1415

1516
@Published private(set) var reports: [CallStatsReport] = []
1617

1718
init() {
1819
activeCallCancellable = streamVideo
1920
.state
2021
.$activeCall
21-
.sinkTask { @MainActor [weak self] in self?.didUpdateActiveCall($0) }
22+
.sinkTask(storeIn: disposableBag) { @MainActor [weak self] in self?.didUpdateActiveCall($0) }
2223
}
2324

2425
@MainActor

0 commit comments

Comments
 (0)