额外的平台支持
编辑页面
了解如何为 macOS 和 tvOS 平台添加支持。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
Expo Modules API 为 Android 和 iOS 提供了一流的支持。然而,由于所有 Apple 平台都基于相同的基础并使用相同的编程语言,因此在 Expo 模块中支持其他 Out-of-Tree 平台 是可行的。
目前,仅支持 macOS 和 tvOS 平台。本指南将引导你为这些平台添加支持。
1
在 expo-module.config.json 中使用 "apple" 平台
为了为其他 Apple 平台提供无缝支持,Expo SDK 引入了一个通用的 "apple" 平台,用于告诉 autolinking 该模块可能支持任意 Apple 平台,以及是否在特定的 CocoaPods 目标中链接该模块则移至 podspec 中处理。如果你之前使用的是 "ios",可以安全地将其替换为:
| 1 | "platforms": ["ios"], | |
| 2 | "ios": { | |
| 3 | "modules": ["MyModule"] | |
| 4 | } | |
| 1 | "platforms": ["apple"], | |
| 2 | "apple": { | |
| 3 | "modules": ["MyModule"] | |
| 4 | } | |
| 5 | 5 | } |
2
3
在应用中设置 react-native-macos 或 react-native-tvos
如果你正在编写本地模块,并且应用已经完成设置,则可以跳过此步骤。否则,你需要为应用或示例应用完成设置,前提是你正在编写一个独立的(非本地)模块。
- 对于 macOS:请参考
react-native-macos文档中的官方 Install React Native for macOS 指南。 - 对于 tvOS:请按照
react-native-tvos仓库中的说明进行操作。如果你正在构建 Expo 应用,还应参考 为 TV 构建 Expo 应用指南。
4
检查使用了这些平台不支持的 API 的代码
不同 Apple 平台之间的平台 API 可能有所差异。最明显的区别来自于依赖不同的 UI 框架 — iOS/tvOS 上使用 UIKit,而 macOS 上使用 AppKit。
react-native-macos 和 expo-modules-core 都提供了别名和 polyfill,用于在 macOS 目标中引用 UIKit 类(例如,UIView 是 NSView 的别名,UIApplication 是 NSApplication 的别名),但这通常不足以让 iOS 优先的库开箱即用地支持其他平台。你可能需要编写条件编译代码,根据平台使用不同的实现。
为此,请使用带有 os 条件的 Swift 编译器指令,当我们的应用为特定平台构建时,它会包含相应的一段代码。结合 #if 和 #else 指令,你可以在跨平台代码中设置特定于平台的分支。
#if os(iOS) // iOS 实现 #elseif os(macOS) // macOS 实现 #elseif os(tvOS) // tvOS 实现 #endif
你的模块现在已经可以在 Out-of-Tree 平台上使用了。