Automatically clear temporary folders whenever migrating versions as the system rarely does.

This commit is contained in:
Stefan Ceriu
2025-09-17 15:32:06 +03:00
committed by Stefan Ceriu
parent 28bd7a0d6a
commit af2c13c7dd

View File

@@ -138,9 +138,6 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
if let previousVersion = appSettings.lastVersionLaunched.flatMap(Version.init) {
performMigrationsIfNecessary(from: previousVersion, to: currentVersion)
// Manual clean to handle the potential case where the app crashes before moving a shared file.
cleanAppGroupTemporaryDirectory()
} else {
// The app has been deleted since the previous run. Reset everything.
wipeUserData(includingSettings: true)
@@ -397,6 +394,9 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
private func performMigrationsIfNecessary(from oldVersion: Version, to newVersion: Version) {
guard oldVersion != newVersion else { return }
// Be tidy and clean up after ourselves every now and then (because Apple is lazy)
clearTemporaryDirectories()
MXLog.info("The app was upgraded from \(oldVersion) to \(newVersion)")
if oldVersion < Version(1, 6, 0) {
@@ -498,25 +498,39 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
/// Manually cleans up any files in the app group's `tmp` directory.
///
/// **Note:** If there is a single file we consider it to be an active share payload and ignore it.
private func cleanAppGroupTemporaryDirectory() {
let fileURLs: [URL]
private func clearTemporaryDirectories() {
// First get rid of everything in the App's temporary directory
do {
fileURLs = try FileManager.default.contentsOfDirectory(at: URL.appGroupTemporaryDirectory, includingPropertiesForKeys: nil, options: [])
let fileURLs = try FileManager.default.contentsOfDirectory(at: URL.temporaryDirectory, includingPropertiesForKeys: nil, options: [])
fileURLs.forEach { url in
do {
try FileManager.default.removeItem(at: url)
} catch {
MXLog.warning("Failed to remove file from temporary directory: \(error)")
}
}
} catch {
MXLog.warning("Failed to enumerate temporary directory: \(error)")
}
// Manual clean to handle the potential case where the app crashes before moving a shared file.
do {
let fileURLs = try FileManager.default.contentsOfDirectory(at: URL.appGroupTemporaryDirectory, includingPropertiesForKeys: nil, options: [])
guard fileURLs.count > 1 else {
return // If there is only a single item in here, there's likely a pending share payload that is yet to be processed.
}
for url in fileURLs {
do {
try FileManager.default.removeItem(at: url)
} catch {
MXLog.warning("Failed to remove file from app group temporary directory: \(error)")
}
}
} catch {
MXLog.warning("Failed to enumerate app group temporary directory: \(error)")
return
}
guard fileURLs.count > 1 else {
return // If there is only a single item in here, there's likely a pending share payload that is yet to be processed.
}
for url in fileURLs {
do {
try FileManager.default.removeItem(at: url)
} catch {
MXLog.warning("Failed to remove file from app group temporary directory: \(error)")
}
}
}