Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changes/fix-mobile-identifier-changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"tauri-cli": patch:bug
"@tauri-apps/cli": patch:bug
---

Fixes Android and iOS dev/build commands not working when the app identifier is being modified by the `--config` option.
19 changes: 15 additions & 4 deletions crates/tauri-cli/src/helpers/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ pub const MERGE_CONFIG_EXTENSION_NAME: &str = "--config";
pub struct ConfigMetadata {
/// The current target.
target: Target,

original_identifier: Option<String>,
/// The actual configuration, merged with any extension.
inner: Config,
/// The config extensions (platform-specific config files or the config CLI argument).
Expand All @@ -39,15 +41,17 @@ impl std::ops::Deref for ConfigMetadata {
}

impl ConfigMetadata {
/// The original bundle identifier from the config file.
/// This does not take any extensions into account.
pub fn original_identifier(&self) -> Option<&str> {
self.original_identifier.as_deref()
}

/// Checks which config is overwriting the bundle identifier.
pub fn find_bundle_identifier_overwriter(&self) -> Option<String> {
for (ext, config) in &self.extensions {
if let Some(identifier) = config
.as_object()
.and_then(|config| config.get("tauri"))
.and_then(|tauri_config| tauri_config.as_object())
.and_then(|tauri_config| tauri_config.get("bundle"))
.and_then(|bundle_config| bundle_config.as_object())
.and_then(|bundle_config| bundle_config.get("identifier"))
.and_then(|id| id.as_str())
{
Expand Down Expand Up @@ -153,6 +157,12 @@ fn get_internal(
let config_file_name = config_path.file_name().unwrap().to_string_lossy();
let mut extensions = HashMap::new();

let original_identifier = config
.as_object()
.and_then(|config| config.get("identifier"))
.and_then(|id| id.as_str())
.map(ToString::to_string);

if let Some((platform_config, config_path)) =
tauri_utils::config::parse::read_platform(target, tauri_dir)?
{
Expand Down Expand Up @@ -220,6 +230,7 @@ fn get_internal(

*config_handle().lock().unwrap() = Some(ConfigMetadata {
target,
original_identifier,
inner: config,
extensions,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ pub fn command(options: Options) -> Result<()> {
let (config, metadata, cli_options) = {
let tauri_config_guard = tauri_config.lock().unwrap();
let tauri_config_ = tauri_config_guard.as_ref().unwrap();
let cli_options = read_options(&tauri_config_.identifier);
let cli_options = read_options(tauri_config_);
let (config, metadata) = get_config(
&get_app(
MobileTarget::Android,
Expand Down
5 changes: 1 addition & 4 deletions crates/tauri-cli/src/mobile/android/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,7 @@ fn run_build(
config: build_options.config,
target_device: None,
};
let handle = write_options(
&tauri_config.lock().unwrap().as_ref().unwrap().identifier,
cli_options,
)?;
let handle = write_options(tauri_config.lock().unwrap().as_ref().unwrap(), cli_options)?;

inject_resources(config, tauri_config.lock().unwrap().as_ref().unwrap())?;

Expand Down
5 changes: 1 addition & 4 deletions crates/tauri-cli/src/mobile/android/dev.rs
Original file line number Diff line number Diff line change
Expand Up @@ -275,10 +275,7 @@ fn run_dev(
}),
};

let _handle = write_options(
&tauri_config.lock().unwrap().as_ref().unwrap().identifier,
cli_options,
)?;
let _handle = write_options(tauri_config.lock().unwrap().as_ref().unwrap(), cli_options)?;

inject_resources(config, tauri_config.lock().unwrap().as_ref().unwrap())?;

Expand Down
5 changes: 1 addition & 4 deletions crates/tauri-cli/src/mobile/ios/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,10 +295,7 @@ fn run_build(
config: build_options.config.clone(),
target_device: None,
};
let handle = write_options(
&tauri_config.lock().unwrap().as_ref().unwrap().identifier,
cli_options,
)?;
let handle = write_options(tauri_config.lock().unwrap().as_ref().unwrap(), cli_options)?;

if options.open {
return Ok(handle);
Expand Down
5 changes: 1 addition & 4 deletions crates/tauri-cli/src/mobile/ios/dev.rs
Original file line number Diff line number Diff line change
Expand Up @@ -279,10 +279,7 @@ fn run_dev(
config: dev_options.config.clone(),
target_device: None,
};
let _handle = write_options(
&tauri_config.lock().unwrap().as_ref().unwrap().identifier,
cli_options,
)?;
let _handle = write_options(tauri_config.lock().unwrap().as_ref().unwrap(), cli_options)?;

let open_xcode = || {
if !set_host {
Expand Down
2 changes: 1 addition & 1 deletion crates/tauri-cli/src/mobile/ios/xcode_script.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ pub fn command(options: Options) -> Result<()> {
let (config, metadata, cli_options) = {
let tauri_config_guard = tauri_config.lock().unwrap();
let tauri_config_ = tauri_config_guard.as_ref().unwrap();
let cli_options = read_options(&tauri_config_.identifier);
let cli_options = read_options(tauri_config_);
let (config, metadata) = get_config(
&get_app(
MobileTarget::Ios,
Expand Down
24 changes: 18 additions & 6 deletions crates/tauri-cli/src/mobile/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
use crate::{
helpers::{
app_paths::tauri_dir,
config::{reload as reload_config, Config as TauriConfig, ConfigHandle},
config::{reload as reload_config, Config as TauriConfig, ConfigHandle, ConfigMetadata},
},
interface::{AppInterface, AppSettings, DevProcess, Interface, Options as InterfaceOptions},
ConfigValue,
};
#[cfg(unix)]
use anyhow::Context;
use anyhow::{bail, Result};
use heck::ToSnekCase;
Expand Down Expand Up @@ -365,7 +364,10 @@ fn env() -> Result<Env, EnvError> {
pub struct OptionsHandle(#[allow(unused)] Runtime, #[allow(unused)] ServerHandle);

/// Writes CLI options to be used later on the Xcode and Android Studio build commands
pub fn write_options(identifier: &str, mut options: CliOptions) -> crate::Result<OptionsHandle> {
pub fn write_options(
config: &ConfigMetadata,
mut options: CliOptions,
) -> crate::Result<OptionsHandle> {
options.vars.extend(env_vars());

let runtime = Runtime::new().unwrap();
Expand All @@ -383,18 +385,28 @@ pub fn write_options(identifier: &str, mut options: CliOptions) -> crate::Result
let (handle, addr) = r?;

write(
temp_dir().join(format!("{identifier}-server-addr")),
temp_dir().join(format!(
"{}-server-addr",
config
.original_identifier()
.context("app configuration is missing an identifier")?
)),
addr.to_string(),
)?;

Ok(OptionsHandle(runtime, handle))
}

fn read_options(identifier: &str) -> CliOptions {
fn read_options(config: &ConfigMetadata) -> CliOptions {
let runtime = tokio::runtime::Runtime::new().unwrap();
let options = runtime
.block_on(async move {
let addr_path = temp_dir().join(format!("{identifier}-server-addr"));
let addr_path = temp_dir().join(format!(
"{}-server-addr",
config
.original_identifier()
.context("app configuration is missing an identifier")?
));
let (tx, rx) = WsTransportClientBuilder::default()
.build(
format!(
Expand Down