# 使用 RoboVM 的 iOS / iPadOS

> RoboVM 工具链 (AOT)、IOSLauncher、Info.plist 以及 WKWebView 的敏感点。

Source: https://crossfly.dev/zh/docs/platforms/ios — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# iOS / iPadOS (RoboVM) 🍎

iOS 目标平台需要 **macOS + Xcode**。**RoboVM** 工具链执行 AOT（Java → 原生 ARM 代码）。

## 运行
```bash
gradlew :ios:launchIPhoneSimulator
```
`IOSLauncher` 创建应用：`new IOSApplication(new Main(true, getCommandline()), configuration)`。
`Device.platform` 将为 `IPHONE` 或 `IPAD`。

## `Info.plist`——权限和元数据
与 Android（运行时权限）不同，在 iOS 上**使用键要写入 `Info.plist`**：
- **相机**、**定位**、**Bluetooth**、**麦克风**的使用说明（必需，否则
  应用会被拒绝）；
- 图标和*启动画面*（launch screen）。

## ⚠️ 敏感点
- **`WKWebView`**：`evaluateJavaScript` **受限**——`WebContainer` 的 JS↔Java 桥比
  Android/桌面端更受限。
- 在**真机**上运行需要 **Apple 开发者账号** + *provisioning profile*（模拟器不需要）。
- AOT 构建**很慢**——这也是应该在[桌面端](/docs/platforms/desktop-lwjgl3)开发、只在 iOS 上
  验证的又一个理由。

## 最佳实践
- 提交前在 `Info.plist` 中填写**所有**使用键（因此被拒绝很常见）。
- 尽早在**模拟器**上测试；把真机留给最终验证（provisioning）。

## 常见错误
- 在 `Info.plist` 中缺少某个使用键（访问该功能时崩溃，或在 App Store 被拒绝）。
- 假设 `WKWebView` 中的 `evaluateJavaScript` 是完整的（它是受限的）。

## 另请参阅
- [构建与分发](/docs/platforms/building-and-releasing)
