diff --git a/Package.resolved b/Package.resolved index 52f071db..781c7b09 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,13 +1,13 @@ { - "originHash" : "3e318606e30fd7507b3905998ae154d62963a3667c482b7e92aac0fbf624db2c", + "originHash" : "2054a973aa4770cf395350a60d6d50315b65fdd3bc91cc06f546d1fccd11dd41", "pins" : [ { "identity" : "combine-schedulers", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/combine-schedulers", "state" : { - "revision" : "c96fdbf1223e22fa4566ac5f40513506dcf5dd41", - "version" : "1.2.1" + "revision" : "114354e8c1667a2edc4993700fb9fa4f90157b56", + "version" : "1.2.2" } }, { @@ -19,15 +19,6 @@ "version" : "7.11.1" } }, - { - "identity" : "swift-case-paths", - "kind" : "remoteSourceControl", - "location" : "https://github.com/pointfreeco/swift-case-paths", - "state" : { - "revision" : "cb4cba6a8a46a86db0d37dbe09935ead6b24c91a", - "version" : "1.10.0" - } - }, { "identity" : "swift-clocks", "kind" : "remoteSourceControl", @@ -105,17 +96,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-issue-reporting", "state" : { - "revision" : "71c7c9a761d1ca6ed4ccb6ced040fe1c1a39e8e7", - "version" : "2.1.0" - } - }, - { - "identity" : "swift-navigation", - "kind" : "remoteSourceControl", - "location" : "https://github.com/pointfreeco/swift-navigation", - "state" : { - "revision" : "7e95e5e9ff0a64f6ad8bca59083f8d6ba381b6ff", - "version" : "2.11.2" + "revision" : "75b000cea2ca6d7527a57e1b9cc0bdf21a9abe9f", + "version" : "2.1.1" } }, { @@ -123,8 +105,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-perception", "state" : { - "revision" : "597afd46249f4a71885b95d26b26cc5b893daf32", - "version" : "2.0.12" + "revision" : "de219a1cf34e958134e75a9ebb134cf09bf52fc6", + "version" : "2.0.11" } }, { @@ -132,17 +114,17 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-sharing", "state" : { - "revision" : "3552faf8a6c18ce896ec5a72bd8c34755f0f03e0", - "version" : "2.10.1" + "revision" : "8244fe63bf43e58188ab13851ad693eecf6a9e90", + "version" : "2.9.1" } }, { "identity" : "swift-snapshot-testing", "kind" : "remoteSourceControl", - "location" : "https://github.com/pointfreeco/swift-snapshot-testing.git", + "location" : "https://github.com/pointfreeco/swift-snapshot-testing", "state" : { - "revision" : "59a99c458de4d2dee580529b61b4f78dca7b7fa6", - "version" : "1.19.4" + "revision" : "1bc16f430d8410e7f087d4c787767b26fd32fe30", + "version" : "1.19.3" } }, { @@ -150,8 +132,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "revision" : "8df0088a09acd1e889ef303e34b3625978cd8dd0", - "version" : "0.39.1" + "revision" : "72d536d5f0319097612bea961e356f4223efd926", + "version" : "0.39.2" } }, { @@ -159,8 +141,17 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/swiftlang/swift-syntax", "state" : { - "revision" : "79e4b74a295b6eb74a8b585e3a39d29e70c1dbd1", - "version" : "603.0.2" + "revision" : "050f1a346fbbac0ca2cfb15a95274f7bd1cf0ccf", + "version" : "604.0.0" + } + }, + { + "identity" : "xctest-dynamic-overlay", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", + "state" : { + "revision" : "d9308ad679143c26a30dec52daefe82f54af2b82", + "version" : "1.13.1" } } ], diff --git a/Package.swift b/Package.swift index bcd84fb3..519ae256 100644 --- a/Package.swift +++ b/Package.swift @@ -53,6 +53,10 @@ let package = Package( description: "Introduce SQLiteData conformances to the swift-tagged package." ), .trait( + name: "SQLiteDataSwiftLog", + description: "Use swift-log instead of OSLog for logging." + ), + .trait( name: "SQLiteDataTagged", description: "A deprecated alias for the 'Tagged' trait.", enabledTraits: ["Tagged"] @@ -86,6 +90,7 @@ let package = Package( ] ), .package(url: "https://github.com/pointfreeco/swift-tagged", from: "0.10.0"), + .package(url: "https://github.com/apple/swift-log", from: "1.6.0") ], targets: [ .target( @@ -104,6 +109,11 @@ let package = Package( package: "swift-tagged", condition: .when(traits: ["Tagged"]) ), + .product( + name: "Logging", + package: "swift-log", + condition: .when(traits: ["SQLiteDataSwiftLog"]) + ) ] ), .target( diff --git a/Sources/SQLiteData/CloudKit/Internal/Logging.swift b/Sources/SQLiteData/CloudKit/Internal/Logging.swift index b7d4b214..9701475f 100644 --- a/Sources/SQLiteData/CloudKit/Internal/Logging.swift +++ b/Sources/SQLiteData/CloudKit/Internal/Logging.swift @@ -1,10 +1,47 @@ -#if DEBUG && canImport(CloudKit) +#if canImport(CloudKit) + +#if SQLiteDataSwiftLog + @_exported import struct Logging.Logger + import protocol Logging.LogHandler + + @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) + extension SyncEngine { + public typealias Logger = Logging.Logger + } + + @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) + extension SyncEngine.Logger { + public static var `default`: SyncEngine.Logger { + .init(label: "SQLiteData") + } + public static var disabled: SyncEngine.Logger { + .init(label: "SQLiteData") { _ in DisabledLogHandler() } + } + } +#else + @_exported import struct os.Logger + @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) + extension SyncEngine { + public typealias Logger = os.Logger + } + @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) + extension SyncEngine.Logger { + public static var `default`: SyncEngine.Logger { + .init(subsystem: "SQLiteData", category: "CloudKit") + } + public static var disabled: SyncEngine.Logger { + .init(.disabled) + } + } +#endif + +#if DEBUG import CloudKit import TabularData import os @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) - extension Logger { + extension SyncEngine.Logger { func log(_ event: SyncEngine.Event, syncEngine: any SyncEngineProtocol) { let prefix = "SQLiteData (\(syncEngine.database.databaseScope.label).db)" var actions: [String] = [] @@ -302,3 +339,25 @@ } } #endif + +#if SQLiteDataSwiftLog + struct DisabledLogHandler: Logging.LogHandler { + var logLevel: Logging.Logger.Level = .info + var metadata: Logging.Logger.Metadata = [:] + subscript(metadataKey key: String) -> Logging.Logger.Metadata.Value? { + get { self.metadata[key] } + set { self.metadata[key] = newValue } + } + func log( + level: Logging.Logger.Level, + message: Logging.Logger.Message, + metadata: Logging.Logger.Metadata?, + source: String, + file: String, + function: String, + line: UInt + ) {} + } +#endif + +#endif diff --git a/Sources/SQLiteData/CloudKit/SyncEngine.swift b/Sources/SQLiteData/CloudKit/SyncEngine.swift index 036ff3fa..736c460d 100644 --- a/Sources/SQLiteData/CloudKit/SyncEngine.swift +++ b/Sources/SQLiteData/CloudKit/SyncEngine.swift @@ -99,8 +99,7 @@ defaultZone: CKRecordZone = CKRecordZone(zoneName: "co.pointfree.SQLiteData.defaultZone"), startImmediately: Bool? = nil, delegate: (any SyncEngineDelegate)? = nil, - logger: Logger = isTesting - ? Logger(.disabled) : Logger(subsystem: "SQLiteData", category: "CloudKit") + logger: Logger = isTesting ? Logger.disabled : Logger.default ) throws where repeat (each T1).PrimaryKey.QueryOutput: IdentifierStringConvertible,