我最近一直在尝试Tauri Alpha尝试移动应用程序开发。通过遵循官方指南并解决问题,这就是我设法使用Web视图设置了一个基本项目。
快进模板解决方案
强烈建议遵循此简化指南,包括项目模板。
您可以在这里找到https://github.com/Adimac93/tauri-mobile-apple-ecosystem
此外,这里还可以使用Android版本(基于我的模板)https://github.com/casey-SK/tauri-mobile-android
如果您对特定的设置步骤感兴趣,则可以与这篇文章一起阅读。
苹果系统
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版本。
您应该使用Apple ID登录XCode,以签署个人证书的应用程序。这将使您可以直接在设备上测试您的应用程序。
Settings... > Accounts > + > 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
安装前端依赖项:
$ 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_"],
}));
艰辛
- 删除
allowlist
- 匹配
devPath
端口(与vite.config.ts > server > port
相同) - 更改束标识符(仅使用字母数字字符,因为其他字符现在被漏了)
ðâ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设备测试您的应用。