---
url: https://native-shell.com/zh-CN/docs/platforms
description: "nsh 在哪些平台上运行：iOS、Android、macOS、Windows 和 Linux，每个平台都有自己的原生后端；在各平台上如何运行、打包和嵌入，各自需要什么，以及本站示例使用的 Web 构建。"
---

# 平台概览

nsh 同时运行在手机和桌面上：iOS、Android、macOS、Windows 和 Linux。每个平台都有自己的后端，用平台的原生界面绘制：同一个模块在 iPhone 上是 UIKit 视图，在 Mac 上是 AppKit 视图，在 Linux 上是 GTK 4 控件，文本、输入、无障碍和深色模式都是平台自己的。后端之上的部分全部共享：QuickJS、响应式图、渲染器、Taffy 布局和组件在每个平台上都是同一份 Rust 代码，所以一个 bundle 可以在所有平台上运行。

在每个平台上，nsh 的主要用途都一样：把模块嵌入你自己的原生应用，由它在运行时加载。开发时借助热更新（`nsh run`）；同样的模块也可以打包成可安装的应用（`nsh package`），这是受支持的第二种用法。

## 一览

| 平台 | 后端；文本 | 运行环境 | 开发 | 打包 |
|---|---|---|---|---|
| [iOS](https://native-shell.com/zh-CN/docs/embedding-ios.md) | UIKit；CoreText | iOS 15.0+，真机和模拟器 | `nsh run --target ios` | `.app`（模拟器）、签名的 `.ipa` |
| [Android](https://native-shell.com/zh-CN/docs/embedding-android.md) | Android 视图；`StaticLayout` | Android 9（API 28）+，`arm64-v8a` 和 `x86_64` | `nsh run --target android` | 签名的 `.apk` |
| [macOS](https://native-shell.com/zh-CN/docs/macos.md) | AppKit 与 Core Animation；CoreText | macOS 14+ | `nsh run --target macos` | ad hoc 签名的 `.app` |
| [Windows](https://native-shell.com/zh-CN/docs/windows.md) | 用 Direct2D 绘制的 Win32 窗口；DirectWrite | Windows 10 1809+、Windows 11 | `nsh run`（Windows 上的默认目标） | 一个目录和一个 `.zip` |
| [Linux](https://native-shell.com/zh-CN/docs/linux.md) | GTK 4 控件；Pango | GTK 4.14+ | `nsh run`（Linux 上的默认目标） | 一个目录和一个 `.tar.gz` |

另外还有两个目标用于开发和本站、不用于发布，还有一个在规划中：

- **Mac Catalyst** 在 Mac 上用 iPhone 尺寸的窗口（390×844）运行 iOS 后端。它是 macOS 上 `nsh run` 的默认目标，因为不用启动模拟器，就能最快看到模块在手机上的样子。
- **Web**（[WebAssembly](https://native-shell.com/zh-CN/docs/web.md)）在浏览器里运行同一个引擎，用 DOM 绘制。本站的在线示例和 [Playground](/playground) 都由它驱动；它不是用来发布应用的目标。
- **GPUI** 是规划中的桌面后端，用姊妹项目 GPUI Kit 所基于的 [GPUI](https://gpui-kit.com) 绘制。它正在开发，还不是 nsh 的一部分；目前桌面上运行的是上面 macOS、Windows 和 Linux 的原生后端。

## 开发与打包

不传 `--target` 时，`nsh run` 选择本机的平台：macOS 上是 Mac Catalyst，Linux 上是 GTK 窗口，Windows 上是 Win32 窗口。手机要从电脑上连接：iOS 需要装有 Xcode 的 Mac，Android 可以在装有 Android SDK 的 macOS、Linux 或 Windows 上开发（[安装](https://native-shell.com/zh-CN/docs/installation.md#各平台可用的命令)）。

```sh
nsh run my-app --target macos      # 或 ios、android、windows、linux、catalyst
nsh package my-app --target macos  # 或 ios、ios-simulator、android、windows、linux
```

桌面后端只为运行它的机器构建：Mac 应用在 Mac 上打包，Windows 应用在 Windows 上打包，Linux 应用在 Linux 上打包。各目标的输出、签名和图标见[打包](https://native-shell.com/zh-CN/docs/packaging.md)。

## 嵌入原生应用

| 平台 | 宿主视图 | 发布形式 | 宿主语言 |
|---|---|---|---|
| iOS | `NshAppView`（一个 `UIView`） | `NativeShell.xcframework` | Swift |
| Android | `NshView`（一个 `FrameLayout`） | `nsh.aar` | Java 或 Kotlin |
| macOS | `AppView`（一个 `NSView`） | `nsh-platform-macos` crate | Rust |
| Windows | `AppView`（一个子窗口） | `nsh-platform-windows` crate | Rust |
| Linux | `AppView`（一个 GTK 控件） | `nsh-platform-linux` crate | Rust |

每个视图都是一个拥有独立虚拟机的引擎，一个应用可以同时显示多个。在每个平台上，宿主都可以注册自己的原生视图给模块使用（[原生组件](https://native-shell.com/zh-CN/docs/native-components.md)）。

> [!NOTE]
> 桌面宿主比移动端 SDK 更新。它们的 `AppView` 从应用自己的文件（或源代码）加载 bundle，使用默认限制；用 `NshTrust` 加载[签名包](https://native-shell.com/zh-CN/docs/signed-packages.md)，以及为每个视图设置限制和能力（[沙箱与能力](https://native-shell.com/zh-CN/docs/sandbox-and-capabilities.md)），目前只有 iOS 和 Android SDK 提供。桌面宿主是 nsh 仓库里的 Rust crate，还没有预编译的桌面 SDK。

## 为每个平台编写

应用的大部分代码不需要判断平台：元素、样式、布局和模块在各处行为一致。平台确实不同的地方，nsh 给它一个固定的位置（[平台特定代码](https://native-shell.com/zh-CN/docs/platform-specific.md)）：

- **平台专属属性**放在 `ios={{…}}`、`android={{…}}` 或 `desktop={{…}}`（macOS、Windows 和 Linux）里。
- **`Platform.select`** 按操作系统取值，也可以按 `mobile` 和 `desktop` 整体取值；`Platform.OS` 是 `"ios"`、`"android"`、`"macos"`、`"windows"` 或 `"linux"`。
- **输入跟随平台。** 手机上是触摸和软键盘；桌面上是鼠标、触控板和键盘。

[`nsh/ui/mobile`](https://native-shell.com/zh-CN/components.md) 的组件由 nsh 绘制，所以在桌面上也能运行，样子和在手机上一样。目前还没有桌面 UI 套件：桌面布局用基础元素（`View`、`Text`、`Scroll`、`List` 等）和 `Platform.select({ desktop: … })` 搭建，示例应用 gallery 的桌面布局就是这样做的。

每个后端都列出了它尚不支持的内容：[macOS](https://native-shell.com/zh-CN/docs/macos.md#macos-上的差异)、[Windows](https://native-shell.com/zh-CN/docs/windows.md#windows-上的差异)、[Linux](https://native-shell.com/zh-CN/docs/linux.md#linux-上的差异)。

## 另请参阅

- [快速开始](https://native-shell.com/zh-CN/docs/getting-started.md)：第一个模块，在每个平台上运行。
- [安装](https://native-shell.com/zh-CN/docs/installation.md)：每个平台需要的工具。
- [架构](https://native-shell.com/zh-CN/docs/architecture.md)：哪些部分共享，每个后端做什么。
