Browse Source

feat(cli): automatically enable native-tls-vendored feature on mobile (#5651)

Lucas Fernandes Nogueira 2 years ago
parent
commit
658bb1165e

+ 0 - 10
examples/api/src-tauri/Cargo.lock

@@ -2039,15 +2039,6 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
 
-[[package]]
-name = "openssl-src"
-version = "111.22.0+1.1.1q"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853"
-dependencies = [
- "cc",
-]
-
 [[package]]
 name = "openssl-sys"
 version = "0.9.77"
@@ -2057,7 +2048,6 @@ dependencies = [
  "autocfg",
  "cc",
  "libc",
- "openssl-src",
  "pkg-config",
  "vcpkg",
 ]

+ 0 - 1
examples/api/src-tauri/Cargo.toml

@@ -30,7 +30,6 @@ features = [
   "macos-private-api",
   "windows7-compat",
   "reqwest-client",
-  "reqwest-native-tls-vendored",
   "system-tray",
   "updater"
 ]

+ 12 - 10
tooling/cli/src/build.rs

@@ -57,7 +57,7 @@ pub struct Options {
 }
 
 pub fn command(mut options: Options) -> Result<()> {
-  let mut interface = setup(&mut options)?;
+  let mut interface = setup(&mut options, false)?;
 
   let config = get_config(options.config.as_deref())?;
   let config_guard = config.lock().unwrap();
@@ -222,7 +222,7 @@ pub fn command(mut options: Options) -> Result<()> {
   Ok(())
 }
 
-pub fn setup(options: &mut Options) -> Result<AppInterface> {
+pub fn setup(options: &mut Options, mobile: bool) -> Result<AppInterface> {
   let (merge_config, merge_config_path) = if let Some(config) = &options.config {
     if config.starts_with('{') {
       (Some(config.to_string()), None)
@@ -309,11 +309,11 @@ pub fn setup(options: &mut Options) -> Result<AppInterface> {
     }
     if !out_folders.is_empty() {
       return Err(anyhow::anyhow!(
-            "The configured distDir includes the `{:?}` {}. Please isolate your web assets on a separate folder and update `tauri.conf.json > build > distDir`.",
-            out_folders,
-            if out_folders.len() == 1 { "folder" }else { "folders" }
-          )
-        );
+          "The configured distDir includes the `{:?}` {}. Please isolate your web assets on a separate folder and update `tauri.conf.json > build > distDir`.",
+          out_folders,
+          if out_folders.len() == 1 { "folder" }else { "folders" }
+        )
+      );
     }
   }
 
@@ -321,9 +321,11 @@ pub fn setup(options: &mut Options) -> Result<AppInterface> {
     options.runner = config_.build.runner.clone();
   }
 
-  if let Some(list) = options.features.as_mut() {
-    list.extend(config_.build.features.clone().unwrap_or_default());
-  }
+  options
+    .features
+    .get_or_insert(Vec::new())
+    .extend(config_.build.features.clone().unwrap_or_default());
+  interface.build_options(&mut options.features, mobile);
 
   Ok(interface)
 }

+ 42 - 8
tooling/cli/src/interface/rust.rs

@@ -148,11 +148,7 @@ impl Interface for Rust {
     &self.app_settings
   }
 
-  fn build(&mut self, mut options: Options) -> crate::Result<()> {
-    options
-      .features
-      .get_or_insert(Vec::new())
-      .push("custom-protocol".into());
+  fn build(&mut self, options: Options) -> crate::Result<()> {
     desktop::build(
       options,
       &self.app_settings,
@@ -172,10 +168,11 @@ impl Interface for Rust {
 
     let mut run_args = Vec::new();
     dev_options(
+      false,
       &mut options.args,
       &mut run_args,
       &mut options.features,
-      self.app_settings.manifest.features(),
+      &self.app_settings,
     );
 
     if options.no_watch {
@@ -206,10 +203,11 @@ impl Interface for Rust {
   ) -> crate::Result<()> {
     let mut run_args = Vec::new();
     dev_options(
+      true,
       &mut options.args,
       &mut run_args,
       &mut options.features,
-      self.app_settings.manifest.features(),
+      &self.app_settings,
     );
 
     if options.no_watch {
@@ -346,11 +344,37 @@ fn lookup<F: FnMut(FileType, PathBuf)>(dir: &Path, mut f: F) {
   }
 }
 
+fn shared_options(
+  mobile: bool,
+  features: &mut Option<Vec<String>>,
+  app_settings: &RustAppSettings,
+) {
+  if mobile {
+    let all_features = app_settings
+      .manifest
+      .all_enabled_features(if let Some(f) = features { f } else { &[] });
+    if !all_features.contains(&"tauri/native-tls-vendored".into())
+      && !all_features.contains(&"tauri/reqwest-native-tls-vendored".into())
+    {
+      if all_features.contains(&"tauri/reqwest-client".into()) {
+        features
+          .get_or_insert(Vec::new())
+          .push("tauri/reqwest-native-tls-vendored".into());
+      } else {
+        features
+          .get_or_insert(Vec::new())
+          .push("tauri/native-tls-vendored".into());
+      }
+    }
+  }
+}
+
 fn dev_options(
+  mobile: bool,
   args: &mut Vec<String>,
   run_args: &mut Vec<String>,
   features: &mut Option<Vec<String>>,
-  manifest_features: HashMap<String, Vec<String>>,
+  app_settings: &RustAppSettings,
 ) {
   let mut dev_args = Vec::new();
   let mut reached_run_args = false;
@@ -365,7 +389,10 @@ fn dev_options(
   }
   *args = dev_args;
 
+  shared_options(mobile, features, app_settings);
+
   if !args.contains(&"--no-default-features".into()) {
+    let manifest_features = app_settings.manifest.features();
     let enable_features: Vec<String> = manifest_features
       .get("default")
       .cloned()
@@ -387,6 +414,13 @@ fn dev_options(
 }
 
 impl Rust {
+  pub fn build_options(&self, features: &mut Option<Vec<String>>, mobile: bool) {
+    features
+      .get_or_insert(Vec::new())
+      .push("custom-protocol".into());
+    shared_options(mobile, features, &self.app_settings);
+  }
+
   fn run_dev<F: Fn(ExitStatus, ExitReason) + Send + Sync + 'static>(
     &mut self,
     options: Options,

+ 1 - 1
tooling/cli/src/mobile/android/build.rs

@@ -119,7 +119,7 @@ fn run_build(
   };
 
   let mut build_options = options.clone().into();
-  let interface = crate::build::setup(&mut build_options)?;
+  let interface = crate::build::setup(&mut build_options, true)?;
 
   let app_settings = interface.app_settings();
   let bin_path = app_settings.app_binary_path(&InterfaceOptions {

+ 1 - 1
tooling/cli/src/mobile/ios/build.rs

@@ -105,7 +105,7 @@ fn run_build(
   };
 
   let mut build_options = options.clone().into();
-  let interface = crate::build::setup(&mut build_options)?;
+  let interface = crate::build::setup(&mut build_options, true)?;
 
   let app_settings = interface.app_settings();
   let bin_path = app_settings.app_binary_path(&InterfaceOptions {