From 80a301ea63585e3123b5f79eae697ef1fe3bab06 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Thu, 25 Aug 2022 16:43:29 -0300 Subject: [PATCH] feat(cli): add mobile support to the app template (#5046) --- .../mobile/android/android_studio_script.rs | 2 +- tooling/cli/src/mobile/ios/xcode_script.rs | 2 +- .../app/src-tauri/Cargo.crate-manifest | 13 +++++- .../templates/app/src-tauri/src/desktop.rs | 8 ++++ .../cli/templates/app/src-tauri/src/lib.rs | 41 +++++++++++++++++++ .../cli/templates/app/src-tauri/src/main.rs | 11 ++--- .../cli/templates/app/src-tauri/src/mobile.rs | 23 +++++++++++ .../android/app/src/main/TauriActivity.kt | 3 +- 8 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 tooling/cli/templates/app/src-tauri/src/desktop.rs create mode 100644 tooling/cli/templates/app/src-tauri/src/lib.rs create mode 100644 tooling/cli/templates/app/src-tauri/src/mobile.rs diff --git a/tooling/cli/src/mobile/android/android_studio_script.rs b/tooling/cli/src/mobile/android/android_studio_script.rs index 018ee1559..f2397016b 100644 --- a/tooling/cli/src/mobile/android/android_studio_script.rs +++ b/tooling/cli/src/mobile/android/android_studio_script.rs @@ -31,7 +31,7 @@ pub fn command(options: Options) -> Result<()> { } else { Profile::Debug }; - let noise_level = NoiseLevel::FranklyQuitePedantic; + let noise_level = NoiseLevel::LoudAndProud; with_config(None, |root_conf, config, metadata| { ensure_init(config.project_dir(), MobileTarget::Android) diff --git a/tooling/cli/src/mobile/ios/xcode_script.rs b/tooling/cli/src/mobile/ios/xcode_script.rs index 90576b152..f04ec025a 100644 --- a/tooling/cli/src/mobile/ios/xcode_script.rs +++ b/tooling/cli/src/mobile/ios/xcode_script.rs @@ -44,7 +44,7 @@ pub fn command(options: Options) -> Result<()> { let profile = profile_from_configuration(&options.configuration); let macos = macos_from_platform(&options.platform); - let noise_level = NoiseLevel::FranklyQuitePedantic; + let noise_level = NoiseLevel::LoudAndProud; with_config(None, |root_conf, config, metadata| { let env = env()?; diff --git a/tooling/cli/templates/app/src-tauri/Cargo.crate-manifest b/tooling/cli/templates/app/src-tauri/Cargo.crate-manifest index 1249d3cc6..08e75dfa3 100755 --- a/tooling/cli/templates/app/src-tauri/Cargo.crate-manifest +++ b/tooling/cli/templates/app/src-tauri/Cargo.crate-manifest @@ -5,12 +5,14 @@ description = "A Tauri App" authors = ["you"] license = "" repository = "" -default-run = "app" edition = "2021" rust-version = "1.57" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[lib] +crate-type = ["staticlib", "cdylib", "rlib"] + [build-dependencies] tauri-build = {{{ tauri_build_dep }}} @@ -19,6 +21,15 @@ serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } tauri = {{{ tauri_dep }}} +[target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies] +log = "0.4" + +[target.'cfg(target_os = "android")'.dependencies] +android_logger = "0.9.0" + +[target.'cfg(target_os = "ios")'.dependencies] +env_logger = "0.9.0" + [features] # by default Tauri runs in production mode # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL diff --git a/tooling/cli/templates/app/src-tauri/src/desktop.rs b/tooling/cli/templates/app/src-tauri/src/desktop.rs new file mode 100644 index 000000000..ef900d653 --- /dev/null +++ b/tooling/cli/templates/app/src-tauri/src/desktop.rs @@ -0,0 +1,8 @@ +#![cfg_attr( + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" +)] + +fn main() { + app::AppBuilder::new() +} diff --git a/tooling/cli/templates/app/src-tauri/src/lib.rs b/tooling/cli/templates/app/src-tauri/src/lib.rs new file mode 100644 index 000000000..d8c1e8772 --- /dev/null +++ b/tooling/cli/templates/app/src-tauri/src/lib.rs @@ -0,0 +1,41 @@ +use tauri::App; + +#[cfg(mobile)] +mod mobile; +#[cfg(mobile)] +pub use mobile::*; + +pub type SetupHook = Box Result<(), Box> + Send>; + +#[derive(Default)] +pub struct AppBuilder { + setup: Option, +} + +impl AppBuilder { + pub fn new() -> Self { + Self::default() + } + + #[must_use] + pub fn setup(mut self, setup: F) -> Self + where + F: FnOnce(&mut App) -> Result<(), Box> + Send + 'static, + { + self.setup.replace(Box::new(setup)); + self + } + + pub fn run(self) { + let setup = self.setup; + tauri::Builder::default() + .setup(move |app| { + if let Some(setup) = setup { + (setup)(app)?; + } + Ok(()) + }) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); + } +} diff --git a/tooling/cli/templates/app/src-tauri/src/main.rs b/tooling/cli/templates/app/src-tauri/src/main.rs index e994ea4d1..1ade16f98 100644 --- a/tooling/cli/templates/app/src-tauri/src/main.rs +++ b/tooling/cli/templates/app/src-tauri/src/main.rs @@ -1,10 +1,7 @@ -#![cfg_attr( - all(not(debug_assertions), target_os = "windows"), - windows_subsystem = "windows" -)] +#[cfg(desktop)] +mod desktop; fn main() { - tauri::Builder::default() - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + #[cfg(desktop)] + desktop::main(); } diff --git a/tooling/cli/templates/app/src-tauri/src/mobile.rs b/tooling/cli/templates/app/src-tauri/src/mobile.rs new file mode 100644 index 000000000..3e22469b2 --- /dev/null +++ b/tooling/cli/templates/app/src-tauri/src/mobile.rs @@ -0,0 +1,23 @@ +#[cfg(target_os = "android")] +fn init_logging(app_name: &str) { + android_logger::init_once( + android_logger::Config::default() + .with_min_level(log::Level::Trace) + .with_tag(app_name), + ); +} + +#[cfg(not(target_os = "android"))] +fn init_logging(_app_name: &str) { + env_logger::init(); +} + +#[tauri::mobile_entry_point] +fn main() { + super::AppBuilder::new() + .setup(|app| { + init_logging(&app.package_info().name); + Ok(()) + }) + .run() +} diff --git a/tooling/cli/templates/mobile/android/app/src/main/TauriActivity.kt b/tooling/cli/templates/mobile/android/app/src/main/TauriActivity.kt index 2d1ffa69a..b63071827 100644 --- a/tooling/cli/templates/mobile/android/app/src/main/TauriActivity.kt +++ b/tooling/cli/templates/mobile/android/app/src/main/TauriActivity.kt @@ -1,6 +1,5 @@ -package {{app-domain-reversed}}.{{app-name-snake-case}} +package {{reverse-domain app.domain}}.{{snake-case app.name}} -import android.os.Bundle import androidx.appcompat.app.AppCompatActivity abstract class TauriActivity : AppCompatActivity()