diff --git a/.changes/kill-dev-process-on-err.md b/.changes/kill-dev-process-on-err.md new file mode 100644 index 00000000000..eadd5fc8c4e --- /dev/null +++ b/.changes/kill-dev-process-on-err.md @@ -0,0 +1,6 @@ +--- +"tauri-cli": patch/bug +"@tauri-apps/cli": patch/bug +--- + +Exit `beforeDevCommand` process if the android or iOS `dev` command fails. diff --git a/tooling/cli/src/dev.rs b/tooling/cli/src/dev.rs index ef51fdd52f3..cf0975f8711 100644 --- a/tooling/cli/src/dev.rs +++ b/tooling/cli/src/dev.rs @@ -444,10 +444,11 @@ fn check_for_updates() -> Result<()> { pub fn kill_before_dev_process() { if let Some(child) = BEFORE_DEV.get() { let child = child.lock().unwrap(); - KILL_BEFORE_DEV_FLAG - .get() - .unwrap() - .store(true, Ordering::Relaxed); + let kill_before_dev_flag = KILL_BEFORE_DEV_FLAG.get().unwrap(); + if kill_before_dev_flag.load(Ordering::Relaxed) { + return; + } + kill_before_dev_flag.store(true, Ordering::Relaxed); #[cfg(windows)] { let powershell_path = std::env::var("SYSTEMROOT").map_or_else( diff --git a/tooling/cli/src/mobile/android/dev.rs b/tooling/cli/src/mobile/android/dev.rs index ba2e56c5078..058d8da7e80 100644 --- a/tooling/cli/src/mobile/android/dev.rs +++ b/tooling/cli/src/mobile/android/dev.rs @@ -96,7 +96,15 @@ impl From for DevOptions { } } -pub fn command(mut options: Options, noise_level: NoiseLevel) -> Result<()> { +pub fn command(options: Options, noise_level: NoiseLevel) -> Result<()> { + let result = run_command(options, noise_level); + if result.is_err() { + crate::dev::kill_before_dev_process(); + } + result +} + +fn run_command(mut options: Options, noise_level: NoiseLevel) -> Result<()> { delete_codegen_vars(); let (merge_config, _merge_config_path) = resolve_merge_config(&options.config)?; diff --git a/tooling/cli/src/mobile/ios/dev.rs b/tooling/cli/src/mobile/ios/dev.rs index 0bce1a32e0e..ec866cdc5d0 100644 --- a/tooling/cli/src/mobile/ios/dev.rs +++ b/tooling/cli/src/mobile/ios/dev.rs @@ -83,7 +83,15 @@ impl From for DevOptions { } } -pub fn command(mut options: Options, noise_level: NoiseLevel) -> Result<()> { +pub fn command(options: Options, noise_level: NoiseLevel) -> Result<()> { + let result = run_command(options, noise_level); + if result.is_err() { + crate::dev::kill_before_dev_process(); + } + result +} + +fn run_command(mut options: Options, noise_level: NoiseLevel) -> Result<()> { if var_os(APPLE_DEVELOPMENT_TEAM_ENV_VAR_NAME).is_none() { if let Ok(teams) = find_development_teams() { let index = match teams.len() {