-
Notifications
You must be signed in to change notification settings - Fork 470
feat(dialog) - Support startFileAccess and endFileAccess on iOS (#3030) #3136
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
base: v2
Are you sure you want to change the base?
feat(dialog) - Support startFileAccess and endFileAccess on iOS (#3030) #3136
Conversation
|
c. @velocitysystems Here is the MR for the changes to support |
d4c8e4b to
749a149
Compare
plugins/dialog/src/commands.rs
Outdated
|
|
||
| #[command] | ||
| pub(crate) async fn end_file_access<R: Runtime>( | ||
| _window: Window<R>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
_window is unused here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My understanding is that the window parameter is required for commands to be invoked; is that incorrect?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to Tauri's documentation, Window, AppHandle, and State<T> are "Special Parameters" that are automatically injected by the #[tauri::command] macro if present, but they're not required.
Since end_file_access doesn't use the window for anything (no scope management, no parent window needed), it can safely be removed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When I remove the initial argument, we get a compilation error related to where we register the handler:
plugins/dialog/src/commands.rs:427:1
|
427 | #[command]
| ^^^^^^^^^^ cannot infer type
|
::: plugins/dialog/src/lib.rs:203:25
|
203 | .invoke_handler(tauri::generate_handler![
| _________________________-
204 | | commands::open,
205 | | commands::save,
206 | | commands::message,
... |
210 | | commands::end_file_access,
211 | | ])
| |_________- in this macro invocation
|
= note: cannot satisfy `_: tauri::Runtime`
note: required by a bound in `end_file_access`
--> plugins/dialog/src/commands.rs:428:40
|
428 | pub(crate) async fn end_file_access<R: Runtime>(We can at least change the argument to an AppHandle instead of a Window, but removing the parameter will cause a compilation error.
Is there something I am missing with this?
fcbcbd9 to
16dea72
Compare
…i-apps#3030) On iOS, when trying to access a file that exists outside of the app sandbox, one of 2 things need to happen to be able to perform any operations on said file: 1) A copy of the file needs to be made to the internal app sandbox 2) The method `startAccessingSecurityScopedResource` needs to be called. Previously, a copy of the file was always being made when a file was selected through the picker dialog. While this did ensure there were no file access exceptions when reading from the file, it does not scale well for large files. To resolve this, we now support calling `startAccessingSecurityScopedResource`. This is called by `startFileAccess` in the TS API, and when done accessing the file, `endFileAccess` should be called. This MR only supports this change for iOS; MacOS has a different set of needs for security scoped resources. See discussion in #3716 for more discussion of the difference between iOS and MacOS.
…ated to scoped security resources. * Make starting and stopping security scoped access thread safe. * Create enum describing result of stopping file access to describe if no resource was found to release.
* Make startFileAccess errors more descriptive based on actual issue. * Update sample dialog page to actually print the text.
16dea72 to
8cd49a2
Compare
On iOS, when trying to access a file that exists outside of the app sandbox, one of 2 things need to happen to be able to perform any operations on said file:
startAccessingSecurityScopedResourceneeds to be called.Previously, a copy of the file was always being made when a file was selected through the picker dialog.
While this did ensure there were no file access exceptions when reading from the file, it does not scale well for large files.
To resolve this, we now support calling
startAccessingSecurityScopedResource.This is called by
startFileAccessin the TS API, and when done accessing the file,endFileAccessshould be called.This MR only supports this change for iOS; MacOS has a different set of needs for security scoped resources.
See discussion in #3716 for more discussion of the difference between iOS and MacOS.