M1 Pro构建RN iOS时jw-media-player报Expected a type错误
问题
- React Native iOS构建阶段抛出
Expected a type类型错误,经定位报错来源为第三方依赖react-native-jw-media-player - 同项目此前在M1芯片Mac mini设备上可正常构建运行,未出现过同类报错
- 当前开发环境:
- 设备:Macbook M1 Pro
- Xcode版本:13.4.1
- 错误截图:

解决方案
报错核心原因有两点:一是Xcode 13.4.1版本收紧了Objective-C头文件的类型检查规则,react-native-jw-media-player部分头文件未对依赖的JWPlayer类型做前置声明,触发类型识别失败;二是M1 Pro芯片的编译架构兼容配置缺失,导致依赖库编译时头文件搜索路径异常。按以下步骤操作即可修复:
- 补全库头文件的前置类型声明
- 打开iOS工程下的
Pods/Development Pods/react-native-jw-media-player目录,找到RNJWPlayerView.h文件 - 在
#import <React/RCTView.h>代码行下方添加两行前置声明:
@class JWPlayerController; @class JWError;
- 打开同目录下的
RNJWPlayerNativeView.h文件,检查所有JWPlayer相关类型的引用,缺失前置声明的按上述格式补上即可。
- 更新Podfile架构与路径配置
打开iOS根目录的Podfile文件,在post_install钩子中添加如下配置:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| # 适配M1系列芯片模拟器/真机编译架构 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = '' config.build_settings['VALID_ARCHS'] = 'arm64 armv7 x86_64' # 给jw播放器配置正确的头文件搜索路径 if target.name == 'react-native-jw-media-player' config.build_settings['HEADER_SEARCH_PATHS'] ||= ['$(inherited)', '${PODS_ROOT}/JWPlayer_iOS_SDK'] end end end end
- 清理缓存重新编译
在终端执行以下命令重新安装依赖:
cd ios pod deintegrate pod install --repo-update cd ..
打开Xcode后按Cmd + Shift + K清理编译缓存,删除项目对应的Derived Data文件夹后重新执行构建即可。
内容的提问来源于stack exchange,提问作者Harish Jangra
相关产品推荐
相关产品推荐

