额外平台支持

编辑

了解如何为 macOS 和 tvOS 平台添加支持。


Expo Modules API 为 Android 和 iOS 提供了高级支持。然而,由于所有 Apple 平台都基于相同的基础并使用相同的编程语言,因此在 Expo 模块中针对其他 Out-of-Tree 平台 是可能的。

目前,仅支持 macOStvOS 平台。本指南将指导您添加对这些平台的支持。

1

expo-module.config.json 中使用 "apple" 平台

为了无缝支持其他 Apple 平台,Expo SDK 引入了一个通用的 "apple" 平台,以指示 autolinking 模块可以支持任何 Apple 平台,并且在特定 CocoaPods 目标上链接模块的决定转移到 podspec。如果您之前使用过 "ios",可以安全替换为:

expo-module.config.json
{ - "platforms": ["ios"], - "ios": { - "modules": ["MyModule"] - } + "platforms": ["apple"], + "apple": { + "modules": ["MyModule"] + } }

2

更新 podspec 以声明对其他平台的支持

模块的 podspec 需要更新受支持平台的列表。否则,CocoaPods 将无法在其他平台的目标上安装 pod。如第一步所述,规范的这一部分是当模块配置为通用的 "apple" 平台时,autolinking 的真实来源。

Module's podspec
- s.platform = :ios, '13.4' + s.platforms = { + :ios => '13.4', + :tvos => '13.4', + :osx => '10.15' + }

对 podspec 的任何更改都需要运行 pod install 才能生效。

3

在应用中设置 react-native-macosreact-native-tvos

如果您正在编写本地模块,并且您的应用已设置,可以跳过此步骤。否则,如果您正在编写独立的(非本地)模块,则需要设置您的应用或示例应用。

4

审查使用在这些平台上不支持的 API 的代码

平台 API 可能在 Apple 平台之间有所不同。最明显的区别来自于依赖不同的 UI 框架 — iOS/tvOS 上的 UIKit 和 macOS 上的 AppKit

react-native-macosexpo-modules-core 都提供别名和填充程序,以引用 macOS 目标上的 UIKit 类(例如,UIViewNSView 的别名,UIApplicationNSApplication 的别名),但通常对于以 iOS 为主的库来说,直接支持其他平台是不够的。您可能需要编写有条件编译的代码,根据平台使用不同的实现。

为此,使用 Swift 编译器指令和 os 条件,当我们的应用为特定平台构建时,包含给定的代码块。结合 #if#else 指令,可以在跨平台代码中设置特定于平台的分支。

#if os(iOS) // iOS 实现 #elseif os(macOS) // macOS 实现 #elseif os(tvOS) // tvOS 实现 #endif

您的模块现在可以在 Out-of-Tree 平台上使用。