Skip to content

fix: remove caching of files #414

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
# Parse-Swift Changelog

### main
[Full Changelog](https://github.com/parse-community/Parse-Swift/compare/4.13.0...main)
[Full Changelog](https://github.com/parse-community/Parse-Swift/compare/4.13.1...main)
* _Contributing to this repo? Add info about your change here to be included in the next release_

### 4.13.1
[Full Changelog](https://github.com/parse-community/Parse-Swift/compare/4.13.0...4.13.1)

__Fixes__
- Remove ParseFile caching due to OS not having a natural way to cache files. Instead, if developers want to access a saved ParseFile, they should check the download directory for the respective file name ([#414](https://github.com/parse-community/Parse-Swift/pull/414)), thanks to [Corey Baker](https://github.com/cbaker6).

### 4.13.0
[Full Changelog](https://github.com/parse-community/Parse-Swift/compare/4.12.0...4.13.0)

Expand Down
15 changes: 0 additions & 15 deletions Sources/ParseSwift/Extensions/URLSession.swift
Original file line number Diff line number Diff line change
Expand Up @@ -296,21 +296,6 @@ internal extension URLSession {
location: location,
urlResponse: urlResponse,
responseError: responseError, mapper: mapper)
if case .success(let file) = result {
guard let response = urlResponse,
let parseFile = file as? ParseFile,
let fileLocation = parseFile.localURL,
let data = try? ParseCoding.jsonEncoder().encode(fileLocation) else {
completion(result)
return
}
if URLSession.parse.configuration.urlCache?.cachedResponse(for: request) == nil {
URLSession.parse.configuration.urlCache?
.storeCachedResponse(.init(response: response,
data: data),
for: request)
}
}
completion(result)
}
#if compiler(>=5.5.2) && canImport(_Concurrency)
Expand Down
2 changes: 1 addition & 1 deletion Sources/ParseSwift/ParseConstants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Foundation

enum ParseConstants {
static let sdk = "swift"
static let version = "4.12.0"
static let version = "4.13.1"
static let fileManagementDirectory = "parse/"
static let fileManagementPrivateDocumentsDirectory = "Private Documents/"
static let fileManagementLibraryDirectory = "Library/"
Expand Down
62 changes: 17 additions & 45 deletions Tests/ParseSwiftTests/ParseFileTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1123,34 +1123,20 @@ class ParseFileTests: XCTestCase { // swiftlint:disable:this type_body_length
XCTAssertEqual(fetchedFile.url, response.url)
XCTAssertNotNil(fetchedFile.localURL)

// Cache policy flakey on older Swift versions
#if compiler(>=5.5.0)
// Remove URL mocker so we can check cache
MockURLProtocol.removeAll()

let fetchedFile2 = try parseFile.fetch(options: [.cachePolicy(.returnCacheDataDontLoad)])
XCTAssertEqual(fetchedFile2.name, fetchedFile.name)
XCTAssertEqual(fetchedFile2.url, fetchedFile.url)
XCTAssertNotNil(fetchedFile2.localURL)

// More cache tests
guard let currentMemoryUsage = URLSession.parse.configuration.urlCache?.currentMemoryUsage,
let currentDiskUsage = URLSession.parse.configuration.urlCache?.currentDiskUsage else {
XCTFail("Should have unwrapped")
return
}
XCTAssertGreaterThan(currentMemoryUsage, 0)
XCTAssertGreaterThan(currentDiskUsage, 0)
ParseSwift.clearCache()
guard let updatedMemoryUsage = URLSession.parse.configuration.urlCache?.currentMemoryUsage else {
XCTFail("Should have unwrapped")
return
do {
_ = try parseFile.fetch(options: [.cachePolicy(.returnCacheDataDontLoad)])
} catch {
guard let parseError = error as? ParseError else {
XCTFail("Should have casted")
return
}
XCTAssertTrue(parseError.message.contains("No response"))
}
XCTAssertLessThan(updatedMemoryUsage, currentMemoryUsage)
#endif
}

func testFetchFileWithDirInName() throws {
func testFetchFileWithDirectoryInName() throws {
// swiftlint:disable:next line_length
guard let parseFileURL = URL(string: "http://localhost:1337/1/files/applicationId/d3a37aed0672a024595b766f97133615_logo.svg") else {
XCTFail("Should create URL")
Expand Down Expand Up @@ -1181,31 +1167,17 @@ class ParseFileTests: XCTestCase { // swiftlint:disable:this type_body_length
}
XCTAssertFalse(localURL.pathComponents.contains("myFolder"))

// Cache policy flakey on older Swift versions
#if compiler(>=5.5.0)
// Remove URL mocker so we can check cache
MockURLProtocol.removeAll()

let fetchedFile2 = try parseFile.fetch(options: [.cachePolicy(.returnCacheDataDontLoad)])
XCTAssertEqual(fetchedFile2.name, fetchedFile.name)
XCTAssertEqual(fetchedFile2.url, fetchedFile.url)
XCTAssertNotNil(fetchedFile2.localURL)

// More cache tests
guard let currentMemoryUsage = URLSession.parse.configuration.urlCache?.currentMemoryUsage,
let currentDiskUsage = URLSession.parse.configuration.urlCache?.currentDiskUsage else {
XCTFail("Should have unwrapped")
return
}
XCTAssertGreaterThan(currentMemoryUsage, 0)
XCTAssertGreaterThan(currentDiskUsage, 0)
ParseSwift.clearCache()
guard let updatedMemoryUsage = URLSession.parse.configuration.urlCache?.currentMemoryUsage else {
XCTFail("Should have unwrapped")
return
do {
_ = try parseFile.fetch(options: [.cachePolicy(.returnCacheDataDontLoad)])
} catch {
guard let parseError = error as? ParseError else {
XCTFail("Should have casted")
return
}
XCTAssertTrue(parseError.message.contains("No response"))
}
XCTAssertLessThan(updatedMemoryUsage, currentMemoryUsage)
#endif
}

func testFetchFileProgress() throws {
Expand Down