cryptomator / cryptomator/ios

Implement stopProvidingItem cancellation

Open
#472 0 comments 1 reaction 0 assignees View on GitHub
state:confirmed
Dominant language
Swift
Stars
288
Forks
43
PR merge metrics
No merged PRs in 30d

Description

`FileProviderAdapter.stopProvidingItem(at:)` is a `#warning("TODO")` no-op. iOS calls it when the last claim on a file is released, which includes re-tapping a file that is still downloading in Files.app. Because we ignore it, the in-flight `URLSessionTask` keeps running, its `WorkflowScheduler` download permit is never released, and no completion is signaled back. fileproviderd and the extension then disagree about the item's state until the extension is respawned, and the user sees "Couldn't communicate with a helper application."

Confirmed on device (iOS 26.5): `stopProvidingItem` logged, followed by roughly six minutes of silence from the extension, then a respawn. With `maxParallelDownloads: 2`, two of these are enough to stall every later download in the vault until the vault is locked and unlocked.

This is separate from #449 and predates it. #467 fixed the resume-before-register ordering and deliberately left this out of scope.

A fix needs to map the item identifier to the in-flight `URLSessionTask`, cancel it, tear down the `Workflow` and release the scheduler permit, remove the `DownloadTaskRecord`, and signal completion. Two things to be careful about: `stopProvidingItem` does not imply a prior `startProvidingItem` for the same URL, since fileproviderd can release a queued claim before content is ever materialized, so cancellation has to tolerate having nothing to cancel. And `onTaskCreation` is only invoked by the WebDAV provider in cloud-access-swift, so a task handle exists for WebDAV but not for the SDK-backed providers, which need a different cancellation path or none at all.

Contributor guide

Open the contributing guide

Research direction

Start at FileProviderAdapter.stopProvidingItem(at:) and trace how in-flight URLSessionTask, Workflow, WorkflowScheduler permits, and DownloadTaskRecord are tracked. Compare the WebDAV onTaskCreation path with SDK-backed providers, including cancellation when no prior startProvidingItem exists. Done means cancellation is safe, cleanup and permit release occur, and completion is signaled.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, swift
Domain
mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.