Home > other >  Installing React Native Firebase fails at compiling RingBuffer.swift
Installing React Native Firebase fails at compiling RingBuffer.swift

Time:09-01

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.

CodePudding user response:

I was able to fix this compilation error by overwriting the specified pod dependency .swift file with modifications to the following code block

//dependency errors at this point in the file
case outOfBoundsPush(pushIndex: Array.Index, endIndex: Array.Index) 
//adding a type definition for the array fixes compilation error
case outOfBoundsPush(pushIndex: Array<Any>.Index, endIndex: Array<Any>.Index)

now if only I knew where to report the pod file discrepancy. Or if anyone would like to tell me why the pod file is packaged improperly for my compiler to understand?

CodePudding user response:

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'

  • Related