You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native升级后tvOS编译报错:'UIKeyboardDidShowNotification'在tvOS不可用(来自react-native-safe-area-context)

React Native升级后tvOS编译报错:'UIKeyboardDidShowNotification'在tvOS不可用(来自react-native-safe-area-context)

嗨,我之前也碰到过类似的tvOS编译问题,刚好可以给你几个可行的解决方案:

解决方案1:升级react-native-safe-area-context到兼容版本

首先建议你检查一下react-native-safe-area-context的最新版本,看看官方是否已经修复了tvOS下的这个兼容性问题。你可以在项目根目录运行以下命令升级到最新稳定版:

npm update react-native-safe-area-context
# 或者用yarn
yarn upgrade react-native-safe-area-context

升级完成后重新尝试编译,很多时候这类平台兼容问题会在后续版本中被官方修复。

解决方案2:手动修改依赖代码(临时修复)

如果暂时不想升级或者最新版本还没修复,你可以手动修改react-native-safe-area-context的iOS源码来规避这个问题:

  1. 打开项目中的/Repo/node_modules/react-native-safe-area-context/ios/RNCSafeAreaProvider.m文件
  2. 找到注册键盘通知的代码块(就是报错的第18行附近),给这些代码加上tvOS的条件编译判断:
#if !TARGET_OS_TV
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
#endif
  1. 同时别忘了找到移除这些通知观察者的代码(通常在dealloc或者viewWillDisappear方法里),同样加上#if !TARGET_OS_TV的条件包裹
  2. 保存文件后重新在Xcode中编译项目

解决方案3:用patch-package持久化修改

手动修改node_modules的问题是,下次执行npm install或者yarn install时修改会被覆盖,所以可以用patch-package来把这个修改做成持久化补丁:

  1. 先安装patch-package:
npm install patch-package --save-dev
# 或者yarn
yarn add patch-package --dev
  1. 按照解决方案2的步骤修改完RNCSafeAreaProvider.m文件后,运行以下命令生成补丁:
npx patch-package react-native-safe-area-context
  1. 项目根目录会生成一个patches文件夹,里面包含你的修改补丁,把这个文件夹提交到版本控制中
  2. 之后团队其他成员安装依赖时,补丁会自动被应用,不用再手动修改node_modules

备注:内容来源于stack exchange,提问作者Mansi Laad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:04:34