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}