Update from SDK 28 to 29 fails on deployment to iOS simulator


#1

I have an app running successfully on the iOS simulator, SDK28 with all the appropriate versioning and configs.

After upgrading to 29, the app builds successfully in Xcode. Once it starts running on the simulator it fails with the following backtrace. This failure occurs before the javascipt is loaded - the same things happens whether or not the metro bundler is running. I am not currently using any custom native modules. I am having a hard time finding any information about this error online and could use some help debugging it.

* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x00000001186be23e libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x0000000118711c1c libsystem_pthread.dylib`pthread_kill + 285
    frame #2: 0x000000011832ec97 libsystem_c.dylib`abort + 127
    frame #3: 0x0000000117d52e6f libc++abi.dylib`abort_message + 245
    frame #4: 0x0000000117d5300b libc++abi.dylib`default_terminate_handler() + 265
    frame #5: 0x0000000115d5e2ae libobjc.A.dylib`_objc_terminate() + 97
    frame #6: 0x0000000117d700ae libc++abi.dylib`std::__terminate(void (*)()) + 8
    frame #7: 0x0000000117d70123 libc++abi.dylib`std::terminate() + 51
    frame #8: 0x0000000115d5e233 libobjc.A.dylib`objc_terminate + 9
    frame #9: 0x0000000117e75800 libdispatch.dylib`_dispatch_client_callout + 28
    frame #10: 0x0000000117e7adb8 libdispatch.dylib`_dispatch_block_invoke_direct + 592
    frame #11: 0x000000011c881470 FrontBoardServices`__FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
    frame #12: 0x000000011c88112e FrontBoardServices`-[FBSSerialQueue _performNext] + 439
    frame #13: 0x000000011c88168e FrontBoardServices`-[FBSSerialQueue _performNextFromRunLoopSource] + 45
    frame #14: 0x0000000117183bb1 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #15: 0x00000001171684af CoreFoundation`__CFRunLoopDoSources0 + 271
    frame #16: 0x0000000117167a6f CoreFoundation`__CFRunLoopRun + 1263
    frame #17: 0x000000011716730b CoreFoundation`CFRunLoopRunSpecific + 635
    frame #18: 0x000000011965da73 GraphicsServices`GSEventRunModal + 62
    frame #19: 0x00000001130c6057 UIKit`UIApplicationMain + 159
  * frame #20: 0x000000010b44a3cf ping`main(argc=1, argv=0x00007ffee47b52b0) at main.m:8
    frame #21: 0x0000000117ef2955 libdyld.dylib`start + 1

Here are my diagnostics

  Expo CLI 2.10.1 environment info:
    System:
      OS: macOS 10.14.3
      Shell: 3.2.57 - /bin/bash
    Binaries:
      Node: 10.15.1 - /usr/local/bin/node
      Yarn: 1.13.0 - /usr/local/bin/yarn
      npm: 6.4.1 - /usr/local/bin/npm
      Watchman: 4.9.0 - /usr/local/bin/watchman
    IDEs:
      Android Studio: 3.3 AI-182.5107.16.33.5264788
      Xcode: 9.4.1/9F2000 - /usr/bin/xcodebuild
    npmPackages:
      expo: ^29.0.0 => 29.0.1 
      react: 16.3.1 => 16.3.1 
      react-native: https://github.com/expo/react-native/archive/sdk-29.0.0.tar.gz => 0.55.4 
      react-navigation: ~2.9.3 => 2.9.3 
    npmGlobalPackages:
      expo-cli: 2.10.1

Since this seems like an issue with the native code, here’s my podfile, which is a copy of this (provided in the upgrade guide) updated to reflect my project name, and some changes to node_modules paths and the case of some of the package names to resolve known issues.

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'

target 'ping' do
  pod 'ExpoKit',
    :git => "http://github.com/expo/expo.git",
    :tag => "ios/2.7.8",
    :subspecs => [
      "Core"
    ],
    :inhibit_warnings => true
  pod 'EXGL',
    :path => "../node_modules/expo-gl/ios",
    :inhibit_warnings => true
  pod 'EXCore',
    :path => "../node_modules/expo-core/ios",
    :inhibit_warnings => true
  pod 'EXCamera',
    :path => "../node_modules/expo-camera/ios",
    :inhibit_warnings => true
  pod 'EXSensors',
    :path => "../node_modules/expo-sensors/ios",
    :inhibit_warnings => true
  pod 'EXConstants',
    :path => "../node_modules/expo-constants/ios",
    :inhibit_warnings => true
  pod 'EXFileSystem',
    :path => "../node_modules/expo-file-system/ios",
    :inhibit_warnings => true
  pod 'EXPermissions',
    :path => "../node_modules/expo-permissions/ios",
    :inhibit_warnings => true
  pod 'EXCameraInterface',
    :path => "../node_modules/expo-camera-interface/ios",
    :inhibit_warnings => true
  pod 'EXSensorsInterface',
    :path => "../node_modules/expo-sensors-interface/ios",
    :inhibit_warnings => true
  pod 'EXConstantsInterface',
    :path => "../node_modules/expo-constants-interface/ios",
    :inhibit_warnings => true
  pod 'EXReactNativeAdapter',
    :path => "../node_modules/expo-react-native-adapter/ios",
    :inhibit_warnings => true
  pod 'EXFileSystemInterface',
    :path => "../node_modules/expo-file-system-interface/ios",
    :inhibit_warnings => true
  pod 'EXPermissionsInterface',
    :path => "../node_modules/expo-permissions-interface/ios",
    :inhibit_warnings => true
  pod 'EXFaceDetectorInterface',
    :path => "../node_modules/expo-face-detector-interface/ios",
    :inhibit_warnings => true
  pod 'EXFaceDetector',
    :path => "../node_modules/expo-face-detector/ios",
    :inhibit_warnings => true
  pod 'EXSMS',
    :path => "../node_modules/expo-sms/ios",
    :inhibit_warnings => true
  pod 'EXGL-CPP',
    :path => "../node_modules/expo-gl-cpp/cpp",
    :inhibit_warnings => true

  pod 'React',
    :path => "../node_modules/react-native",
    :inhibit_warnings => true,
    :subspecs => [
      "Core",
      "ART",
      "RCTActionSheet",
      "RCTAnimation",
      "RCTCameraRoll",
      "RCTGeolocation",
      "RCTImage",
      "RCTNetwork",
      "RCTText",
      "RCTVibration",
      "RCTWebSocket",
      "DevSupport",
      "CxxBridge"
    ]
  pod 'yoga',
    :path => "../node_modules/react-native/ReactCommon/yoga",
    :inhibit_warnings => true
  pod 'DoubleConversion',
    :podspec => "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec",
    :inhibit_warnings => true
  pod 'Folly',
    :podspec => "../node_modules/react-native/third-party-podspecs/Folly.podspec",
    :inhibit_warnings => true
  pod 'glog',
    :podspec => "../node_modules/react-native/third-party-podspecs/glog.podspec",
    :inhibit_warnings => true


  post_install do |installer|
    installer.pods_project.main_group.tab_width = '2';
    installer.pods_project.main_group.indent_width = '2';

    installer.pod_targets.each do |target|

    if target.pod_name == 'expokit'
      target.native_target.build_configurations.each do |config|
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'EX_DETACHED=1'
        
        # needed for GoogleMaps 2.x
        config.build_settings['FRAMEWORK_SEARCH_PATHS'] ||= []
        config.build_settings['FRAMEWORK_SEARCH_PATHS'] << '${PODS_ROOT}/GoogleMaps/Base/Frameworks'
        config.build_settings['FRAMEWORK_SEARCH_PATHS'] << '${PODS_ROOT}/GoogleMaps/Maps/Frameworks'
      end
    end


    if ['amplitude-ios','analytics','appauth','branch','cocoalumberjack','fbsdkcorekit','fbsdkloginkit','fbsdksharekit','gpuimage','jkbiginteger2'].include? target.pod_name
      target.native_target.build_configurations.each do |config|
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
      end
    end
    # Can't specify this in the React podspec because we need
    # to use those podspecs for detached projects which don't reference ExponentCPP.
    if target.pod_name.start_with?('react')
      target.native_target.build_configurations.each do |config|
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
        config.build_settings['HEADER_SEARCH_PATHS'] ||= ['$(inherited)']
      end
    end
    # Build React Native with RCT_DEV enabled
    next unless target.pod_name == 'react'
    target.native_target.build_configurations.each do |config|
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'RCT_DEV=1'
    end

    end
  end
end

I have walked through the upgrade multiple times all with the same error, tried upgrading to newer SDKs, updated node modules and pods, and done some research on what looks like the culprit, FrontBoardServices. The only reference to this I can find anywhere is in react-native-sentry (version 0.36.0), a dependency of sentry-expo (v 1.9.0). Although I doubt this is the culprit, I removed all reference to sentry in the app, including the package, rebuilt etc., same problem.

Not sure what to do for next steps, any help is very much appreciated!