Skip to main content

tauri_plugin_ios_bookmark/
lib.rs

1//! iOS security-scoped bookmark plugin for Tauri 2.
2//!
3//! This crate exposes a Tauri plugin that bridges to native iOS code for:
4//! - presenting the Files picker
5//! - creating and storing security-scoped bookmarks
6//! - reading a bookmarked file later
7//! - forgetting a stored bookmark
8//!
9//! The plugin is intended for Tauri mobile apps that target iOS. On unsupported
10//! platforms, initialization falls back to an unsupported implementation.
11//!
12//! # Setup
13//!
14//! Register the plugin in your Tauri application:
15//!
16//! ```rust,ignore
17//! tauri::Builder::default()
18//!     .plugin(tauri_plugin_ios_bookmark::init())
19//!     .run(tauri::generate_context!())
20//!     .expect("error while running tauri application");
21//! ```
22//!
23//! Then call the guest API from JavaScript or TypeScript to pick, read, and
24//! forget bookmarked files.
25
26#[cfg(desktop)]
27mod desktop;
28#[cfg(mobile)]
29mod mobile;
30
31mod commands;
32mod error_bridge;
33mod models;
34mod payloads;
35
36pub use error_bridge::normalize_ios_bookmark_error;
37pub use models::*;
38pub use payloads::pick_and_bookmark_payload;
39
40#[cfg(desktop)]
41pub(crate) use desktop::IosBookmark;
42#[cfg(mobile)]
43pub(crate) use mobile::IosBookmark;
44
45use tauri::{
46    plugin::{Builder, TauriPlugin},
47    Manager, Runtime,
48};
49
50pub fn init<R: Runtime>() -> TauriPlugin<R> {
51    Builder::new("ios-bookmark")
52        .invoke_handler(tauri::generate_handler![
53            commands::pick_and_bookmark,
54            commands::read_by_bookmark,
55            commands::forget_bookmark,
56        ])
57        .setup(|app, api| {
58            #[cfg(mobile)]
59            let bookmark = mobile::init(app, api)?;
60            #[cfg(desktop)]
61            let bookmark = desktop::init(app, api)?;
62            app.manage(bookmark);
63            Ok(())
64        })
65        .build()
66}