diff --git a/CHANGELOG.md b/CHANGELOG.md index 03ec0d5a5..1632aefe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,11 @@ All notable changes to this project will be documented in this file. Take a look * `Publication.localizedTitle` is now optional, as we cannot guarantee a publication will always have a title. +## [2.7.3] + +* [#483](https://github.com/readium/swift-toolkit/issues/483) Fix build on Xcode 16. + + ## [2.7.2] ### Fixed @@ -754,5 +759,6 @@ progression. Now if no reading progression is set, the `effectiveReadingProgress [2.7.0]: https://github.com/readium/swift-toolkit/compare/2.6.1...2.7.0 [2.7.1]: https://github.com/readium/swift-toolkit/compare/2.7.0...2.7.1 [2.7.2]: https://github.com/readium/swift-toolkit/compare/2.7.1...2.7.2 +[2.7.3]: https://github.com/readium/swift-toolkit/compare/2.7.2...2.7.3 [3.0.0-alpha.1]: https://github.com/readium/swift-toolkit/compare/2.7.1...3.0.0-alpha.1 [3.0.0-alpha.2]: https://github.com/readium/swift-toolkit/compare/3.0.0-alpha.1...3.0.0-alpha.2 diff --git a/Sources/Adapters/GCDWebServer/GCDHTTPServer.swift b/Sources/Adapters/GCDWebServer/GCDHTTPServer.swift index 097f4dd3a..c0b440bf7 100644 --- a/Sources/Adapters/GCDWebServer/GCDHTTPServer.swift +++ b/Sources/Adapters/GCDWebServer/GCDHTTPServer.swift @@ -330,7 +330,7 @@ public class GCDHTTPServer: HTTPServer, Loggable { private extension Resource { func length() async -> ReadResult { await estimatedLength() - .flatMap { length in + .asyncFlatMap { length in if let length = length { return .success(length) } else { diff --git a/Sources/Adapters/LCPSQLite/SQLiteLCPLicenseRepository.swift b/Sources/Adapters/LCPSQLite/SQLiteLCPLicenseRepository.swift index 47bcf4592..e90b38a89 100644 --- a/Sources/Adapters/LCPSQLite/SQLiteLCPLicenseRepository.swift +++ b/Sources/Adapters/LCPSQLite/SQLiteLCPLicenseRepository.swift @@ -10,10 +10,10 @@ import SQLite public class LCPSQLiteLicenseRepository: LCPLicenseRepository { let licenses = Table("Licenses") - let id = Expression("id") - let printsLeft = Expression("printsLeft") - let copiesLeft = Expression("copiesLeft") - let registered = Expression("registered") + let id = SQLite.Expression("id") + let printsLeft = SQLite.Expression("printsLeft") + let copiesLeft = SQLite.Expression("copiesLeft") + let registered = SQLite.Expression("registered") private let db: Connection @@ -98,7 +98,7 @@ public class LCPSQLiteLicenseRepository: LCPLicenseRepository { ((try? db.scalar(licenses.filter(id == licenseID).count)) ?? 0) != 0 } - private func get(_ column: Expression, for licenseId: String) throws -> Int? { + private func get(_ column: SQLite.Expression, for licenseId: String) throws -> Int? { let query = licenses.select(column).filter(id == licenseId) for row in try db.prepare(query) { return try row.get(column) @@ -106,7 +106,7 @@ public class LCPSQLiteLicenseRepository: LCPLicenseRepository { return nil } - private func set(_ column: Expression, to value: Int?, for licenseId: String) throws { + private func set(_ column: SQLite.Expression, to value: Int?, for licenseId: String) throws { let filterLicense = licenses.filter(id == licenseId) try db.run(filterLicense.update(column <- value)) } diff --git a/Sources/Adapters/LCPSQLite/SQLiteLCPPassphraseRepository.swift b/Sources/Adapters/LCPSQLite/SQLiteLCPPassphraseRepository.swift index 2a0c76cb1..4adbc47ce 100644 --- a/Sources/Adapters/LCPSQLite/SQLiteLCPPassphraseRepository.swift +++ b/Sources/Adapters/LCPSQLite/SQLiteLCPPassphraseRepository.swift @@ -11,10 +11,10 @@ import SQLite public class LCPSQLitePassphraseRepository: LCPPassphraseRepository, Loggable { let transactions = Table("Transactions") - let licenseId = Expression("licenseId") - let provider = Expression("origin") - let userId = Expression("userId") - let passphrase = Expression("passphrase") // hashed. + let licenseId = SQLite.Expression("licenseId") + let provider = SQLite.Expression("origin") + let userId = SQLite.Expression("userId") + let passphrase = SQLite.Expression("passphrase") // hashed. private let db: Connection diff --git a/Sources/Internal/Extensions/NSRegularExpression.swift b/Sources/Internal/Extensions/NSRegularExpression.swift index 2c014a793..0a2ac2872 100644 --- a/Sources/Internal/Extensions/NSRegularExpression.swift +++ b/Sources/Internal/Extensions/NSRegularExpression.swift @@ -49,7 +49,7 @@ public extension NSRange { } } -public final class ReplacingRegularExpression: NSRegularExpression { +public final class ReplacingRegularExpression: NSRegularExpression, @unchecked Sendable { public typealias Replace = (NSTextCheckingResult, [String]) -> String private let replace: Replace diff --git a/Sources/Internal/Extensions/Optional.swift b/Sources/Internal/Extensions/Optional.swift index cf354d5ec..e7feeb7c9 100644 --- a/Sources/Internal/Extensions/Optional.swift +++ b/Sources/Internal/Extensions/Optional.swift @@ -8,7 +8,7 @@ import Foundation public extension Optional { /// Asynchronous variant of `map`. - @inlinable func map(_ transform: (Wrapped) async throws -> U) async rethrows -> U? { + @inlinable func asyncMap(_ transform: (Wrapped) async throws -> U) async rethrows -> U? { switch self { case let .some(wrapped): return try await .some(transform(wrapped)) @@ -18,7 +18,7 @@ public extension Optional { } /// Asynchronous variant of `flatMap`. - @inlinable func flatMap(_ transform: (Wrapped) async throws -> U?) async rethrows -> U? { + @inlinable func asyncFlatMap(_ transform: (Wrapped) async throws -> U?) async rethrows -> U? { switch self { case let .some(wrapped): return try await transform(wrapped) diff --git a/Sources/Internal/Extensions/Result.swift b/Sources/Internal/Extensions/Result.swift index 12d5bda45..d869eca83 100644 --- a/Sources/Internal/Extensions/Result.swift +++ b/Sources/Internal/Extensions/Result.swift @@ -8,7 +8,7 @@ import Foundation public extension Result { /// Asynchronous variant of `map`. - @inlinable func map( + @inlinable func asyncMap( _ transform: (Success) async throws -> NewSuccess ) async rethrows -> Result { switch self { @@ -20,7 +20,7 @@ public extension Result { } /// Asynchronous variant of `flatMap`. - @inlinable func flatMap( + @inlinable func asyncFlatMap( _ transform: (Success) async throws -> Result ) async rethrows -> Result { switch self { @@ -31,7 +31,7 @@ public extension Result { } } - @inlinable func recover( + @inlinable func asyncRecover( _ catching: (Failure) async throws -> Self ) async rethrows -> Self { switch self { diff --git a/Sources/LCP/Content Protection/EncryptionParser.swift b/Sources/LCP/Content Protection/EncryptionParser.swift index d38176280..fa628809b 100644 --- a/Sources/LCP/Content Protection/EncryptionParser.swift +++ b/Sources/LCP/Content Protection/EncryptionParser.swift @@ -47,7 +47,7 @@ private func parseEPUBEncryptionData(in container: Container) async -> ReadResul } return await encryptionResource.read() - .flatMap { data -> ReadResult in + .asyncFlatMap { data -> ReadResult in do { let doc = try await DefaultXMLDocumentFactory().open( data: data, diff --git a/Sources/LCP/Content Protection/LCPContentProtection.swift b/Sources/LCP/Content Protection/LCPContentProtection.swift index 7bd59925c..44ecf0711 100644 --- a/Sources/LCP/Content Protection/LCPContentProtection.swift +++ b/Sources/LCP/Content Protection/LCPContentProtection.swift @@ -34,7 +34,7 @@ final class LCPContentProtection: ContentProtection, Loggable { return await parseEncryptionData(in: asset) .mapError { ContentProtectionOpenError.reading(.decoding($0)) } - .flatMap { encryptionData in + .asyncFlatMap { encryptionData in let authentication = credentials.map { LCPPassphraseAuthentication($0, fallback: self.authentication) } ?? self.authentication diff --git a/Sources/LCP/Content Protection/LCPDecryptor.swift b/Sources/LCP/Content Protection/LCPDecryptor.swift index a436737eb..c3b3be5d9 100644 --- a/Sources/LCP/Content Protection/LCPDecryptor.swift +++ b/Sources/LCP/Content Protection/LCPDecryptor.swift @@ -118,7 +118,7 @@ final class LCPDecryptor { private lazy var plainTextSize = memoize(_plainTextSize) private func _plainTextSize() async -> ReadResult { - await resource.estimatedLength().flatMap { length in + await resource.estimatedLength().asyncFlatMap { length in guard let length = length else { return failure(.requiredEstimatedLength) } @@ -156,7 +156,7 @@ final class LCPDecryptor { } } - return await resource.estimatedLength().flatMap { encryptedLength in + return await resource.estimatedLength().asyncFlatMap { encryptedLength in guard let encryptedLength = encryptedLength else { return failure(.requiredEstimatedLength) } diff --git a/Sources/Navigator/Audiobook/PublicationMediaLoader.swift b/Sources/Navigator/Audiobook/PublicationMediaLoader.swift index a2f6d05bd..5947ff566 100644 --- a/Sources/Navigator/Audiobook/PublicationMediaLoader.swift +++ b/Sources/Navigator/Audiobook/PublicationMediaLoader.swift @@ -195,7 +195,7 @@ extension URL { extension Resource { func length() async -> ReadResult { await estimatedLength() - .flatMap { length in + .asyncFlatMap { length in if let length = length { return .success(length) } else { diff --git a/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift b/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift index 068dc8fe3..1adeada18 100644 --- a/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift +++ b/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift @@ -222,9 +222,9 @@ open class EPUBNavigatorViewController: UIViewController, // Disable user interaction while transitioning, to avoid UX issues. switch state { case .initializing, .loading, .jumping, .moving: - paginationView.isUserInteractionEnabled = false + paginationView?.isUserInteractionEnabled = false case .idle: - paginationView.isUserInteractionEnabled = true + paginationView?.isUserInteractionEnabled = true } } } diff --git a/Sources/Navigator/EPUB/EPUBSpreadView.swift b/Sources/Navigator/EPUB/EPUBSpreadView.swift index 94f075487..194ea0cf4 100644 --- a/Sources/Navigator/EPUB/EPUBSpreadView.swift +++ b/Sources/Navigator/EPUB/EPUBSpreadView.swift @@ -6,7 +6,7 @@ import ReadiumShared import SwiftSoup -import WebKit +@preconcurrency import WebKit protocol EPUBSpreadViewDelegate: AnyObject { /// Called when the spread view finished loading. diff --git a/Sources/Shared/Publication/Services/Content/Iterators/HTMLResourceContentIterator.swift b/Sources/Shared/Publication/Services/Content/Iterators/HTMLResourceContentIterator.swift index 39e34fa01..64386f26f 100644 --- a/Sources/Shared/Publication/Services/Content/Iterators/HTMLResourceContentIterator.swift +++ b/Sources/Shared/Publication/Services/Content/Iterators/HTMLResourceContentIterator.swift @@ -101,7 +101,7 @@ public class HTMLResourceContentIterator: ContentIterator { .eraseToAnyError() .tryMap { try SwiftSoup.parse($0) } .tryMap { try parse(document: $0, locator: locator, beforeMaxLength: beforeMaxLength) } - .map { await adjustProgressions(of: $0) } + .asyncMap { await adjustProgressions(of: $0) } resource.close() return try result.get() } diff --git a/Sources/Shared/Publication/Services/Search/SearchService.swift b/Sources/Shared/Publication/Services/Search/SearchService.swift index ccb7ff228..89da6955b 100644 --- a/Sources/Shared/Publication/Services/Search/SearchService.swift +++ b/Sources/Shared/Publication/Services/Search/SearchService.swift @@ -43,7 +43,7 @@ public extension SearchIterator { @discardableResult func forEach(_ block: @escaping (LocatorCollection) -> Void) async -> SearchResult { func next() async -> SearchResult { - await self.next().flatMap { locators in + await self.next().asyncFlatMap { locators in if let locators = locators { block(locators) return await next() diff --git a/Sources/Shared/Toolkit/Data/Asset/AssetRetriever.swift b/Sources/Shared/Toolkit/Data/Asset/AssetRetriever.swift index 888785033..3d97551c9 100644 --- a/Sources/Shared/Toolkit/Data/Asset/AssetRetriever.swift +++ b/Sources/Shared/Toolkit/Data/Asset/AssetRetriever.swift @@ -80,7 +80,7 @@ public final class AssetRetriever { /// Retrieves an asset from a URL and a known format. public func retrieve(url: AbsoluteURL, format: Format) async -> Result { await openResource(at: url) - .flatMap { resource in + .asyncFlatMap { resource in await tryOpenArchive(with: resource, format: format) .mapError { .reading($0) } .map { container in @@ -101,7 +101,7 @@ public final class AssetRetriever { /// Retrieves an asset from a URL of unknown format. public func retrieve(url: AbsoluteURL, hints: FormatHints = FormatHints()) async -> Result { await openResource(at: url) - .flatMap { resource in + .asyncFlatMap { resource in await retrieve(resource: resource, hints: hints) .mapError { AssetRetrieveURLError($0) } } @@ -111,7 +111,7 @@ public final class AssetRetriever { public func retrieve(resource: Resource, hints: FormatHints = FormatHints()) async -> Result { await resource.fill(hints: hints) .mapError { .reading($0) } - .flatMap { hints in + .asyncFlatMap { hints in await refine( format: formatSniffer.sniffHints(hints) ?? .null, of: .resource(ResourceAsset(resource: resource, format: .null)) diff --git a/Sources/Shared/Toolkit/Data/Resource/BufferingResource.swift b/Sources/Shared/Toolkit/Data/Resource/BufferingResource.swift index 243c2112f..29726d3bf 100644 --- a/Sources/Shared/Toolkit/Data/Resource/BufferingResource.swift +++ b/Sources/Shared/Toolkit/Data/Resource/BufferingResource.swift @@ -19,7 +19,7 @@ import Foundation /// resource by chunks. The buffer is ignored when reading backward or far /// ahead. public actor BufferingResource: Resource { - private let resource: Resource + private nonisolated let resource: Resource private let bufferSize: UInt64 /// - Parameter bufferSize: Size of the buffer chunks to read. diff --git a/Sources/Shared/Toolkit/Data/Resource/CachingResource.swift b/Sources/Shared/Toolkit/Data/Resource/CachingResource.swift index 6823adc84..4f7dc3872 100644 --- a/Sources/Shared/Toolkit/Data/Resource/CachingResource.swift +++ b/Sources/Shared/Toolkit/Data/Resource/CachingResource.swift @@ -13,7 +13,7 @@ import Foundation /// **Warning**: Bytes are read and cached entirely the first time, even if only a `range` is /// requested. So this is not appropriate for large resources. public actor CachingResource: Resource { - private let resource: Resource + private nonisolated let resource: Resource public init(resource: Resource) { self.resource = resource diff --git a/Sources/Shared/Toolkit/Data/Resource/ResourceContentExtractor.swift b/Sources/Shared/Toolkit/Data/Resource/ResourceContentExtractor.swift index 4f63b257a..34802ea66 100644 --- a/Sources/Shared/Toolkit/Data/Resource/ResourceContentExtractor.swift +++ b/Sources/Shared/Toolkit/Data/Resource/ResourceContentExtractor.swift @@ -47,7 +47,7 @@ class _HTMLResourceContentExtractor: _ResourceContentExtractor { func extractText(of resource: Resource) async -> ReadResult { await resource.readAsString() - .flatMap { content in + .asyncFlatMap { content in do { // First try to parse a valid XML document, then fallback on SwiftSoup, which is slower. var text = await parse(xml: content) diff --git a/Sources/Shared/Toolkit/Data/Resource/TransformingResource.swift b/Sources/Shared/Toolkit/Data/Resource/TransformingResource.swift index 67493a2fc..c008f8e21 100644 --- a/Sources/Shared/Toolkit/Data/Resource/TransformingResource.swift +++ b/Sources/Shared/Toolkit/Data/Resource/TransformingResource.swift @@ -71,7 +71,7 @@ open class TransformingResource: Resource { /// Convenient shortcuts to create a `TransformingResource`. public extension Resource { func map(transform: @escaping (Data) async -> Data) -> Resource { - TransformingResource(self, transform: { await $0.map(transform) }) + TransformingResource(self, transform: { await $0.asyncMap(transform) }) } func mapAsString(encoding: String.Encoding = .utf8, transform: @escaping (String) -> String) -> Resource { diff --git a/Sources/Shared/Toolkit/Format/FormatSnifferBlob.swift b/Sources/Shared/Toolkit/Format/FormatSnifferBlob.swift index decf50413..fbb22f53e 100644 --- a/Sources/Shared/Toolkit/Format/FormatSnifferBlob.swift +++ b/Sources/Shared/Toolkit/Format/FormatSnifferBlob.swift @@ -35,7 +35,7 @@ public actor FormatSnifferBlob { func read() async -> ReadResult { if bytes == nil { bytes = await length() - .flatMap { length in + .asyncFlatMap { length in guard let length = length, length < 5 * 1000 * 1000 else { return .success(nil) } @@ -72,8 +72,8 @@ public actor FormatSnifferBlob { /// Reads the whole content as an XML document. func readAsXML() async -> ReadResult { if xml == nil { - xml = await read().map { - await $0.flatMap { + xml = await read().asyncMap { + await $0.asyncFlatMap { try? await xmlDocumentFactory.open(data: $0, namespaces: []) } } diff --git a/Sources/Shared/Toolkit/Format/Sniffers/EPUBFormatSniffer.swift b/Sources/Shared/Toolkit/Format/Sniffers/EPUBFormatSniffer.swift index b532c9343..72de84f67 100644 --- a/Sources/Shared/Toolkit/Format/Sniffers/EPUBFormatSniffer.swift +++ b/Sources/Shared/Toolkit/Format/Sniffers/EPUBFormatSniffer.swift @@ -37,7 +37,7 @@ public struct EPUBFormatSniffer: FormatSniffer { } return await resource.readAsString() - .flatMap { mimetype in + .asyncFlatMap { mimetype in if MediaType.epub.matches(MediaType(mimetype.trimmingCharacters(in: .whitespacesAndNewlines))) { var format = format format.addSpecifications(.epub) @@ -66,7 +66,7 @@ public struct EPUBFormatSniffer: FormatSniffer { } return await resource.read() - .map { try? await xmlDocumentFactory.open(data: $0, namespaces: []) } + .asyncMap { try? await xmlDocumentFactory.open(data: $0, namespaces: []) } .map { document in guard let document = document else { return format diff --git a/Sources/Shared/Toolkit/Format/Sniffers/HTMLFormatSniffer.swift b/Sources/Shared/Toolkit/Format/Sniffers/HTMLFormatSniffer.swift index e4f55f5b5..abba9d80f 100644 --- a/Sources/Shared/Toolkit/Format/Sniffers/HTMLFormatSniffer.swift +++ b/Sources/Shared/Toolkit/Format/Sniffers/HTMLFormatSniffer.swift @@ -28,7 +28,7 @@ public struct HTMLFormatSniffer: FormatSniffer { public func sniffBlob(_ blob: FormatSnifferBlob, refining format: Format) async -> ReadResult { await blob.readAsXML() - .map { document in + .asyncMap { document in if let format = sniffDocument(document) { return format } else if let format = await sniffString(blob) { diff --git a/Sources/Shared/Toolkit/HTTP/DefaultHTTPClient.swift b/Sources/Shared/Toolkit/HTTP/DefaultHTTPClient.swift index 30dde46d2..8ad3fc6de 100644 --- a/Sources/Shared/Toolkit/HTTP/DefaultHTTPClient.swift +++ b/Sources/Shared/Toolkit/HTTP/DefaultHTTPClient.swift @@ -185,12 +185,12 @@ public final class DefaultHTTPClient: HTTPClient, Loggable { consume: @escaping (Data, Double?) -> Void ) async -> HTTPResult { await request.httpRequest() - .flatMap(willStartRequest) - .flatMap { request in + .asyncFlatMap(willStartRequest) + .asyncFlatMap { request in await startTask(for: request, consume: consume) - .recover { error in + .asyncRecover { error in await recover(request, from: error) - .flatMap { newRequest in + .asyncFlatMap { newRequest in await stream(request: newRequest, consume: consume) } } diff --git a/Sources/Streamer/Parser/Readium/ReadiumWebPubParser.swift b/Sources/Streamer/Parser/Readium/ReadiumWebPubParser.swift index 3bc96fedd..791126c63 100644 --- a/Sources/Streamer/Parser/Readium/ReadiumWebPubParser.swift +++ b/Sources/Streamer/Parser/Readium/ReadiumWebPubParser.swift @@ -75,7 +75,7 @@ public class ReadiumWebPubParser: PublicationParser, Loggable { )) } .mapError { .reading($0) } - .flatMap { container in + .asyncFlatMap { container in await parse( container: container, format: FormatSpecifications(.rpf), diff --git a/TestApp/Integrations/Carthage/project+lcp.yml b/TestApp/Integrations/Carthage/project+lcp.yml index ef9eac672..dae39d83b 100644 --- a/TestApp/Integrations/Carthage/project+lcp.yml +++ b/TestApp/Integrations/Carthage/project+lcp.yml @@ -4,7 +4,7 @@ options: packages: GRDB: url: https://github.com/groue/GRDB.swift.git - from: 5.8.0 + from: 6.9.23 Kingfisher: url: https://github.com/onevcat/Kingfisher.git from: 5.15.8 diff --git a/TestApp/Integrations/Carthage/project.yml b/TestApp/Integrations/Carthage/project.yml index 24a543164..bb9806e9d 100644 --- a/TestApp/Integrations/Carthage/project.yml +++ b/TestApp/Integrations/Carthage/project.yml @@ -4,7 +4,7 @@ options: packages: GRDB: url: https://github.com/groue/GRDB.swift.git - from: 5.8.0 + from: 6.9.23 Kingfisher: url: https://github.com/onevcat/Kingfisher.git from: 5.15.8 diff --git a/TestApp/Integrations/CocoaPods/Podfile b/TestApp/Integrations/CocoaPods/Podfile index 6d02b2e2f..718becbc5 100644 --- a/TestApp/Integrations/CocoaPods/Podfile +++ b/TestApp/Integrations/CocoaPods/Podfile @@ -14,7 +14,7 @@ target 'TestApp' do # Required for R2Streamer and ReadiumAdapterGCDWebServer. pod 'ReadiumGCDWebServer', podspec: 'https://raw.githubusercontent.com/readium/GCDWebServer/master/GCDWebServer.podspec' - pod 'GRDB.swift', '~> 5.0' + pod 'GRDB.swift', '~> 6.0' pod 'Kingfisher', '~> 5.0' pod 'MBProgressHUD', '~> 1.0' pod 'SwiftSoup', '~> 2.0' diff --git a/TestApp/Integrations/CocoaPods/Podfile+lcp b/TestApp/Integrations/CocoaPods/Podfile+lcp index 31186eded..28124770d 100644 --- a/TestApp/Integrations/CocoaPods/Podfile+lcp +++ b/TestApp/Integrations/CocoaPods/Podfile+lcp @@ -17,7 +17,7 @@ target 'TestApp' do # Required for ReadiumStreamer and ReadiumAdapterGCDWebServer. pod 'ReadiumGCDWebServer', podspec: 'https://raw.githubusercontent.com/readium/GCDWebServer/master/GCDWebServer.podspec' - pod 'GRDB.swift', '~> 5.0' + pod 'GRDB.swift', '~> 6.0' pod 'Kingfisher', '~> 5.0' pod 'MBProgressHUD', '~> 1.0' pod 'SwiftSoup', '~> 2.0' diff --git a/TestApp/Integrations/Local/project+lcp.yml b/TestApp/Integrations/Local/project+lcp.yml index ba2c0558d..908e289c3 100644 --- a/TestApp/Integrations/Local/project+lcp.yml +++ b/TestApp/Integrations/Local/project+lcp.yml @@ -8,7 +8,7 @@ packages: path: R2LCPClient GRDB: url: https://github.com/groue/GRDB.swift.git - from: 5.8.0 + from: 6.9.23 Kingfisher: url: https://github.com/onevcat/Kingfisher.git from: 5.15.8 diff --git a/TestApp/Integrations/Local/project.yml b/TestApp/Integrations/Local/project.yml index 8ef863399..fcd4aed6d 100644 --- a/TestApp/Integrations/Local/project.yml +++ b/TestApp/Integrations/Local/project.yml @@ -6,7 +6,7 @@ packages: path: .. GRDB: url: https://github.com/groue/GRDB.swift.git - from: 5.8.0 + from: 6.9.23 Kingfisher: url: https://github.com/onevcat/Kingfisher.git from: 5.15.8 diff --git a/TestApp/Integrations/SPM/project+lcp.yml b/TestApp/Integrations/SPM/project+lcp.yml index 6a6e7d29a..56c561b9b 100644 --- a/TestApp/Integrations/SPM/project+lcp.yml +++ b/TestApp/Integrations/SPM/project+lcp.yml @@ -9,7 +9,7 @@ packages: path: R2LCPClient GRDB: url: https://github.com/groue/GRDB.swift.git - from: 5.8.0 + from: 6.9.23 Kingfisher: url: https://github.com/onevcat/Kingfisher.git from: 5.15.8 diff --git a/TestApp/Integrations/SPM/project.yml b/TestApp/Integrations/SPM/project.yml index d7dff76e1..3c1a2b7c4 100644 --- a/TestApp/Integrations/SPM/project.yml +++ b/TestApp/Integrations/SPM/project.yml @@ -7,7 +7,7 @@ packages: VERSION GRDB: url: https://github.com/groue/GRDB.swift.git - from: 5.8.0 + from: 6.9.23 Kingfisher: url: https://github.com/onevcat/Kingfisher.git from: 5.15.8 diff --git a/TestApp/Sources/Data/Database.swift b/TestApp/Sources/Data/Database.swift index 6a7bca42d..f95e1c583 100644 --- a/TestApp/Sources/Data/Database.swift +++ b/TestApp/Sources/Data/Database.swift @@ -16,7 +16,7 @@ final class Database { private let writer: DatabaseWriter - private init(writer: DatabaseWriter = DatabaseQueue()) throws { + private init(writer: DatabaseWriter) throws { self.writer = writer var migrator = DatabaseMigrator()