额外平台支持
编辑
了解如何为 macOS 和 tvOS 平台添加支持。
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",可以安全替换为:
{ - "platforms": ["ios"], - "ios": { - "modules": ["MyModule"] - } + "platforms": ["apple"], + "apple": { + "modules": ["MyModule"] + } }
2
3
在应用中设置 react-native-macos 或 react-native-tvos
如果您正在编写本地模块,并且您的应用已设置,可以跳过此步骤。否则,如果您正在编写独立的(非本地)模块,则需要设置您的应用或示例应用。
- 对于 macOS:请遵循
react-native-macos文档中的官方 安装 macOS 的 React Native 指南。 - 对于 tvOS:请遵循
react-native-tvos存储库中的说明。如果您正在构建 Expo 应用,还应遵循 构建 Expo 应用用于 TV 指南 中的说明。
4
审查使用在这些平台上不支持的 API 的代码
平台 API 可能在 Apple 平台之间有所不同。最明显的区别来自于依赖不同的 UI 框架 — iOS/tvOS 上的 UIKit 和 macOS 上的 AppKit。
react-native-macos 和 expo-modules-core 都提供别名和填充程序,以引用 macOS 目标上的 UIKit 类(例如,UIView 是 NSView 的别名,UIApplication 是 NSApplication 的别名),但通常对于以 iOS 为主的库来说,直接支持其他平台是不够的。您可能需要编写有条件编译的代码,根据平台使用不同的实现。
为此,使用 Swift 编译器指令和 os 条件,当我们的应用为特定平台构建时,包含给定的代码块。结合 #if 和 #else 指令,可以在跨平台代码中设置特定于平台的分支。
#if os(iOS) // iOS 实现 #elseif os(macOS) // macOS 实现 #elseif os(tvOS) // tvOS 实现 #endif
您的模块现在可以在 Out-of-Tree 平台上使用。