diff --git a/.changes/mobile-use-identifier-as-id.md b/.changes/mobile-use-identifier-as-id.md new file mode 100644 index 000000000..1e3e4a7cb --- /dev/null +++ b/.changes/mobile-use-identifier-as-id.md @@ -0,0 +1,9 @@ +--- +"tauri": patch:breaking +"tauri-build": patch:breaking +"tauri-cli": patch:breaking +"@tauri-apps/cli": patch:breaking +"tauri-macros": patch:breaking +--- + +Use `tauri.conf.json > identifier` to set the `PackageName` in Android and `BundleId` in iOS. diff --git a/core/tauri-build/src/lib.rs b/core/tauri-build/src/lib.rs index 2c90b5b64..a7e7ed9a5 100644 --- a/core/tauri-build/src/lib.rs +++ b/core/tauri-build/src/lib.rs @@ -459,13 +459,15 @@ pub fn try_build(attributes: Attributes) -> Result<()> { let last = s.clone().count() - 1; let mut android_package_prefix = String::new(); for (i, w) in s.enumerate() { - if i == 0 || i != last { + if i == last { + println!("cargo:rustc-env=TAURI_ANDROID_PACKAGE_NAME_APP_NAME={}", w); + } else { android_package_prefix.push_str(w); android_package_prefix.push('_'); } } android_package_prefix.pop(); - println!("cargo:rustc-env=TAURI_ANDROID_PACKAGE_PREFIX={android_package_prefix}"); + println!("cargo:rustc-env=TAURI_ANDROID_PACKAGE_NAME_PREFIX={android_package_prefix}"); if let Some(project_dir) = var_os("TAURI_ANDROID_PROJECT_PATH").map(PathBuf::from) { mobile::generate_gradle_files(project_dir)?; diff --git a/core/tauri-macros/src/mobile.rs b/core/tauri-macros/src/mobile.rs index d18af1eb4..99d1e0c77 100644 --- a/core/tauri-macros/src/mobile.rs +++ b/core/tauri-macros/src/mobile.rs @@ -37,9 +37,14 @@ pub fn entry_point(_attributes: TokenStream, item: TokenStream) -> TokenStream { let function_name = &function.sig.ident; let mut error = None; - let domain = get_env_var("TAURI_ANDROID_PACKAGE_PREFIX", |r| r, &mut error, &function); + let domain = get_env_var( + "TAURI_ANDROID_PACKAGE_NAME_PREFIX", + |r| r, + &mut error, + &function, + ); let app_name = get_env_var( - "CARGO_PKG_NAME", + "TAURI_ANDROID_PACKAGE_NAME_APP_NAME", |r| r.replace('-', "_"), &mut error, &function, diff --git a/core/tauri/src/lib.rs b/core/tauri/src/lib.rs index cc77c9ae2..d507c8af6 100644 --- a/core/tauri/src/lib.rs +++ b/core/tauri/src/lib.rs @@ -129,17 +129,17 @@ pub type WryHandle = tauri_runtime_wry::WryHandle; #[doc(hidden)] #[macro_export] macro_rules! android_binding { - ($domain:ident, $package:ident, $main: ident, $wry: path) => { + ($domain:ident, $app_name:ident, $main:ident, $wry:path) => { use $wry::{ android_setup, prelude::{JClass, JNIEnv, JString}, }; - ::tauri::wry::android_binding!($domain, $package, $wry); + ::tauri::wry::android_binding!($domain, $app_name, $wry); ::tauri::tao::android_binding!( $domain, - $package, + $app_name, WryActivity, android_setup, $main, diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index fac2805fa..2e1783c46 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -3007,7 +3007,7 @@ checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "tauri" -version = "2.0.0-beta.19" +version = "2.0.0-beta.20" dependencies = [ "anyhow", "bytes", @@ -3057,7 +3057,7 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-beta.15" +version = "2.0.0-beta.16" dependencies = [ "anyhow", "cargo_toml", @@ -3079,7 +3079,7 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-beta.15" +version = "2.0.0-beta.16" dependencies = [ "base64 0.22.1", "brotli", @@ -3104,7 +3104,7 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-beta.15" +version = "2.0.0-beta.16" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -3116,7 +3116,7 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.0-beta.15" +version = "2.0.0-beta.16" dependencies = [ "anyhow", "glob", @@ -3152,7 +3152,7 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-beta.16" +version = "2.0.0-beta.17" dependencies = [ "dpi", "gtk", @@ -3169,7 +3169,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-beta.16" +version = "2.0.0-beta.17" dependencies = [ "cocoa", "gtk", @@ -3191,7 +3191,7 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-beta.15" +version = "2.0.0-beta.16" dependencies = [ "aes-gcm", "brotli", diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index 23e589bf6..52aa4a245 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -483,9 +483,9 @@ dependencies = [ [[package]] name = "cargo-mobile2" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6eb3459f8fb1fd0e12ca229db09cd763befe00827061cc5aaf6bdf173dad37c" +checksum = "79fadc84c218c513afcace5b0115bf615fb1c64dac782c1978f1620491339d7d" dependencies = [ "colored", "core-foundation", @@ -495,7 +495,7 @@ dependencies = [ "embed-resource", "english-numbers", "freedesktop_entry_parser", - "handlebars 4.5.0", + "handlebars", "heck 0.5.0", "home", "ignore", @@ -1795,20 +1795,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "handlebars" -version = "4.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" -dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "handlebars" version = "5.1.0" @@ -4862,7 +4848,7 @@ dependencies = [ "dunce", "flate2", "glob", - "handlebars 5.1.0", + "handlebars", "heck 0.5.0", "hex", "image", @@ -4912,7 +4898,7 @@ dependencies = [ "dunce", "env_logger", "glob", - "handlebars 5.1.0", + "handlebars", "heck 0.5.0", "html5ever", "ignore", @@ -5872,15 +5858,14 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "which" -version = "5.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" dependencies = [ "either", "home", - "once_cell", "rustix 0.38.31", - "windows-sys 0.48.0", + "winsafe", ] [[package]] @@ -5916,11 +5901,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.54.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132" dependencies = [ - "windows-core 0.54.0", + "windows-core 0.56.0", "windows-targets 0.52.5", ] @@ -5935,14 +5920,38 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.54.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" dependencies = [ + "windows-implement", + "windows-interface", "windows-result", "windows-targets 0.52.5", ] +[[package]] +name = "windows-implement" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "windows-interface" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + [[package]] name = "windows-result" version = "0.1.1" @@ -6148,6 +6157,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + [[package]] name = "x25519-dalek" version = "2.0.1" diff --git a/tooling/cli/Cargo.toml b/tooling/cli/Cargo.toml index 715a804d8..0b17590e4 100644 --- a/tooling/cli/Cargo.toml +++ b/tooling/cli/Cargo.toml @@ -39,7 +39,7 @@ name = "cargo-tauri" path = "src/main.rs" [dependencies] -cargo-mobile2 = { version = "0.11", default-features = false } +cargo-mobile2 = { version = "0.12", default-features = false } jsonrpsee = { version = "0.22", features = [ "server" ] } jsonrpsee-core = "0.22" jsonrpsee-client-transport = { version = "0.22", features = [ "ws" ] } diff --git a/tooling/cli/src/mobile/android/mod.rs b/tooling/cli/src/mobile/android/mod.rs index 2764e83c4..b0ce9c1a6 100644 --- a/tooling/cli/src/mobile/android/mod.rs +++ b/tooling/cli/src/mobile/android/mod.rs @@ -133,17 +133,13 @@ pub fn get_config( ..Default::default() }; - set_var( - "WRY_ANDROID_PACKAGE", - format!("{}.{}", app.reverse_domain(), app.name_snake()), - ); + set_var("WRY_ANDROID_PACKAGE", app.reverse_identifier()); set_var("WRY_ANDROID_LIBRARY", app.lib_name()); set_var("TAURI_ANDROID_PROJECT_PATH", config.project_dir()); let src_main_dir = config.project_dir().join("app/src/main").join(format!( - "java/{}/{}", - app.reverse_domain().replace('.', "/"), - app.name_snake() + "java/{}", + app.reverse_identifier().replace('.', "/"), )); if config.project_dir().exists() { if src_main_dir.exists() { diff --git a/tooling/cli/src/mobile/android/project.rs b/tooling/cli/src/mobile/android/project.rs index e14cad76e..34422585e 100644 --- a/tooling/cli/src/mobile/android/project.rs +++ b/tooling/cli/src/mobile/android/project.rs @@ -109,8 +109,8 @@ pub fn gen( ); map.insert("windows", cfg!(windows)); - let domain = config.app().reverse_domain().replace('.', "/"); - let package_path = format!("java/{}/{}", domain, config.app().name_snake()); + let identifier = config.app().reverse_identifier().replace('.', "/"); + let package_path = format!("java/{}", identifier); map.insert("package-path", &package_path); diff --git a/tooling/cli/src/mobile/mod.rs b/tooling/cli/src/mobile/mod.rs index 5d3891c16..509f60eff 100644 --- a/tooling/cli/src/mobile/mod.rs +++ b/tooling/cli/src/mobile/mod.rs @@ -288,24 +288,21 @@ fn read_options(identifier: &str) -> CliOptions { } pub fn get_app(config: &TauriConfig, interface: &AppInterface) -> App { - let mut s = config.identifier.rsplit('.'); - let app_name = s.next().unwrap_or("app").to_string(); - let mut domain = String::new(); - for w in s { - domain.push_str(w); - domain.push('.'); - } - if domain.is_empty() { - domain.clone_from(&config.identifier); - if domain.is_empty() { - log::error!("Bundle identifier set in `tauri.conf.json > identifier` cannot be empty"); - exit(1); - } - } else { - domain.pop(); + let identifier = config + .identifier + .rsplit('.') + .collect::>() + .join("."); + + if identifier.is_empty() { + log::error!("Bundle identifier set in `tauri.conf.json > identifier` cannot be empty"); + exit(1); } - let app_name = interface.app_settings().app_name().unwrap_or(app_name); + let app_name = interface + .app_settings() + .app_name() + .unwrap_or_else(|| "app".into()); let lib_name = interface .app_settings() .lib_name() @@ -315,7 +312,7 @@ pub fn get_app(config: &TauriConfig, interface: &AppInterface) -> App { name: app_name, lib_name: Some(lib_name), stylized_name: config.product_name.clone(), - domain, + identifier, asset_dir: None, template_pack: None, }; diff --git a/tooling/cli/templates/mobile/android/app/build.gradle.kts b/tooling/cli/templates/mobile/android/app/build.gradle.kts index 06870f32d..126c6d560 100644 --- a/tooling/cli/templates/mobile/android/app/build.gradle.kts +++ b/tooling/cli/templates/mobile/android/app/build.gradle.kts @@ -8,10 +8,10 @@ plugins { android { compileSdk = 33 - namespace = "{{reverse-domain app.domain}}.{{snake-case app.name}}" + namespace = "{{reverse-domain app.identifier}}" defaultConfig { manifestPlaceholders["usesCleartextTraffic"] = "false" - applicationId = "{{reverse-domain app.domain}}.{{snake-case app.name}}" + applicationId = "{{reverse-domain app.identifier}}" minSdk = {{android.min-sdk-version}} targetSdk = 33 versionCode = 1 @@ -60,4 +60,4 @@ dependencies { androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0") } -apply(from = "tauri.build.gradle.kts") +apply(from = "tauri.build.gradle.kts") \ No newline at end of file diff --git a/tooling/cli/templates/mobile/android/app/src/main/MainActivity.kt b/tooling/cli/templates/mobile/android/app/src/main/MainActivity.kt index 8425f5e2e..056677cd6 100644 --- a/tooling/cli/templates/mobile/android/app/src/main/MainActivity.kt +++ b/tooling/cli/templates/mobile/android/app/src/main/MainActivity.kt @@ -1,3 +1,3 @@ -package {{reverse-domain app.domain}}.{{snake-case app.name}} +package {{reverse-domain app.identifier}} -class MainActivity : TauriActivity() +class MainActivity : TauriActivity() \ No newline at end of file diff --git a/tooling/cli/templates/mobile/ios/project.yml b/tooling/cli/templates/mobile/ios/project.yml index 1a491bb3b..0a64c3cb6 100644 --- a/tooling/cli/templates/mobile/ios/project.yml +++ b/tooling/cli/templates/mobile/ios/project.yml @@ -1,6 +1,6 @@ name: {{app.name}} options: - bundleIdPrefix: {{reverse-domain app.domain}} + bundleIdPrefix: {{reverse-domain app.identifier}} deploymentTarget: iOS: {{apple.ios-version}} fileGroups: [{{join file-groups}}] @@ -11,7 +11,7 @@ settingGroups: app: base: PRODUCT_NAME: {{app.stylized-name}} - PRODUCT_BUNDLE_IDENTIFIER: {{reverse-domain app.domain}}.{{app.name}} + PRODUCT_BUNDLE_IDENTIFIER: {{reverse-domain app.identifier}} {{#if apple.development-team}} DEVELOPMENT_TEAM: {{apple.development-team}} {{/if}}