From 4e3bfed1fc3c7a70217f18d3794372bea2ba89b2 Mon Sep 17 00:00:00 2001 From: Vladimir Pankratov Date: Sat, 8 Feb 2025 22:49:31 +0100 Subject: [PATCH 1/3] Added support for short verion string for mac and ios --- crates/tauri-bundler/src/bundle/macos/app.rs | 11 +++--- crates/tauri-bundler/src/bundle/macos/ios.rs | 2 +- crates/tauri-bundler/src/bundle/settings.rs | 7 ++++ crates/tauri-cli/src/interface/rust.rs | 38 +++++++++++++------- crates/tauri-cli/src/mobile/ios/build.rs | 3 +- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/crates/tauri-bundler/src/bundle/macos/app.rs b/crates/tauri-bundler/src/bundle/macos/app.rs index 20cdd990911e..817dd3bcda71 100644 --- a/crates/tauri-bundler/src/bundle/macos/app.rs +++ b/crates/tauri-bundler/src/bundle/macos/app.rs @@ -191,12 +191,6 @@ fn create_info_plist( bundle_icon_file: Option, settings: &Settings, ) -> crate::Result<()> { - let format = time::format_description::parse("[year][month][day].[hour][minute][second]") - .map_err(time::error::Error::from)?; - let build_number = time::OffsetDateTime::now_utc() - .format(&format) - .map_err(time::error::Error::from)?; - let mut plist = plist::Dictionary::new(); plist.insert("CFBundleDevelopmentRegion".into(), "English".into()); plist.insert("CFBundleDisplayName".into(), settings.product_name().into()); @@ -224,9 +218,12 @@ fn create_info_plist( plist.insert("CFBundlePackageType".into(), "APPL".into()); plist.insert( "CFBundleShortVersionString".into(), + settings.short_version_string().into(), + ); + plist.insert( + "CFBundleVersion".into(), settings.version_string().into(), ); - plist.insert("CFBundleVersion".into(), build_number.into()); plist.insert("CSResourcesFileMapped".into(), true.into()); if let Some(category) = settings.app_category() { plist.insert( diff --git a/crates/tauri-bundler/src/bundle/macos/ios.rs b/crates/tauri-bundler/src/bundle/macos/ios.rs index 5f4a87a0e538..2a6fdc51aec6 100644 --- a/crates/tauri-bundler/src/bundle/macos/ios.rs +++ b/crates/tauri-bundler/src/bundle/macos/ios.rs @@ -183,7 +183,7 @@ fn generate_info_plist( writeln!( file, " CFBundleShortVersionString\n {}", - settings.version_string() + settings.short_version_string() )?; writeln!( file, diff --git a/crates/tauri-bundler/src/bundle/settings.rs b/crates/tauri-bundler/src/bundle/settings.rs index de7e32a1e3b1..ce02dd4b5cc5 100644 --- a/crates/tauri-bundler/src/bundle/settings.rs +++ b/crates/tauri-bundler/src/bundle/settings.rs @@ -146,6 +146,8 @@ pub struct PackageSettings { pub product_name: String, /// the package's version. pub version: String, + /// the package's short version. + pub short_version: String, /// the package's description. pub description: String, /// the package's homepage. @@ -1089,6 +1091,11 @@ impl Settings { &self.package.version } + /// Returns the short version string of the bundle. + pub fn short_version_string(&self) -> &str { + &self.package.short_version + } + /// Returns the copyright text. pub fn copyright_string(&self) -> Option<&str> { self.bundle_settings.copyright.as_deref() diff --git a/crates/tauri-cli/src/interface/rust.rs b/crates/tauri-cli/src/interface/rust.rs index d3e6950db31d..71e592085324 100644 --- a/crates/tauri-cli/src/interface/rust.rs +++ b/crates/tauri-cli/src/interface/rust.rs @@ -1017,24 +1017,27 @@ impl RustAppSettings { .workspace .and_then(|v| v.package); + let version = config.version.clone().unwrap_or_else(|| { + cargo_package_settings + .version + .clone() + .expect("Cargo manifest must have the `package.version` field") + .resolve("version", || { + ws_package_settings + .as_ref() + .and_then(|p| p.version.clone()) + .ok_or_else(|| anyhow::anyhow!("Couldn't inherit value for `version` from workspace")) + }) + .expect("Cargo project does not have a version") + }); + let package_settings = PackageSettings { product_name: config .product_name .clone() .unwrap_or_else(|| cargo_package_settings.name.clone()), - version: config.version.clone().unwrap_or_else(|| { - cargo_package_settings - .version - .clone() - .expect("Cargo manifest must have the `package.version` field") - .resolve("version", || { - ws_package_settings - .as_ref() - .and_then(|p| p.version.clone()) - .ok_or_else(|| anyhow::anyhow!("Couldn't inherit value for `version` from workspace")) - }) - .expect("Cargo project does not have a version") - }), + version: version.clone(), + short_version: Self::extract_short_version(&version), description: cargo_package_settings .description .clone() @@ -1119,6 +1122,15 @@ impl RustAppSettings { .or_else(|| self.cargo_config.build().target()) } + fn extract_short_version(version: &String) -> String { + let mut parts = version.split('.'); + match (parts.next(), parts.next()) { + (Some(major), Some(minor)) => format!("{}.{}", major, minor), // Create a new version String + (Some(major), None) => major.to_string(), // Convert major to version String if no minor + _ => String::new(), // Handle empty input case + } + } + pub fn out_dir(&self, options: &Options) -> crate::Result { get_target_dir(self.target(options), options) } diff --git a/crates/tauri-cli/src/mobile/ios/build.rs b/crates/tauri-cli/src/mobile/ios/build.rs index 82a6d2effa40..c5f48397cc70 100644 --- a/crates/tauri-cli/src/mobile/ios/build.rs +++ b/crates/tauri-cli/src/mobile/ios/build.rs @@ -177,7 +177,8 @@ pub fn command(options: Options, noise_level: NoiseLevel) -> Result<()> { let mut plist = plist::Dictionary::new(); let version = interface.app_settings().get_package_settings().version; - plist.insert("CFBundleShortVersionString".into(), version.clone().into()); + let short_version = interface.app_settings().get_package_settings().short_version; + plist.insert("CFBundleShortVersionString".into(), short_version.clone().into()); plist.insert("CFBundleVersion".into(), version.into()); let info_plist_path = config From 8b112f1176eaff8f0df968fd944c131eacdd6da0 Mon Sep 17 00:00:00 2001 From: Vladimir Pankratov Date: Sun, 9 Feb 2025 20:17:58 +0100 Subject: [PATCH 2/3] Made clippy happy --- crates/tauri-cli/src/interface/rust.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/tauri-cli/src/interface/rust.rs b/crates/tauri-cli/src/interface/rust.rs index 71e592085324..0fdbe5cd9cc4 100644 --- a/crates/tauri-cli/src/interface/rust.rs +++ b/crates/tauri-cli/src/interface/rust.rs @@ -1122,7 +1122,7 @@ impl RustAppSettings { .or_else(|| self.cargo_config.build().target()) } - fn extract_short_version(version: &String) -> String { + fn extract_short_version(version: &str) -> String { let mut parts = version.split('.'); match (parts.next(), parts.next()) { (Some(major), Some(minor)) => format!("{}.{}", major, minor), // Create a new version String From df4e5c58b36a7dcefe939eda30f502a86aff9a71 Mon Sep 17 00:00:00 2001 From: Vladimir Pankratov Date: Sun, 9 Feb 2025 20:25:57 +0100 Subject: [PATCH 3/3] Made fmt happy --- crates/tauri-bundler/src/bundle/macos/app.rs | 5 +---- crates/tauri-cli/src/interface/rust.rs | 6 +++--- crates/tauri-cli/src/mobile/ios/build.rs | 10 ++++++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/crates/tauri-bundler/src/bundle/macos/app.rs b/crates/tauri-bundler/src/bundle/macos/app.rs index 817dd3bcda71..3a2d4eb5bdd3 100644 --- a/crates/tauri-bundler/src/bundle/macos/app.rs +++ b/crates/tauri-bundler/src/bundle/macos/app.rs @@ -220,10 +220,7 @@ fn create_info_plist( "CFBundleShortVersionString".into(), settings.short_version_string().into(), ); - plist.insert( - "CFBundleVersion".into(), - settings.version_string().into(), - ); + plist.insert("CFBundleVersion".into(), settings.version_string().into()); plist.insert("CSResourcesFileMapped".into(), true.into()); if let Some(category) = settings.app_category() { plist.insert( diff --git a/crates/tauri-cli/src/interface/rust.rs b/crates/tauri-cli/src/interface/rust.rs index 0fdbe5cd9cc4..543b099f58fa 100644 --- a/crates/tauri-cli/src/interface/rust.rs +++ b/crates/tauri-cli/src/interface/rust.rs @@ -1125,9 +1125,9 @@ impl RustAppSettings { fn extract_short_version(version: &str) -> String { let mut parts = version.split('.'); match (parts.next(), parts.next()) { - (Some(major), Some(minor)) => format!("{}.{}", major, minor), // Create a new version String - (Some(major), None) => major.to_string(), // Convert major to version String if no minor - _ => String::new(), // Handle empty input case + (Some(major), Some(minor)) => format!("{}.{}", major, minor), // Create a new version String + (Some(major), None) => major.to_string(), // Convert major to version String if no minor + _ => String::new(), // Handle empty input case } } diff --git a/crates/tauri-cli/src/mobile/ios/build.rs b/crates/tauri-cli/src/mobile/ios/build.rs index c5f48397cc70..8bd1e1ac092b 100644 --- a/crates/tauri-cli/src/mobile/ios/build.rs +++ b/crates/tauri-cli/src/mobile/ios/build.rs @@ -177,8 +177,14 @@ pub fn command(options: Options, noise_level: NoiseLevel) -> Result<()> { let mut plist = plist::Dictionary::new(); let version = interface.app_settings().get_package_settings().version; - let short_version = interface.app_settings().get_package_settings().short_version; - plist.insert("CFBundleShortVersionString".into(), short_version.clone().into()); + let short_version = interface + .app_settings() + .get_package_settings() + .short_version; + plist.insert( + "CFBundleShortVersionString".into(), + short_version.clone().into(), + ); plist.insert("CFBundleVersion".into(), version.into()); let info_plist_path = config