瀏覽代碼

refactor(mobile): use shared .tauri folder to inject dependencies (#6495)

Lucas Fernandes Nogueira 2 年之前
父節點
當前提交
9c8276fe03

+ 2 - 2
core/tauri-build/src/lib.rs

@@ -298,7 +298,7 @@ val implementation by configurations
 dependencies {"
       .to_string();
 
-    for entry in read_dir(project_dir.join("tauri-plugins"))? {
+    for entry in read_dir(project_dir.join(".tauri").join("plugins"))? {
       let pkg_name = entry?
         .path()
         .file_name()
@@ -308,7 +308,7 @@ dependencies {"
       gradle_settings.push_str(&format!("include ':{pkg_name}'"));
       gradle_settings.push('\n');
       gradle_settings.push_str(&format!(
-        "project(':{pkg_name}').projectDir = new File('./tauri-plugins/{pkg_name}')"
+        "project(':{pkg_name}').projectDir = new File('./.tauri/plugins/{pkg_name}')"
       ));
       gradle_settings.push('\n');
 

+ 7 - 4
core/tauri-build/src/mobile.rs

@@ -4,7 +4,7 @@
 
 use std::{
   env::{var, var_os},
-  fs::{copy, create_dir, remove_dir_all, rename},
+  fs::{copy, create_dir, create_dir_all, remove_dir_all, rename},
   path::{Path, PathBuf},
 };
 
@@ -50,9 +50,10 @@ impl PluginBuilder {
           let tauri_library_path = std::env::var("DEP_TAURI_ANDROID_LIBRARY_PATH")
             .expect("missing `DEP_TAURI_ANDROID_LIBRARY_PATH` environment variable. Make sure `tauri` is a dependency of the plugin.");
 
+          create_dir_all(source.join(".tauri")).context("failed to create .tauri directory")?;
           copy_folder(
             Path::new(&tauri_library_path),
-            &source.join("tauri-api"),
+            &source.join(".tauri").join("tauri-api"),
             &[],
           )
           .context("failed to copy tauri-api to the plugin project")?;
@@ -63,7 +64,7 @@ impl PluginBuilder {
 
             inject_android_project(
               &source,
-              project_dir.join("tauri-plugins").join(pkg_name),
+              project_dir.join(".tauri").join("plugins").join(pkg_name),
               &["tauri-api"],
             )
             .context("failed to inject plugin Android project")?;
@@ -77,9 +78,11 @@ impl PluginBuilder {
           let tauri_library_path = std::env::var("DEP_TAURI_IOS_LIBRARY_PATH")
             .expect("missing `DEP_TAURI_IOS_LIBRARY_PATH` environment variable. Make sure `tauri` is a dependency of the plugin.");
 
+          let tauri_dep_path = &path.parent().unwrap().join(".tauri");
+          create_dir_all(&tauri_dep_path).context("failed to create .tauri directory")?;
           copy_folder(
             Path::new(&tauri_library_path),
-            &path.parent().unwrap().join("tauri-api"),
+            &tauri_dep_path.join("tauri-api"),
             &[".build", "Package.resolved", "Tests"],
           )
           .context("failed to copy tauri-api to the plugin project")?;

+ 1 - 1
core/tauri/build.rs

@@ -159,7 +159,7 @@ fn main() {
     if let Some(project_dir) = var_os("TAURI_ANDROID_PROJECT_PATH").map(PathBuf::from) {
       tauri_build::mobile::inject_android_project(
         "./mobile/android",
-        project_dir.join("tauri-api"),
+        project_dir.join(".tauri").join("tauri-api"),
         &[],
       )
       .expect("failed to copy tauri-api Android project");

+ 1 - 1
examples/api/src-tauri/tauri-plugin-sample/.gitignore

@@ -1 +1 @@
-/tauri-api
+.tauri

+ 1 - 1
examples/api/src-tauri/tauri-plugin-sample/android/.gitignore

@@ -1,2 +1,2 @@
 /build
-/tauri-api
+.tauri

+ 1 - 1
examples/api/src-tauri/tauri-plugin-sample/android/settings.gradle

@@ -1,2 +1,2 @@
 include ':tauri-android'
-project(':tauri-android').projectDir = new File('./tauri-api')
+project(':tauri-android').projectDir = new File('./.tauri/tauri-api')

+ 1 - 1
tooling/cli/src/mobile/mod.rs

@@ -316,7 +316,7 @@ fn ensure_init(project_dir: PathBuf, target: Target) -> Result<()> {
       target.command_name(),
     )
   } else {
-    create_dir_all(project_dir.join("tauri-plugins"))?;
+    create_dir_all(project_dir.join(".tauri").join("plugins"))?;
     Ok(())
   }
 }

+ 1 - 2
tooling/cli/templates/mobile/android/.gitignore

@@ -16,5 +16,4 @@ build
 .cxx
 local.properties
 
-/tauri-plugins
-/tauri-api
+/.tauri

+ 1 - 1
tooling/cli/templates/mobile/android/settings.gradle

@@ -3,6 +3,6 @@ include ':app'
 include ':{{this}}'{{/each}}
 
 include ':tauri-android'
-project(':tauri-android').projectDir = new File('./tauri-api')
+project(':tauri-android').projectDir = new File('./.tauri/tauri-api')
 
 apply from: 'tauri.settings.gradle'

+ 1 - 1
tooling/cli/templates/plugin/.gitignore

@@ -8,7 +8,7 @@ package-lock.json
 .vscode/settings.json
 yarn.lock
 
-/tauri-api
+/.tauri
 /target
 Cargo.lock
 node_modules/

+ 1 - 1
tooling/cli/templates/plugin/android/.gitignore

@@ -1,2 +1,2 @@
 /build
-/tauri-api
+/.tauri

+ 1 - 1
tooling/cli/templates/plugin/android/settings.gradle

@@ -1,2 +1,2 @@
 include ':tauri-android'
-project(':tauri-android').projectDir = new File('./tauri-api')
+project(':tauri-android').projectDir = new File('./.tauri/tauri-api')

+ 1 - 1
tooling/cli/templates/plugin/ios/Package.swift

@@ -16,7 +16,7 @@ let package = Package(
             targets: ["tauri-plugin-{{ plugin_name }}"]),
     ],
     dependencies: [
-        .package(name: "Tauri", path: "./tauri-api")
+        .package(name: "Tauri", path: "../.tauri/tauri-api")
     ],
     targets: [
         // Targets are the basic building blocks of a package. A target can define a module or a test suite.

+ 1 - 3
tooling/cli/templates/plugin/src/mobile.rs

@@ -13,9 +13,7 @@ use crate::models::*;
 const PLUGIN_IDENTIFIER: &str = "{{ android_package_id }}";
 
 #[cfg(target_os = "ios")]
-extern "C" {
-  fn init_plugin_{{ plugin_name }}(webview: tauri::cocoa::base::id);
-}
+tauri::ios_plugin_binding!(init_plugin_{{ plugin_name }});
 
 // initializes the Kotlin or Swift plugin classes
 pub fn init<R: Runtime, C: DeserializeOwned>(