Search code examples
swiftxcodefirebasereact-nativereact-native-firebase

Installing React Native Firebase fails at compiling RingBuffer.swift


I am attempting to implement RNFB to my react-native project. for iOS the pods install just fine. However, when I run npm run iOS I get the following error and crash report:

❌  /Users/[Redacted]/Documents/GitHub/[Redacted]/ios/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/HeartbeatLogging/RingBuffer.swift:19:35: reference to generic type 'Array' requires arguments in <...>

  case outOfBoundsPush(pushIndex: Array.Index, endIndex: Array.Index)

I was able to find this article that was very recent and it appears to be what I'm looking for but I have absolutely no idea what it says... google translate helps a little bit but I do not know enough to be able to infer a solution.

honestly I do not really even need anything related to heartbeat from firebase. I just need to use the Firebase Analytics and Google Analytics capabilities. But this package came with it and I don't see a way to tell it not to compile.

Regardless, I attempted to downgrade to a lower version of RNFB, I believe I it was version 15.4.0 -> 15.0.0 to see if maybe the new package was the problem but I still get the same errors.

I tried modifying the RingBuffer.swift file... but the file is read-only.

This issue is happening in other FirebaseCore/Internal files...

The following build commands failed:
    CompileSwiftSources normal x86_64 com.apple.xcode.tools.swift.compiler
    CompileSwift normal x86_64 /Users/[Redacted]/Documents/GitHub/[Redacted]/ios/Pods/FirebaseCoreInternal/[Redacted]/Internal/Sources/HeartbeatLogging/HeartbeatController.swift
    CompileSwift normal x86_64 /Users/[Redacted]/Documents/GitHub/[Redacted]/ios/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsBundle.swift
    CompileSwift normal x86_64 /Users/[Redacted]/Documents/GitHub/[Redacted]/ios/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsPayload.swift
    CompileSwift normal x86_64 /Users/[Redacted]/Documents/GitHub/[Redacted]/ios/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/HeartbeatLogging/RingBuffer.swift

here is my package.json file

   "main": "index.js",
   "scripts": {
      "android": "react-native run-android",
      "ios": "react-native run-ios",
      "web": "expo start --web",
      "start": "react-native start",
      "test": "jest",
      "debug-build-android": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res",
      "build-android": "./android/gradlew ./android/assembleRelease"
   },
   "dependencies": {
      "@react-native-async-storage/async-storage": "^1.13.4",
      "@react-native-community/masked-view": "0.1.10",
      "@react-native-community/netinfo": "^5.9.9",
      "@react-native-firebase/app": "^15.0.0",
      "@react-navigation/bottom-tabs": "^5.11.2",
      "@react-navigation/drawer": "^5.11.4",
      "@react-navigation/native": "^5.8.10",
      "@react-navigation/stack": "^5.12.8",
      "axios": "^0.21.1",
      "expo": "~40.0.0",
      "expo-app-loading": "1.0.3",
      "expo-asset": "~8.2.1",
      "expo-blur": "~8.2.2",
      "expo-file-system": "~9.3.0",
      "expo-gl": "^9.2.0",
      "expo-keep-awake": "~8.4.0",
      "expo-screen-orientation": "^3.3.0",
      "expo-splash-screen": "~0.8.1",
      "expo-three": "^5.5.1",
      "expo-updates": "~0.4.0",
      "expo-web-browser": "~8.6.0",
      "immutability-helper": "^3.1.1",
      "lodash.throttle": "^4.1.1",
      "react": "16.13.1",
      "react-dom": "16.13.1",
      "react-native": "~0.63.4",
      "react-native-background-downloader": "^2.3.4",
      "react-native-base64": "^0.2.1",
      "react-native-elements": "3.4.1",
      "react-native-fast-image": "^8.3.4",
      "react-native-gesture-handler": "~1.8.0",
      "react-native-maps": "^0.27.1",
      "react-native-reanimated": "~1.13.0",
      "react-native-render-html": "^5.0.1",
      "react-native-safe-area-context": "^3.1.9",
      "react-native-screens": "~2.15.0",
      "react-native-toast-message": "1.4.9",
      "react-native-unimodules": "~0.12.0",
      "react-native-video": "^5.2.0",
      "react-native-view-pdf": "^0.13.2",
      "react-native-webview": "11.0.0",
      "react-native-zip-archive": "^6.0.2",
      "react-navigation-header-buttons": "^7.0.1",
      "react-redux": "^7.2.2",
      "react-three-fiber": "^5.3.21",
      "realm": "^10.4.0",
      "redux": "^4.0.5",
      "redux-devtools-extension": "^2.13.9",
      "redux-persist": "^6.0.0",
      "redux-thunk": "^2.3.0",
      "three": "0.123.0"
   },
   "devDependencies": {
      "@babel/core": "~7.9.0",
      "@testing-library/react-native": "^7.2.0",
      "@types/jest": "^26.0.19",
      "@types/lodash.throttle": "^4.1.6",
      "@types/react": "^17.0.0",
      "@types/react-native": "^0.63.40",
      "@types/react-native-background-downloader": "^2.3.3",
      "@types/react-native-base64": "^0.2.0",
      "@types/react-native-video": "^5.0.10",
      "@types/react-redux": "^7.1.14",
      "@types/react-test-renderer": "^17.0.0",
      "@types/redux-mock-store": "^1.0.3",
      "@types/three": "^0.125.3",
      "babel-jest": "^25.2.6",
      "jest": "~25.2.6",
      "jest-expo": "^42.1.0",
      "react-test-renderer": "~16.13.1",
      "redux-mock-store": "^1.5.4",
      "ts-node": "^10.2.1",
      "typescript": "^4.1.3"
   },
   "jest": {
      "preset": "jest-expo"
   },
   "private": true,
   "version": "1.0.1"
}

here is my pod file

$RNFirebaseAsStaticFramework = true #firebase requires static frameworkds
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/react-native-unimodules/cocoapods.rb'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '11.0'

target '[Redacted]' do
  use_unimodules!
  config = use_native_modules!

  use_react_native!(:path => config["reactNativePath"])
  
  # react native firebase requires frameworks...
  use_frameworks!

  # Enables Flipper.
  #
  # Note that if you have use_frameworks! enabled, Flipper will not work and
  # you should disable these next few lines.
  # use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
  post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
       config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
       config.build_settings['SWIFT_VERSION'] = '5.0'
      end
     end
    flipper_post_install(installer)

  end
end

Xcode Version : Version 13.4.1 (13F100)

some lines have been removed for anonymity.


Solution

  • Firebase's minimum supported Swift Version is 5.3 - so the override in the Podfile's post_install script may be the issue. Try deleting or updating config.build_settings['SWIFT_VERSION'] = '5.0'