diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 006d6318e..6cc3dc18d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -40,7 +40,7 @@ body: attributes: label: Swift Version description: What version of Swift are you using? - placeholder: ex. 5.10 + placeholder: ex. 6.0 validations: required: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c33b468e..2544eec9e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,7 @@ jobs: name: xcodebuild (macOS latest) runs-on: macos-15 strategy: + fail-fast: false matrix: command: [test, ""] platform: [IOS, MACOS] @@ -81,41 +82,6 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} file: lcov.info - macos-legacy: - name: xcodebuild (macOS legacy) - runs-on: macos-14 - strategy: - matrix: - command: [test, ""] - platform: [IOS, MACOS, MAC_CATALYST] - xcode: ["15.4"] - include: - - { command: test, skip_release: 1 } - steps: - - uses: actions/checkout@v5 - - name: Select Xcode ${{ matrix.xcode }} - run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app - - name: List available devices - run: xcrun simctl list devices available - - name: Cache derived data - uses: actions/cache@v4 - with: - path: | - ~/.derivedData - key: | - deriveddata-xcodebuild-${{ matrix.platform }}-${{ matrix.xcode }}-${{ matrix.command }}-${{ hashFiles('**/Sources/**/*.swift', '**/Tests/**/*.swift') }} - restore-keys: | - deriveddata-xcodebuild-${{ matrix.platform }}-${{ matrix.xcode }}-${{ matrix.command }}- - - name: Set IgnoreFileSystemDeviceInodeChanges flag - run: defaults write com.apple.dt.XCBuild IgnoreFileSystemDeviceInodeChanges -bool YES - - name: Update mtime for incremental builds - uses: chetan/git-restore-mtime-action@v2 - - name: Debug - run: make XCODEBUILD_ARGUMENT="${{ matrix.command }}" CONFIG=Debug PLATFORM="${{ matrix.platform }}" xcodebuild - - name: Release - if: matrix.skip_release != '1' - run: make XCODEBUILD_ARGUMENT="${{ matrix.command }}" CONFIG=Release PLATFORM="${{ matrix.platform }}" xcodebuild - spm: runs-on: macos-15 strategy: diff --git a/Examples/Examples/Profile/UserIdentityList.swift b/Examples/Examples/Profile/UserIdentityList.swift index 7635b6bd9..f7346fdce 100644 --- a/Examples/Examples/Profile/UserIdentityList.swift +++ b/Examples/Examples/Profile/UserIdentityList.swift @@ -237,30 +237,28 @@ struct UserIdentityList: View { } .id(id) .navigationTitle("Linked Identities") - #if swift(>=5.10) - .toolbar { - ToolbarItem(placement: .primaryAction) { - if !providers.isEmpty { - Menu { - ForEach(providers) { provider in - Button { - Task { - await linkProvider(provider) - } - } label: { - Label( - provider.rawValue.capitalized, - systemImage: iconForProvider(provider.rawValue) - ) + .toolbar { + ToolbarItem(placement: .primaryAction) { + if !providers.isEmpty { + Menu { + ForEach(providers) { provider in + Button { + Task { + await linkProvider(provider) } + } label: { + Label( + provider.rawValue.capitalized, + systemImage: iconForProvider(provider.rawValue) + ) } - } label: { - Label("Link Account", systemImage: "plus") } + } label: { + Label("Link Account", systemImage: "plus") } } } - #endif + } } private func iconForProvider(_ provider: String) -> String { diff --git a/Examples/Package.swift b/Examples/Package.swift index e75600e00..9a0b398e0 100644 --- a/Examples/Package.swift +++ b/Examples/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.7 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import Foundation diff --git a/Examples/README.md b/Examples/README.md index 75839d254..6bc3f5879 100644 --- a/Examples/README.md +++ b/Examples/README.md @@ -171,7 +171,7 @@ Features: ## Prerequisites -- Xcode 15.0 or later +- Xcode 16.0 or later - iOS 17.0+ / macOS 14.0+ or later - [Supabase CLI](https://supabase.com/docs/guides/cli) installed diff --git a/Package.swift b/Package.swift index ade0d0fd2..bdf28f74c 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.10 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import Foundation @@ -204,7 +204,8 @@ let package = Package( "Mocker", ] ), - ] + ], + swiftLanguageModes: [.v6] ) for target in package.targets where !target.isTest { diff --git a/Package@swift-6.1.swift b/Package@swift-6.1.swift index 75049b7d8..675d5b13d 100644 --- a/Package@swift-6.1.swift +++ b/Package@swift-6.1.swift @@ -204,7 +204,7 @@ let package = Package( ] ), ], - swiftLanguageModes: [.v5] + swiftLanguageModes: [.v6] ) for target in package.targets where !target.isTest { diff --git a/README.md b/README.md index f02defb57..9c48cdb0e 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ Supabase SDK for Swift. Mirrors the design of [supabase-js](https://github.com/s ### Requirements - iOS 16.0+ / macOS 13+ / tvOS 16+ / watchOS 9+ / visionOS 1+ -- Xcode 15.3+ -- Swift 5.10+ +- Xcode 16.0+ +- Swift 6.0+ > [!IMPORTANT] > Check the [Support Policy](#support-policy) to learn when dropping Xcode, Swift, and platform versions will not be considered a **breaking change**. diff --git a/Sources/Auth/AuthClient.swift b/Sources/Auth/AuthClient.swift index 8a602d246..a42e8e7a9 100644 --- a/Sources/Auth/AuthClient.swift +++ b/Sources/Auth/AuthClient.swift @@ -60,7 +60,7 @@ private actor GlobalJWKSCache { private let globalJWKSCache = GlobalJWKSCache() public actor AuthClient { - static var globalClientID = 0 + static let globalClientID = LockIsolated(0) nonisolated let clientID: AuthClientID nonisolated private var api: APIClient { Dependencies[clientID].api } @@ -122,8 +122,7 @@ public actor AuthClient { /// - Parameters: /// - configuration: The client configuration. public init(configuration: Configuration) { - AuthClient.globalClientID += 1 - clientID = AuthClient.globalClientID + clientID = AuthClient.globalClientID.withValue { $0 += 1; return $0 } Dependencies[clientID] = Dependencies( configuration: configuration, diff --git a/Sources/Storage/Helpers.swift b/Sources/Storage/Helpers.swift index 95d3eb9ab..cadce9f12 100644 --- a/Sources/Storage/Helpers.swift +++ b/Sources/Storage/Helpers.swift @@ -17,39 +17,21 @@ import Foundation import UniformTypeIdentifiers func mimeType(forPathExtension pathExtension: String) -> String { - #if swift(>=5.9) - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { - return UTType(filenameExtension: pathExtension)?.preferredMIMEType - ?? "application/octet-stream" - } else { - if let id = UTTypeCreatePreferredIdentifierForTag( - kUTTagClassFilenameExtension, pathExtension as CFString, nil - )?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)? - .takeRetainedValue() - { - return contentType as String - } - - return "application/octet-stream" + if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { + return UTType(filenameExtension: pathExtension)?.preferredMIMEType + ?? "application/octet-stream" + } else { + if let id = UTTypeCreatePreferredIdentifierForTag( + kUTTagClassFilenameExtension, pathExtension as CFString, nil + )?.takeRetainedValue(), + let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)? + .takeRetainedValue() + { + return contentType as String } - #else - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, *) { - return UTType(filenameExtension: pathExtension)?.preferredMIMEType - ?? "application/octet-stream" - } else { - if let id = UTTypeCreatePreferredIdentifierForTag( - kUTTagClassFilenameExtension, pathExtension as CFString, nil - )?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)? - .takeRetainedValue() - { - return contentType as String - } - return "application/octet-stream" - } - #endif + return "application/octet-stream" + } } #else diff --git a/Sources/Storage/MultipartFormData.swift b/Sources/Storage/MultipartFormData.swift index 7fa45f2ff..446b166b0 100644 --- a/Sources/Storage/MultipartFormData.swift +++ b/Sources/Storage/MultipartFormData.swift @@ -569,39 +569,21 @@ class MultipartFormData { // MARK: - Private - Mime Type static func mimeType(forPathExtension pathExtension: String) -> String { - #if swift(>=5.9) - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { - return UTType(filenameExtension: pathExtension)?.preferredMIMEType - ?? "application/octet-stream" - } else { - if let id = UTTypeCreatePreferredIdentifierForTag( - kUTTagClassFilenameExtension, pathExtension as CFString, nil - )?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)? - .takeRetainedValue() - { - return contentType as String - } - - return "application/octet-stream" - } - #else - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, *) { - return UTType(filenameExtension: pathExtension)?.preferredMIMEType - ?? "application/octet-stream" - } else { - if let id = UTTypeCreatePreferredIdentifierForTag( - kUTTagClassFilenameExtension, pathExtension as CFString, nil - )?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)? - .takeRetainedValue() - { - return contentType as String - } - - return "application/octet-stream" + if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { + return UTType(filenameExtension: pathExtension)?.preferredMIMEType + ?? "application/octet-stream" + } else { + if let id = UTTypeCreatePreferredIdentifierForTag( + kUTTagClassFilenameExtension, pathExtension as CFString, nil + )?.takeRetainedValue(), + let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)? + .takeRetainedValue() + { + return contentType as String } - #endif + + return "application/octet-stream" + } } } diff --git a/Tests/AuthTests/AuthClientTests.swift b/Tests/AuthTests/AuthClientTests.swift index 99d27a0b5..7cf3dc57c 100644 --- a/Tests/AuthTests/AuthClientTests.swift +++ b/Tests/AuthTests/AuthClientTests.swift @@ -190,7 +190,7 @@ final class AuthClientTests: XCTestCase { let validSession = Session.validSession Dependencies[sut.clientID].sessionStorage.store(validSession) - let eventsTask = Task { + let eventsTask = Task { [sut] in await sut.authStateChanges.prefix(2).collect() } @@ -236,7 +236,7 @@ final class AuthClientTests: XCTestCase { let validSession = Session.validSession Dependencies[sut.clientID].sessionStorage.store(validSession) - let eventsTask = Task { + let eventsTask = Task { [sut] in await sut.authStateChanges.prefix(2).collect() } @@ -282,7 +282,7 @@ final class AuthClientTests: XCTestCase { let validSession = Session.validSession Dependencies[sut.clientID].sessionStorage.store(validSession) - let eventsTask = Task { + let eventsTask = Task { [sut] in await sut.authStateChanges.prefix(2).collect() } diff --git a/Tests/AuthTests/MockHelpers.swift b/Tests/AuthTests/MockHelpers.swift index e5c3210cc..b53449fc0 100644 --- a/Tests/AuthTests/MockHelpers.swift +++ b/Tests/AuthTests/MockHelpers.swift @@ -16,7 +16,7 @@ extension Decodable { } extension Dependencies { - static var mock = Dependencies( + static let mock = Dependencies( configuration: AuthClient.Configuration( url: URL(string: "https://project-id.supabase.com")!, localStorage: InMemoryLocalStorage(), diff --git a/Tests/AuthTests/RequestsTests.swift b/Tests/AuthTests/RequestsTests.swift index 92c5b5aac..a8dcde072 100644 --- a/Tests/AuthTests/RequestsTests.swift +++ b/Tests/AuthTests/RequestsTests.swift @@ -509,7 +509,7 @@ final class RequestsTests: XCTestCase { record: Bool = false, flowType: AuthFlowType = .implicit, fetch: AuthClient.FetchHandler? = nil, - file: StaticString = #file, + file: StaticString = #filePath, testName: String = #function, line: UInt = #line ) -> AuthClient { diff --git a/Tests/AuthTests/SessionManagerTests.swift b/Tests/AuthTests/SessionManagerTests.swift index 3042419e4..8ac4a94c8 100644 --- a/Tests/AuthTests/SessionManagerTests.swift +++ b/Tests/AuthTests/SessionManagerTests.swift @@ -93,8 +93,8 @@ final class SessionManagerTests: XCTestCase { // Fire N tasks and call sut.session() let tasks = (0..<10).map { _ in - Task { [weak self] in - try await self?.sut.session() + Task { [sut] in + try await sut.session() } } @@ -104,7 +104,7 @@ final class SessionManagerTests: XCTestCase { refreshSessionContinuation.finish() // Await for all tasks to complete. - var result: [Result] = [] + var result: [Result] = [] for task in tasks { let value = await task.result result.append(value) @@ -113,7 +113,7 @@ final class SessionManagerTests: XCTestCase { // Verify that refresher and storage was called only once. expectNoDifference(refreshSessionCallCount.value, 1) expectNoDifference( - try result.map { try $0.get()?.accessToken }, + try result.map { try $0.get().accessToken }, (0..<10).map { _ in validSession.accessToken } ) } diff --git a/Tests/FunctionsTests/FunctionsClientTests.swift b/Tests/FunctionsTests/FunctionsClientTests.swift index 1b456236d..992fb5610 100644 --- a/Tests/FunctionsTests/FunctionsClientTests.swift +++ b/Tests/FunctionsTests/FunctionsClientTests.swift @@ -32,8 +32,8 @@ final class FunctionsClientTests: XCTestCase { "apikey": apiKey ], region: region.flatMap(FunctionRegion.init(rawValue:)), - fetch: { request in - try await self.session.data(for: request) + fetch: { [session] request in + try await session.data(for: request) }, sessionConfiguration: sessionConfiguration ) diff --git a/Tests/FunctionsTests/RequestTests.swift b/Tests/FunctionsTests/RequestTests.swift index 00b4c7896..c8c4a46a2 100644 --- a/Tests/FunctionsTests/RequestTests.swift +++ b/Tests/FunctionsTests/RequestTests.swift @@ -46,7 +46,7 @@ final class RequestTests: XCTestCase { func snapshot( record: Bool = false, _ test: (FunctionsClient) async throws -> Void, - file: StaticString = #file, + file: StaticString = #filePath, testName: String = #function, line: UInt = #line ) async { diff --git a/Tests/PostgRESTTests/BuildURLRequestTests.swift b/Tests/PostgRESTTests/BuildURLRequestTests.swift index 6c4cbf370..9ca6a63ad 100644 --- a/Tests/PostgRESTTests/BuildURLRequestTests.swift +++ b/Tests/PostgRESTTests/BuildURLRequestTests.swift @@ -27,7 +27,7 @@ final class BuildURLRequestTests: XCTestCase { init( name: String, record: Bool = false, - file: StaticString = #file, + file: StaticString = #filePath, line: UInt = #line, build: @escaping @Sendable (PostgrestClient) async throws -> PostgrestBuilder ) { diff --git a/Tests/PostgRESTTests/PostgresQueryTests.swift b/Tests/PostgRESTTests/PostgresQueryTests.swift index 16edcd95a..957f4a3ed 100644 --- a/Tests/PostgRESTTests/PostgresQueryTests.swift +++ b/Tests/PostgRESTTests/PostgresQueryTests.swift @@ -33,8 +33,8 @@ class PostgrestQueryTests: XCTestCase { "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0" ], logger: nil, - fetch: { - try await self.session.data(for: $0) + fetch: { [session] in + try await session.data(for: $0) }, encoder: { let encoder = PostgrestClient.Configuration.jsonEncoder diff --git a/Tests/RealtimeTests/CallbackManagerTests.swift b/Tests/RealtimeTests/CallbackManagerTests.swift index d0b7441d5..d80269ccf 100644 --- a/Tests/RealtimeTests/CallbackManagerTests.swift +++ b/Tests/RealtimeTests/CallbackManagerTests.swift @@ -14,7 +14,6 @@ import XCTest final class CallbackManagerTests: XCTestCase { func testIntegration() { let callbackManager = CallbackManager() - XCTAssertNoLeak(callbackManager) let filter = PostgresJoinConfig( event: .update, @@ -50,7 +49,6 @@ final class CallbackManagerTests: XCTestCase { func testSetServerChanges() { let callbackManager = CallbackManager() - XCTAssertNoLeak(callbackManager) let changes = [ PostgresJoinConfig( @@ -69,7 +67,6 @@ final class CallbackManagerTests: XCTestCase { func testTriggerPostgresChanges() { let callbackManager = CallbackManager() - XCTAssertNoLeak(callbackManager) let updateUsersFilter = PostgresJoinConfig( event: .update, @@ -174,7 +171,6 @@ final class CallbackManagerTests: XCTestCase { func testTriggerBroadcast() throws { let callbackManager = CallbackManager() - XCTAssertNoLeak(callbackManager) let event = "new_user" let message = RealtimeMessageV2( @@ -250,11 +246,3 @@ final class CallbackManagerTests: XCTestCase { XCTAssertEqual(receivedMessage.value?.status, .ok) } } - -extension XCTestCase { - func XCTAssertNoLeak(_ object: AnyObject, file: StaticString = #file, line: UInt = #line) { - addTeardownBlock { [weak object] in - XCTAssertNil(object, file: file, line: line) - } - } -} diff --git a/Tests/RealtimeTests/RealtimeTests.swift b/Tests/RealtimeTests/RealtimeTests.swift index 5febd1269..aade9f20f 100644 --- a/Tests/RealtimeTests/RealtimeTests.swift +++ b/Tests/RealtimeTests/RealtimeTests.swift @@ -11,7 +11,6 @@ import XCTest import FoundationNetworking #endif -@available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *) final class RealtimeTests: XCTestCase { let url = URL(string: "http://localhost:54321/realtime/v1")! let apiKey = "anon.api.key" @@ -50,7 +49,7 @@ final class RealtimeTests: XCTestCase { "custom.access.token" } ), - wsTransport: { _, _ in self.client }, + wsTransport: { [client] _, _ in client }, http: http ) } @@ -578,11 +577,11 @@ final class RealtimeTests: XCTestCase { func testBroadcastWithHTTP() async throws { await http.when { $0.url.path.hasSuffix("broadcast") - } return: { _ in + } return: { [sut] _ in HTTPResponse( data: "{}".data(using: .utf8)!, response: HTTPURLResponse( - url: self.sut.broadcastURL, + url: sut.broadcastURL, statusCode: 200, httpVersion: nil, headerFields: nil diff --git a/Tests/RealtimeTests/_PushTests.swift b/Tests/RealtimeTests/_PushTests.swift index ce901bb99..df85752a7 100644 --- a/Tests/RealtimeTests/_PushTests.swift +++ b/Tests/RealtimeTests/_PushTests.swift @@ -12,8 +12,6 @@ import XCTest @testable import Realtime #if !os(Android) && !os(Linux) && !os(Windows) - @MainActor - @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *) final class _PushTests: XCTestCase { var ws: FakeWebSocket! var socket: RealtimeClientV2! @@ -45,7 +43,7 @@ import XCTest socket: socket, logger: nil ) - let push = PushV2( + let push = await PushV2( channel: channel, message: RealtimeMessageV2( joinRef: nil, @@ -71,7 +69,7 @@ import XCTest socket: socket, logger: nil ) - let push = PushV2( + let push = await PushV2( channel: channel, message: RealtimeMessageV2( joinRef: nil, @@ -86,7 +84,7 @@ import XCTest await push.send() } await Task.megaYield() - push.didReceive(status: .ok) + await push.didReceive(status: .ok) let status = await task.value XCTAssertEqual(status, .ok) diff --git a/Tests/StorageTests/StorageBucketAPITests.swift b/Tests/StorageTests/StorageBucketAPITests.swift index d4de1cd4f..d60de7483 100644 --- a/Tests/StorageTests/StorageBucketAPITests.swift +++ b/Tests/StorageTests/StorageBucketAPITests.swift @@ -47,7 +47,7 @@ final class StorageBucketAPITests: XCTestCase { Mocker.removeAll() } - func testURLConstruction() { + func testURLConstruction() async { let urlTestCases = [ ( "https://blah.supabase.co/storage/v1", @@ -77,7 +77,7 @@ final class StorageBucketAPITests: XCTestCase { ] for (input, expect, description) in urlTestCases { - XCTContext.runActivity(named: "should \(description) if useNewHostname is true") { _ in + await XCTContext.runActivity(named: "should \(description) if useNewHostname is true") { _ in let storage = SupabaseStorageClient( configuration: StorageClientConfiguration( url: URL(string: input)!, @@ -88,7 +88,7 @@ final class StorageBucketAPITests: XCTestCase { XCTAssertEqual(storage.configuration.url.absoluteString, expect) } - XCTContext.runActivity(named: "should not modify host if useNewHostname is false") { _ in + await XCTContext.runActivity(named: "should not modify host if useNewHostname is false") { _ in let storage = SupabaseStorageClient( configuration: StorageClientConfiguration( url: URL(string: input)!, diff --git a/Tests/StorageTests/SupabaseStorageTests.swift b/Tests/StorageTests/SupabaseStorageTests.swift index cca842e5d..c44cf4c83 100644 --- a/Tests/StorageTests/SupabaseStorageTests.swift +++ b/Tests/StorageTests/SupabaseStorageTests.swift @@ -58,7 +58,7 @@ final class SupabaseStorageTests: XCTestCase { } func testCreateSignedURLs() async throws { - sessionMock.fetch = { _ in + sessionMock.fetch = { [supabaseURL] _ in ( """ [ @@ -71,7 +71,7 @@ final class SupabaseStorageTests: XCTestCase { ] """.data(using: .utf8)!, HTTPURLResponse( - url: self.supabaseURL, + url: supabaseURL, statusCode: 200, httpVersion: nil, headerFields: nil @@ -96,7 +96,7 @@ final class SupabaseStorageTests: XCTestCase { func testUploadData() async throws { testingBoundary.setValue("alamofire.boundary.c21f947c1c7b0c57") - sessionMock.fetch = { request in + sessionMock.fetch = { [supabaseURL] request in assertInlineSnapshot(of: request, as: .curl) { #""" curl \ @@ -133,7 +133,7 @@ final class SupabaseStorageTests: XCTestCase { } """.data(using: .utf8)!, HTTPURLResponse( - url: self.supabaseURL, + url: supabaseURL, statusCode: 200, httpVersion: nil, headerFields: nil @@ -157,7 +157,7 @@ final class SupabaseStorageTests: XCTestCase { func testUploadFileURL() async throws { testingBoundary.setValue("alamofire.boundary.c21f947c1c7b0c57") - sessionMock.fetch = { request in + sessionMock.fetch = { [supabaseURL] request in assertInlineSnapshot(of: request, as: .curl) { #""" curl \ @@ -179,7 +179,7 @@ final class SupabaseStorageTests: XCTestCase { } """.data(using: .utf8)!, HTTPURLResponse( - url: self.supabaseURL, + url: supabaseURL, statusCode: 200, httpVersion: nil, headerFields: nil @@ -209,7 +209,7 @@ final class SupabaseStorageTests: XCTestCase { } private func uploadFileURL(_ fileName: String) -> URL { - URL(fileURLWithPath: #file) + URL(fileURLWithPath: #filePath) .deletingLastPathComponent() .appendingPathComponent(fileName) }