From e2d335a59f4d84ccafb5a2a25d88796728b86e35 Mon Sep 17 00:00:00 2001 From: Kyle Date: Tue, 5 May 2026 18:20:37 +0800 Subject: [PATCH] Add swift-log support for OpenGestures --- Package.resolved | 2 +- Package.swift | 15 +++++ .../OpenGestures/Component/UpdateTracer.swift | 5 -- Sources/OpenGestures/Log.swift | 56 +++++++++++++++---- 4 files changed, 62 insertions(+), 16 deletions(-) diff --git a/Package.resolved b/Package.resolved index 4a8d2a7..965d3eb 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "45be19da1dba47dfaf2674a1d21cdd6aba74c6e9e4fadbcceb50dadb09b3f06c", + "originHash" : "0532c0740c9b6053a66f94888f8c33f1408efd06e2512076069b1ac0671e3252", "pins" : [ { "identity" : "openattributegraph", diff --git a/Package.swift b/Package.swift index ebbeff4..580cf18 100644 --- a/Package.swift +++ b/Package.swift @@ -138,6 +138,7 @@ let compatibilityTestCondition = envBoolValue("COMPATIBILITY_TEST", default: fal let gesturesCondition = envBoolValue("OPENGESTURESSHIMS_GESTURES", default: false) let useLocalDeps = envBoolValue("USE_LOCAL_DEPS", default: false) +let swiftLogCondition = envBoolValue("SWIFT_LOG", default: !buildForDarwinPlatform) let swiftCorelibsPath = envStringValue("LIB_SWIFT_PATH") ?? "\(Context.packageDirectory)/Sources/SwiftCorelibs/include" @@ -191,6 +192,13 @@ extension Target { swiftSettings.append(.define("OPENGESTURES_GESTURES")) self.swiftSettings = swiftSettings } + + func addSwiftLogSettings() { + dependencies.append(.product(name: "Logging", package: "swift-log")) + var swiftSettings = swiftSettings ?? [] + swiftSettings.append(.define("OPENGESTURES_SWIFT_LOG")) + self.swiftSettings = swiftSettings + } } // MARK: - Targets @@ -251,6 +259,13 @@ let package = Package( ] ) +if swiftLogCondition { + package.dependencies.append( + .package(url: "https://github.com/apple/swift-log", from: "1.5.3") + ) + openGesturesTarget.addSwiftLogSettings() +} + private var hasSetupDPFDependency = false @MainActor diff --git a/Sources/OpenGestures/Component/UpdateTracer.swift b/Sources/OpenGestures/Component/UpdateTracer.swift index aad0fd0..752bca8 100644 --- a/Sources/OpenGestures/Component/UpdateTracer.swift +++ b/Sources/OpenGestures/Component/UpdateTracer.swift @@ -95,12 +95,7 @@ package class UpdateTracer: @unchecked Sendable { return } let renderedTrace = traceHead.rendered(using: dataSnapshots) - #if canImport(os) Log.componentUpdates.log("\(renderedTrace)") - #else - // TODO: Add swift-log library support - print(renderedTrace) - #endif } /// Clears all recorded trace state. diff --git a/Sources/OpenGestures/Log.swift b/Sources/OpenGestures/Log.swift index 0f40d78..25248b6 100644 --- a/Sources/OpenGestures/Log.swift +++ b/Sources/OpenGestures/Log.swift @@ -9,7 +9,46 @@ import Darwin #elseif canImport(Glibc) import Glibc #endif -#if canImport(os) + +#if OPENGESTURES_SWIFT_LOG +package import Logging + +extension Logger { + package init(subsystem: String, category: String) { + var logger = Logger(label: subsystem) + logger[metadataKey: "category"] = .string(category) + self = logger + } +} + +extension Logger.Level { + #if DEBUG + package static let `default`: Logger.Level = .debug + #else + package static let `default`: Logger.Level = .info + #endif +} + +extension Logger { + package func log( + _ message: @autoclosure () -> Logger.Message, + metadata: @autoclosure () -> Logger.Metadata? = nil, + file: String = #fileID, + function: String = #function, + line: UInt = #line + ) { + log( + level: .default, + message(), + metadata: metadata(), + source: nil, + file: file, + function: function, + line: line + ) + } +} +#else package import os #endif @@ -109,7 +148,6 @@ package enum Log { #endif } - #if canImport(os) private static let _nodes = Logger(subsystem: subsystem, category: "Nodes") package static var nodes: Logger { @@ -124,7 +162,13 @@ package enum Log { package static let componentUpdates = Logger(subsystem: subsystem, category: "ComponentUpdates") + #if OPENGESTURES_SWIFT_LOG + private static let disabled = Logger(label: subsystem) { _ in + SwiftLogNoOpLogHandler() + } + #else private static let disabled = Logger(OSLog.disabled) + #endif @inline(__always) package static func logEnqueuedPhase(_ node: AnyGestureNode) { @@ -135,12 +179,4 @@ package enum Log { package static func logFailedScheduledUpdate() { components.log("Failed to peform a scheduled update") } - #else - // TODO: Add swift-log support - @inline(__always) - package static func logEnqueuedPhase(_ node: AnyGestureNode) {} - - @inline(__always) - package static func logFailedScheduledUpdate() {} - #endif }