fix(cli): builtin dev server should also be forwarded for Android (#10600)

This commit is contained in:
Lucas Fernandes Nogueira 2024-08-13 21:11:01 -03:00 committed by GitHub
parent f35bcda289
commit f4cd68f040
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 50 additions and 4 deletions

View File

@ -0,0 +1,6 @@
---
"tauri-cli": patch:bug
"@tauri-apps/cli": patch:bug
---
Fixes `android dev` not working when using the builtin dev server.

View File

@ -215,3 +215,20 @@ pub fn reload(merge_config: Option<&serde_json::Value>) -> crate::Result<ConfigH
Err(anyhow::anyhow!("config not loaded")) Err(anyhow::anyhow!("config not loaded"))
} }
} }
/// merges the loaded config with the given value
pub fn merge_with(merge_config: &serde_json::Value) -> crate::Result<ConfigHandle> {
let handle = config_handle();
if let Some(config_metadata) = &mut *handle.lock().unwrap() {
let merge_config_str = serde_json::to_string(merge_config).unwrap();
set_var("TAURI_CONFIG", merge_config_str);
let mut value = serde_json::to_value(config_metadata.inner.clone())?;
merge(&mut value, merge_config);
config_metadata.inner = serde_json::from_value(value)?;
Ok(handle.clone())
} else {
Err(anyhow::anyhow!("config not loaded"))
}
}

View File

@ -34,7 +34,7 @@ use clap::{ArgAction, CommandFactory, FromArgMatches, Parser, Subcommand, ValueE
use env_logger::fmt::style::{AnsiColor, Style}; use env_logger::fmt::style::{AnsiColor, Style};
use env_logger::Builder; use env_logger::Builder;
use log::Level; use log::Level;
use serde::Deserialize; use serde::{Deserialize, Serialize};
use std::io::{BufReader, Write}; use std::io::{BufReader, Write};
use std::process::{exit, Command, ExitStatus, Output, Stdio}; use std::process::{exit, Command, ExitStatus, Output, Stdio};
use std::{ use std::{
@ -48,7 +48,7 @@ use std::{
}; };
/// Tauri configuration argument option. /// Tauri configuration argument option.
#[derive(Debug, Clone)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConfigValue(pub(crate) serde_json::Value); pub struct ConfigValue(pub(crate) serde_json::Value);
impl FromStr for ConfigValue { impl FromStr for ConfigValue {

View File

@ -59,6 +59,7 @@ pub fn command(options: Options) -> Result<()> {
); );
(config, metadata, cli_options) (config, metadata, cli_options)
}; };
ensure_init( ensure_init(
&tauri_config, &tauri_config,
config.app(), config.app(),
@ -66,6 +67,10 @@ pub fn command(options: Options) -> Result<()> {
MobileTarget::Android, MobileTarget::Android,
)?; )?;
if let Some(config) = &cli_options.config {
crate::helpers::config::merge_with(&config.0)?;
}
let env = env()?; let env = env()?;
if cli_options.dev { if cli_options.dev {
@ -77,6 +82,7 @@ pub fn command(options: Options) -> Result<()> {
.build .build
.dev_url .dev_url
.clone(); .clone();
if let Some(port) = dev_url.and_then(|url| url.port_or_known_default()) { if let Some(port) = dev_url.and_then(|url| url.port_or_known_default()) {
let forward = format!("tcp:{port}"); let forward = format!("tcp:{port}");
// ignore errors in case we do not have a device available // ignore errors in case we do not have a device available

View File

@ -201,6 +201,7 @@ fn run_build(
args: build_options.args.clone(), args: build_options.args.clone(),
noise_level, noise_level,
vars: Default::default(), vars: Default::default(),
config: build_options.config.clone(),
}; };
let handle = write_options( let handle = write_options(
&tauri_config.lock().unwrap().as_ref().unwrap().identifier, &tauri_config.lock().unwrap().as_ref().unwrap().identifier,

View File

@ -222,7 +222,7 @@ fn run_dev(
debug: !options.release_mode, debug: !options.release_mode,
features: options.features, features: options.features,
args: Vec::new(), args: Vec::new(),
config: options.config, config: dev_options.config.clone(),
no_watch: options.no_watch, no_watch: options.no_watch,
}, },
|options| { |options| {
@ -232,6 +232,7 @@ fn run_dev(
args: options.args.clone(), args: options.args.clone(),
noise_level, noise_level,
vars: Default::default(), vars: Default::default(),
config: dev_options.config.clone(),
}; };
let _handle = write_options( let _handle = write_options(

View File

@ -283,6 +283,7 @@ fn run_build(
args: build_options.args.clone(), args: build_options.args.clone(),
noise_level, noise_level,
vars: Default::default(), vars: Default::default(),
config: build_options.config.clone(),
}; };
let handle = write_options( let handle = write_options(
&tauri_config.lock().unwrap().as_ref().unwrap().identifier, &tauri_config.lock().unwrap().as_ref().unwrap().identifier,

View File

@ -36,6 +36,8 @@ use std::{
sync::OnceLock, sync::OnceLock,
}; };
const PHYSICAL_IPHONE_DEV_WARNING: &str = "To develop on physical phones you need the `--host` option (not required for Simulators). See the documentation for more information: https://v2.tauri.app/develop/#development-server";
#[derive(Debug, Clone, Parser)] #[derive(Debug, Clone, Parser)]
#[clap( #[clap(
about = "Run your app in development mode on iOS", about = "Run your app in development mode on iOS",
@ -367,6 +369,8 @@ fn run_dev(
let out_dir = bin_path.parent().unwrap(); let out_dir = bin_path.parent().unwrap();
let _lock = flock::open_rw(out_dir.join("lock").with_extension("ios"), "iOS")?; let _lock = flock::open_rw(out_dir.join("lock").with_extension("ios"), "iOS")?;
let set_host = options.host.is_some();
configure_cargo(app, None)?; configure_cargo(app, None)?;
let open = options.open; let open = options.open;
@ -377,7 +381,7 @@ fn run_dev(
debug: true, debug: true,
features: options.features, features: options.features,
args: Vec::new(), args: Vec::new(),
config: options.config, config: dev_options.config.clone(),
no_watch: options.no_watch, no_watch: options.no_watch,
}, },
|options| { |options| {
@ -387,6 +391,7 @@ fn run_dev(
args: options.args.clone(), args: options.args.clone(),
noise_level, noise_level,
vars: Default::default(), vars: Default::default(),
config: dev_options.config.clone(),
}; };
let _handle = write_options( let _handle = write_options(
&tauri_config.lock().unwrap().as_ref().unwrap().identifier, &tauri_config.lock().unwrap().as_ref().unwrap().identifier,
@ -394,6 +399,9 @@ fn run_dev(
)?; )?;
if open { if open {
if !set_host {
log::warn!("{PHYSICAL_IPHONE_DEV_WARNING}");
}
open_and_wait(config, &env) open_and_wait(config, &env)
} else if let Some(device) = &device { } else if let Some(device) = &device {
match run(device, options, config, &env) { match run(device, options, config, &env) {
@ -409,6 +417,9 @@ fn run_dev(
} }
} }
} else { } else {
if !set_host {
log::warn!("{PHYSICAL_IPHONE_DEV_WARNING}");
}
open_and_wait(config, &env) open_and_wait(config, &env)
} }
}, },

View File

@ -8,6 +8,7 @@ use crate::{
config::{Config as TauriConfig, ConfigHandle}, config::{Config as TauriConfig, ConfigHandle},
}, },
interface::{AppInterface, AppSettings, DevProcess, Interface, Options as InterfaceOptions}, interface::{AppInterface, AppSettings, DevProcess, Interface, Options as InterfaceOptions},
ConfigValue,
}; };
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
use anyhow::Context; use anyhow::Context;
@ -141,6 +142,7 @@ pub struct CliOptions {
pub args: Vec<String>, pub args: Vec<String>,
pub noise_level: NoiseLevel, pub noise_level: NoiseLevel,
pub vars: HashMap<String, OsString>, pub vars: HashMap<String, OsString>,
pub config: Option<ConfigValue>,
} }
impl Default for CliOptions { impl Default for CliOptions {
@ -151,6 +153,7 @@ impl Default for CliOptions {
args: vec!["--lib".into()], args: vec!["--lib".into()],
noise_level: Default::default(), noise_level: Default::default(),
vars: Default::default(), vars: Default::default(),
config: None,
} }
} }
} }