iOS的陶里手机
#教程 #typescript #rust #ios

我最近一直在尝试Tauri Alpha尝试移动应用程序开发。通过遵循官方指南并解决问题,这就是我设法使用Web视图设置了一个基本项目。

快进模板解决方案

强烈建议遵循此简化指南,包括项目模板。
您可以在这里找到https://github.com/Adimac93/tauri-mobile-apple-ecosystem
此外,这里还可以使用Android版本(基于我的模板)https://github.com/casey-SK/tauri-mobile-android
如果您对特定的设置步骤感兴趣,则可以与这篇文章一起阅读。

苹果系统

XCode

XCode

我尝试使用最新的稳定版本(14.3.1)和beta版本(iOS 17)设置Xcode。但是,只有一个稳定的版本对我有用。

警告
来自Appstore的Xcode以臭名昭著的下载问题而闻名。
而是从Apple网站XCode 14.3.1 download下载它。

您需要确保计算机上安装了命令行工具:

$ xcode-select --install

如果已安装了多个Xcode CLI工具版本,则可以在Xcode Settings... > Locations > Command Line Tools中设置CLI版本。

XCode CLI version

您应该使用Apple ID登录XCode,以签署个人证书的应用程序。这将使您可以直接在设备上测试您的应用程序。

Settings... > Accounts > + > Apple ID
XCode Apple ID

下一个依赖性是生锈,可以通过以下命令下载:

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

如果您已经安装了它,请确保它是最新的:

$ rustup update

iOS目标

$ rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim

应用程序设置

使用Tauri脚手架实用程序,使用所需的前端框架设置一个新项目更容易。
在此示例中,我将使用以下选项:

  • 前端语言:打字稿
  • 软件包管理器:PNPM
  • UI模板:Svelte
  • UI味道:打字稿
$ cargo install create-tauri-app
$ cargo create-tauri-app

Console output

安装前端依赖项:

$ cd tauri-mobile
$ pnpm add -D internal-ip
$ pnpm i

更新Tauri Cli:

$ pnpm update @tauri-apps/cli@next @tauri-apps/api@next

,如果您想将CLI与货物一起使用

$ cargo install tauri-cli --version "^2.0.0-alpha"

快速地

create-tauri-app生成的Svelte的默认Vite配置。
vite.config.ts

import { defineConfig } from "vite";
import { svelte } from "@sveltejs/vite-plugin-svelte";

// https://vitejs.dev/config/
export default defineConfig(async () => ({
  plugins: [svelte()],
  clearScreen: false,
  server: {
    port: 1420,
    strictPort: true,
  },
  envPrefix: ["VITE_", "TAURI_"],
}));

我们需要将其更改为以下内容:
vite.config.ts

import { defineConfig } from "vite";
import { svelte } from "@sveltejs/vite-plugin-svelte";
import { internalIpV4 } from 'internal-ip'

// https://vitejs.dev/config/
export default defineConfig(async () => ({
  plugins: [svelte()],
  clearScreen: false,
  server: {
    host: "0.0.0.0",
    port: 5173,
    strictPort: true,
    hmr: {
      protocol: 'ws',
      host: await internalIpV4(),
      port: 5183,
    },
  },
  envPrefix: ["VITE_", "TAURI_"],
}));

艰辛

  1. 删除allowlist
  2. 匹配devPath端口(与vite.config.ts > server > port相同)
  3. 更改束标识符(仅使用字母数字字符,因为其他字符现在被漏了)

ðâip
捆绑ID唯一地标识整个系统中的一个应用程序。束ID字符串必须仅包含字母数字字符(AâZ,AâZ和0â9),连字符( - )和周期(。)。通常,您使用反向DNS格式用于捆绑ID字符串。捆绑ID是不敏感的。
Apple docs

src-tauri/tauri.conf.json

{
  "build": {
    "beforeDevCommand": "pnpm dev",
    "beforeBuildCommand": "pnpm build",
-   "devPath": "http://localhost:1420",
+   "devPath": "http://localhost:5173",
    "distDir": "../dist",
    "withGlobalTauri": false
  },
  "package": {
    "productName": "tauri-mobile",
    "version": "0.0.0"
  },
  "tauri": {
-   "allowlist": {
-     "all": false,
-     "shell": {
-       "all": false,
-       "open": true
-     }
-   },
    "bundle": {
      "active": true,
      "targets": "all",
-     "identifier": "com.tauri.dev",
+     "identifier": "com.<YOUR ID>.dev"
      "icon": [
        "icons/32x32.png",
        "icons/128x128.png",
        "icons/128x128@2x.png",
        "icons/icon.icns",
        "icons/icon.ico"
      ]
    },
    "security": {
      "csp": null
    },
    "windows": [
      {
        "fullscreen": false,
        "resizable": true,
        "title": "tauri-mobile",
        "width": 800,
        "height": 600
      }
    ]
  }
}

安装iOS codegen依赖项:

$ brew install cocoapods

安装核心货物依赖性:

$ cargo add tauri@2.0.0-alpha.<VERSION>
$ cargo add tauri-build@2.0.0-alpha.<VERSION> --build

如果您会收到以下错误:

➜ cargo add tauri@2.0.0-alpha.10

    Updating crates.io index

      Adding tauri v2.0.0-alpha.10 to dependencies.

error: unrecognized feature for crate tauri: shell-open

您所做的只是
src-tauri/Cargo.toml

[package]

name = "tauri-mobile"

version = "0.0.0"

description = "A Tauri App"

authors = ["you"]

license = ""

repository = ""

edition = "2021"



# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html



[build-dependencies]

tauri-build = { version = "1.4", features = [] }



[dependencies]

- tauri = { version = "1.4", features = ["shell-open"] }

serde = { version = "1.0", features = ["derive"] }

serde_json = "1.0"



[features]

# this feature is used for production builds or when `devPath` points to the filesystem

# DO NOT REMOVE!!

- custom-protocol = ["tauri/custom-protocol"]

升级依赖项后,将此线向后放回
custom-protocol = ["tauri/custom-protocol"]

包括嵌入式库
src-tauri/Cargo.toml

[lib]
crate-type = ["staticlib", "cdylib", "rlib"]

然后您设置了项目文件。

src-tauri/src/lib.rs

use tauri::App;

#[cfg(mobile)]
mod mobile;
#[cfg(mobile)]
pub use mobile::*;

pub type SetupHook = Box<dyn FnOnce(&mut App) -> Result<(), Box<dyn std::error::Error>> + Send>;

#[derive(Default)]
pub struct AppBuilder {
  setup: Option<SetupHook>,
}

impl AppBuilder {
  pub fn new() -> Self {
    Self::default()
  }

  #[must_use]
  pub fn setup<F>(mut self, setup: F) -> Self
  where
    F: FnOnce(&mut App) -> Result<(), Box<dyn std::error::Error>> + Send + 'static,
  {
    self.setup.replace(Box::new(setup));
    self
  }

  pub fn run(self) {
    let setup = self.setup;
    tauri::Builder::default()
      .setup(move |app| {
        if let Some(setup) = setup {
          (setup)(app)?;
        }
        Ok(())
      })
      .run(tauri::generate_context!())
      .expect("error while running tauri application");
  }
}

入口点
src-tauri/src/mobile.rs

#[tauri::mobile_entry_point]
fn main() {
  super::AppBuilder::new().run();
}


src-tauri/src/main.rs

#![cfg_attr(
  all(not(debug_assertions), target_os = "windows"),
  windows_subsystem = "windows"
)]

pub fn main() {
  app::AppBuilder::new().run();
}

这就是您所需要的!
现在运行ios dev并使用模拟器或连接的iOS设备测试您的应用。