Xcode 11に更新後、既存のReact Nativeアプリが実行時エラーで起動しなくなりましたが、以下の方法で対処して起動できました。
Xcodeから実行して、実行時エラーが出た場合 (1)
以下の実行時エラーが出た場合の対応を記します。
Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated."
以下のコマンドで、シミュレータの設定をしてください。
xcrun simctl spawn booted log config --mode "level:off" --subsystem com.apple.CoreTelephony
Xcodeから実行して、実行時エラーが出た場合 (2)
以下の実行時エラーが出た場合の対応を記します。
[error][tid:main][RCTModuleMethod.mm:375] Unknown argument type '__attribute__' in method -[RCTAppState getCurrentAppState:error:]. Extend RCTConvert to support this type.
react-nativeを0.59.9以上に更新してください。
react-nativeを更新したくない場合は、node_modules/react-native/React/Base/RCTModuleMethod.mm
を直接書き換えてください。(公式リポジトリでの修正はこちら)
static BOOL RCTParseUnused(const char **input)
{
return RCTReadString(input, "__attribute__((unused))") ||
RCTReadString(input, "__attribute__((__unused__))") || // この行を追加
RCTReadString(input, "__unused");
}
react-native コマンドからシミュレータを起動できない場合
例えば以下のように、シミュレータを起動できなかった場合の対応を記します。
$ react-native run-ios --simulator "iPad (5th generation)"
Found Xcode project YourProject.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'
Could not find iPad (5th generation) simulator
Error: Could not find iPad (5th generation) simulator
at resolve (/Users/YourName/Documents/YourProject/node_modules/react-native/local-cli/runIOS/runIOS.js:149:13)
at new Promise (<anonymous>)
at runOnSimulator (/Users/YourName/Documents/YourProject/node_modules/react-native/local-cli/runIOS/runIOS.js:134:10)
at Object.runIOS [as func] (/Users/YourName/Documents/YourProject/node_modules/react-native/local-cli/runIOS/runIOS.js:106:12)
at Promise.resolve.then (/Users/YourName/Documents/YourProject/node_modules/react-native/local-cli/cliEntry.js:117:22)
node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js
のfunction findMatchingSimulator(simulators, simulatorString)
内を、以下のように修正してください。
if (!version.startsWith('com.apple.CoreSimulator.SimRuntime.iOS') && !version.startsWith('com.apple.CoreSimulator.SimRuntime.tvOS')) {
// if (!version.startsWith('iOS') && !version.startsWith('tvOS')) { この行を修正
simulator.isAvailable !== true
// simulator.isAvailable !== 'YES' この行を修正