fix(cli): missing options on mobile dev/build commands (#14932)

* fix(cli): missing options on mobile dev/build commands

* avoid duplicated flags

* clippy
This commit is contained in:
Lucas Fernandes Nogueira
2026-02-12 21:12:00 -03:00
committed by GitHub
parent 35c35f27ae
commit 0d1cb83bab
7 changed files with 54 additions and 26 deletions

View File

@@ -0,0 +1,6 @@
---
"tauri-cli": patch:bug
"@tauri-apps/cli": patch:bug
---
Fix missing Cargo args when running mobile dev and build commands.

View File

@@ -425,7 +425,7 @@ fn dev_options(
}
*args = dev_args;
if mobile {
if mobile && !args.contains(&"--lib".into()) {
args.push("--lib".into());
}
@@ -483,7 +483,9 @@ impl Rust {
pub fn build_options(&self, args: &mut Vec<String>, features: &mut Vec<String>, mobile: bool) {
features.push("tauri/custom-protocol".into());
if mobile {
args.push("--lib".into());
if !args.contains(&"--lib".into()) {
args.push("--lib".into());
}
} else {
args.push("--bins".into());
}

View File

@@ -154,14 +154,22 @@ pub fn run(
build_options.target = Some(first_target.triple.into());
let interface = AppInterface::new(tauri_config, build_options.target.clone(), dirs.tauri)?;
interface.build_options(&mut Vec::new(), &mut build_options.features, true);
interface.build_options(&mut build_options.args, &mut build_options.features, true);
let app = get_app(MobileTarget::Android, tauri_config, &interface, dirs.tauri);
let (config, metadata) = get_config(
&app,
tauri_config,
&build_options.features,
&Default::default(),
&CliOptions {
dev: false,
features: build_options.features.clone(),
args: build_options.args.clone(),
noise_level,
vars: Default::default(),
config: build_options.config.clone(),
target_device: None,
},
);
let profile = if options.debug {

View File

@@ -182,6 +182,7 @@ fn run_command(options: Options, noise_level: NoiseLevel, dirs: Dirs) -> Result<
.map(|d| d.target().triple.to_string())
.unwrap_or_else(|| Target::all().values().next().unwrap().triple.into());
dev_options.target = Some(target_triple);
dev_options.args.push("--lib".into());
let interface = AppInterface::new(&tauri_config, dev_options.target.clone(), dirs.tauri)?;
@@ -190,7 +191,15 @@ fn run_command(options: Options, noise_level: NoiseLevel, dirs: Dirs) -> Result<
&app,
&tauri_config,
dev_options.features.as_ref(),
&Default::default(),
&CliOptions {
dev: true,
features: dev_options.features.clone(),
args: dev_options.args.clone(),
noise_level,
vars: Default::default(),
config: dev_options.config.clone(),
target_device: None,
},
);
set_current_dir(dirs.tauri).context("failed to set current directory to Tauri directory")?;

View File

@@ -195,14 +195,22 @@ pub fn run(options: Options, noise_level: NoiseLevel, dirs: &Dirs) -> Result<Bui
dirs.tauri,
)?;
let interface = AppInterface::new(&tauri_config, build_options.target.clone(), dirs.tauri)?;
interface.build_options(&mut Vec::new(), &mut build_options.features, true);
interface.build_options(&mut build_options.args, &mut build_options.features, true);
let app = get_app(MobileTarget::Ios, &tauri_config, &interface, dirs.tauri);
let (mut config, _) = get_config(
&app,
&tauri_config,
&build_options.features,
&Default::default(),
&CliOptions {
dev: false,
features: build_options.features.clone(),
args: build_options.args.clone(),
noise_level,
vars: Default::default(),
config: build_options.config.clone(),
target_device: None,
},
dirs.tauri,
)?;
@@ -328,7 +336,7 @@ pub fn run(options: Options, noise_level: NoiseLevel, dirs: &Dirs) -> Result<Bui
&mut config,
&mut env,
noise_level,
&dirs,
dirs,
)?;
if open {

View File

@@ -182,6 +182,7 @@ fn run_command(options: Options, noise_level: NoiseLevel, dirs: Dirs) -> Result<
.map(|d| d.target().triple.to_string())
.unwrap_or_else(|| "aarch64-apple-ios".into());
dev_options.target = Some(target_triple.clone());
dev_options.args.push("--lib".into());
let tauri_config = get_tauri_config(
tauri_utils::platform::Target::Ios,
@@ -195,7 +196,15 @@ fn run_command(options: Options, noise_level: NoiseLevel, dirs: Dirs) -> Result<
&app,
&tauri_config,
&dev_options.features,
&Default::default(),
&CliOptions {
dev: true,
features: dev_options.features.clone(),
args: dev_options.args.clone(),
noise_level,
vars: Default::default(),
config: dev_options.config.clone(),
target_device: None,
},
dirs.tauri,
)?;
@@ -297,7 +306,7 @@ fn run_dev(
)?;
}
crate::dev::setup(&interface, &mut dev_options, &mut tauri_config, &dirs)?;
crate::dev::setup(&interface, &mut dev_options, &mut tauri_config, dirs)?;
let app_settings = interface.app_settings();
let out_dir = app_settings.out_dir(
@@ -360,7 +369,7 @@ fn run_dev(
open_xcode()
}
},
&dirs,
dirs,
)
}

View File

@@ -166,7 +166,7 @@ impl Default for DevHost {
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct CliOptions {
pub dev: bool,
pub features: Vec<String>,
@@ -177,20 +177,6 @@ pub struct CliOptions {
pub target_device: Option<TargetDevice>,
}
impl Default for CliOptions {
fn default() -> Self {
Self {
dev: false,
features: Vec::new(),
args: vec!["--lib".into()],
noise_level: Default::default(),
vars: Default::default(),
config: Vec::new(),
target_device: None,
}
}
}
fn local_ip_address(force: bool) -> &'static IpAddr {
static LOCAL_IP: OnceLock<IpAddr> = OnceLock::new();
LOCAL_IP.get_or_init(|| {