额外的平台支持

编辑页面

了解如何为 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 平台 是可行的。

目前,仅支持 macOStvOS 平台。本指南将引导你为这些平台添加支持。

1

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

为了为其他 Apple 平台提供无缝支持,Expo SDK 引入了一个通用的 "apple" 平台,用于告诉 autolinking 该模块可能支持任意 Apple 平台,以及是否在特定的 CocoaPods 目标中链接该模块则移至 podspec 中处理。如果你之前使用的是 "ios",可以安全地将其替换为:

expo-module.config.json
1 "platforms": ["ios"],
2 "ios": {
3 "modules": ["MyModule"]
4 }
1 "platforms": ["apple"],
2 "apple": {
3 "modules": ["MyModule"]
4 }
55}

2

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

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

YourModule.podspec
1 s.platform = :ios, '13.4'
1 s.platforms = {
2 :ios => '13.4',
3 :tvos => '13.4',
4 :osx => '10.15'
5 }

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

3

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

如果你正在编写本地模块,并且应用已经完成设置,则可以跳过此步骤。否则,你需要为应用或示例应用完成设置,前提是你正在编写一个独立的(非本地)模块。

4

检查使用了这些平台不支持的 API 的代码

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

react-native-macosexpo-modules-core 都提供了别名和 polyfill,用于在 macOS 目标中引用 UIKit 类(例如,UIViewNSView 的别名,UIApplicationNSApplication 的别名),但这通常不足以让 iOS 优先的库开箱即用地支持其他平台。你可能需要编写条件编译代码,根据平台使用不同的实现。

为此,请使用带有 os 条件的 Swift 编译器指令,当我们的应用为特定平台构建时,它会包含相应的一段代码。结合 #if#else 指令,你可以在跨平台代码中设置特定于平台的分支。

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

你的模块现在已经可以在 Out-of-Tree 平台上使用了。