更新Xcode11之后,启动react-native项目报错
前言
在更新Xcode11之后,会发现启动以前的react-native项目,会报错。但是之前的代码都已经上线了,应该不会出现逻辑问题的。经过排查问题主要是两个。
问题1:如果使用非Xcode启动RN项目报错
描述
一般情况下,比如我在Webstorm中启动react-native项目时,主要就是两步。
> npm start
> react-native run-ios
info Found Xcode project XXX.xcodeproj
CoreData: annotation: Failed to load optimized model at path '/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/InstrumentsPackaging.framework/Versions/A/Resources/XRPackageModel.momd/XRPackageModel 9.0.omo'
error Could not find iPhone X simulator. Run CLI with --verbose flag for more details.
以前都启动的好好的,怎么现在就报错了呢?
解决
应该是在Xcode11更新后,模拟器默认只安装了 iphone 8 / iphone 8 Plus / iphone 11 / iphone 11 Pro / iphone 11 Pro Max 这几款手机。
而react-native中,配置文件的地址/node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/runIOS.js
的 359 行,可以看到配置的如下:
options: [{
command: '--simulator [string]',
description: 'Explicitly set simulator to use. Optionally include iOS version between' + 'parenthesis at the end to match an exact version: "iPhone 6 (10.0)"',
default: 'iPhone X'
}
默认的启动项的 iphone x 不存在了。所以启动时需要我们手动的指定Xcode11中存在的模拟器类型即可。
react-native run-ios --simulator="iPhone 8" # 非全面屏
react-native run-ios --simulator="iPhone 11 Pro" # 全面屏
问题2:启动RN项目后进入RN页面报错
描述
在Xcode10版本创建的RN项目,整个程序都是好好地。但是在更新到Xcode11之后运行时,模拟器能起来,但是在进入RN页面时,却提示报错:Unknown argument type ‘_attribute_’ in method -[RCTAppState getCurrentAppState:error:]. Extend RCTConvert to support this type
。
这个问题就是由于Xcode11更新所引起的问题。
解决
打开/node_modules/react-native/React/Base/RCTModuleMethod.mm
文件。
然后修改其中的 RCTParseUnused
方法,为其增加一个新的判断条件 RCTReadString(input, "__attribute__((__unused__))") ||
// 修改后的结果如下
static BOOL RCTParseUnused(const char **input)
{
return RCTReadString(input, "__unused") ||
RCTReadString(input, "__attribute__((__unused__))") ||
RCTReadString(input, "__attribute__((unused))");
}
然后重新启动项目,就可以发现我们能够正常的进入到react-native的项目页面中了。