Skip to content

Commit f4cd68f

Browse files
authored
fix(cli): builtin dev server should also be forwarded for Android (#10600)
1 parent f35bcda commit f4cd68f

File tree

9 files changed

+50
-4
lines changed

9 files changed

+50
-4
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"tauri-cli": patch:bug
3+
"@tauri-apps/cli": patch:bug
4+
---
5+
6+
Fixes `android dev` not working when using the builtin dev server.

tooling/cli/src/helpers/config.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,20 @@ pub fn reload(merge_config: Option<&serde_json::Value>) -> crate::Result<ConfigH
215215
Err(anyhow::anyhow!("config not loaded"))
216216
}
217217
}
218+
219+
/// merges the loaded config with the given value
220+
pub fn merge_with(merge_config: &serde_json::Value) -> crate::Result<ConfigHandle> {
221+
let handle = config_handle();
222+
if let Some(config_metadata) = &mut *handle.lock().unwrap() {
223+
let merge_config_str = serde_json::to_string(merge_config).unwrap();
224+
set_var("TAURI_CONFIG", merge_config_str);
225+
226+
let mut value = serde_json::to_value(config_metadata.inner.clone())?;
227+
merge(&mut value, merge_config);
228+
config_metadata.inner = serde_json::from_value(value)?;
229+
230+
Ok(handle.clone())
231+
} else {
232+
Err(anyhow::anyhow!("config not loaded"))
233+
}
234+
}

tooling/cli/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use clap::{ArgAction, CommandFactory, FromArgMatches, Parser, Subcommand, ValueE
3434
use env_logger::fmt::style::{AnsiColor, Style};
3535
use env_logger::Builder;
3636
use log::Level;
37-
use serde::Deserialize;
37+
use serde::{Deserialize, Serialize};
3838
use std::io::{BufReader, Write};
3939
use std::process::{exit, Command, ExitStatus, Output, Stdio};
4040
use std::{
@@ -48,7 +48,7 @@ use std::{
4848
};
4949

5050
/// Tauri configuration argument option.
51-
#[derive(Debug, Clone)]
51+
#[derive(Debug, Clone, Serialize, Deserialize)]
5252
pub struct ConfigValue(pub(crate) serde_json::Value);
5353

5454
impl FromStr for ConfigValue {

tooling/cli/src/mobile/android/android_studio_script.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,18 @@ pub fn command(options: Options) -> Result<()> {
5959
);
6060
(config, metadata, cli_options)
6161
};
62+
6263
ensure_init(
6364
&tauri_config,
6465
config.app(),
6566
config.project_dir(),
6667
MobileTarget::Android,
6768
)?;
6869

70+
if let Some(config) = &cli_options.config {
71+
crate::helpers::config::merge_with(&config.0)?;
72+
}
73+
6974
let env = env()?;
7075

7176
if cli_options.dev {
@@ -77,6 +82,7 @@ pub fn command(options: Options) -> Result<()> {
7782
.build
7883
.dev_url
7984
.clone();
85+
8086
if let Some(port) = dev_url.and_then(|url| url.port_or_known_default()) {
8187
let forward = format!("tcp:{port}");
8288
// ignore errors in case we do not have a device available

tooling/cli/src/mobile/android/build.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ fn run_build(
201201
args: build_options.args.clone(),
202202
noise_level,
203203
vars: Default::default(),
204+
config: build_options.config.clone(),
204205
};
205206
let handle = write_options(
206207
&tauri_config.lock().unwrap().as_ref().unwrap().identifier,

tooling/cli/src/mobile/android/dev.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ fn run_dev(
222222
debug: !options.release_mode,
223223
features: options.features,
224224
args: Vec::new(),
225-
config: options.config,
225+
config: dev_options.config.clone(),
226226
no_watch: options.no_watch,
227227
},
228228
|options| {
@@ -232,6 +232,7 @@ fn run_dev(
232232
args: options.args.clone(),
233233
noise_level,
234234
vars: Default::default(),
235+
config: dev_options.config.clone(),
235236
};
236237

237238
let _handle = write_options(

tooling/cli/src/mobile/ios/build.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ fn run_build(
283283
args: build_options.args.clone(),
284284
noise_level,
285285
vars: Default::default(),
286+
config: build_options.config.clone(),
286287
};
287288
let handle = write_options(
288289
&tauri_config.lock().unwrap().as_ref().unwrap().identifier,

tooling/cli/src/mobile/ios/dev.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ use std::{
3636
sync::OnceLock,
3737
};
3838

39+
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";
40+
3941
#[derive(Debug, Clone, Parser)]
4042
#[clap(
4143
about = "Run your app in development mode on iOS",
@@ -367,6 +369,8 @@ fn run_dev(
367369
let out_dir = bin_path.parent().unwrap();
368370
let _lock = flock::open_rw(out_dir.join("lock").with_extension("ios"), "iOS")?;
369371

372+
let set_host = options.host.is_some();
373+
370374
configure_cargo(app, None)?;
371375

372376
let open = options.open;
@@ -377,7 +381,7 @@ fn run_dev(
377381
debug: true,
378382
features: options.features,
379383
args: Vec::new(),
380-
config: options.config,
384+
config: dev_options.config.clone(),
381385
no_watch: options.no_watch,
382386
},
383387
|options| {
@@ -387,13 +391,17 @@ fn run_dev(
387391
args: options.args.clone(),
388392
noise_level,
389393
vars: Default::default(),
394+
config: dev_options.config.clone(),
390395
};
391396
let _handle = write_options(
392397
&tauri_config.lock().unwrap().as_ref().unwrap().identifier,
393398
cli_options,
394399
)?;
395400

396401
if open {
402+
if !set_host {
403+
log::warn!("{PHYSICAL_IPHONE_DEV_WARNING}");
404+
}
397405
open_and_wait(config, &env)
398406
} else if let Some(device) = &device {
399407
match run(device, options, config, &env) {
@@ -409,6 +417,9 @@ fn run_dev(
409417
}
410418
}
411419
} else {
420+
if !set_host {
421+
log::warn!("{PHYSICAL_IPHONE_DEV_WARNING}");
422+
}
412423
open_and_wait(config, &env)
413424
}
414425
},

tooling/cli/src/mobile/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::{
88
config::{Config as TauriConfig, ConfigHandle},
99
},
1010
interface::{AppInterface, AppSettings, DevProcess, Interface, Options as InterfaceOptions},
11+
ConfigValue,
1112
};
1213
#[cfg(target_os = "macos")]
1314
use anyhow::Context;
@@ -141,6 +142,7 @@ pub struct CliOptions {
141142
pub args: Vec<String>,
142143
pub noise_level: NoiseLevel,
143144
pub vars: HashMap<String, OsString>,
145+
pub config: Option<ConfigValue>,
144146
}
145147

146148
impl Default for CliOptions {
@@ -151,6 +153,7 @@ impl Default for CliOptions {
151153
args: vec!["--lib".into()],
152154
noise_level: Default::default(),
153155
vars: Default::default(),
156+
config: None,
154157
}
155158
}
156159
}

0 commit comments

Comments
 (0)