Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🔥[🐛] Crashlytics throws "No known class method for selector" error on Expo #8127

Closed
2 of 7 tasks
thisisgit opened this issue Nov 12, 2024 · 8 comments · Fixed by #8130
Closed
2 of 7 tasks

🔥[🐛] Crashlytics throws "No known class method for selector" error on Expo #8127

thisisgit opened this issue Nov 12, 2024 · 8 comments · Fixed by #8130
Labels
impact: build-error Behaviour causing build failure Needs Attention platform: ios plugin: app-core Firebase Apps / Core internals. plugin: crashlytics Firebase Crashlytics

Comments

@thisisgit
Copy link

Issue

Hi, after updating my firebase to the latest version(21.4.0) to support XCode 16, a new build error from Crashlytics popped up:

스크린샷 2024-11-12 오후 2 22 09

I found 2 closed issues related to this(#8065, #8101) but nothing helped so I'm opening a new one with more context.

I was able to reproduce it by creating a fresh expo project and installing firebase/app and crashlytics package:

  1. Create expo app w/ npx create-expo-app@latest (https://docs.expo.dev/get-started/create-a-project/)
  2. Install and setup dev client to install RNFB (https://docs.expo.dev/guides/local-app-development/#local-builds-with-expo-dev-client)
  3. Install firebase app and crashlytics w/ npx expo install @react-native-firebase/app @react-native-firebase/crashlytics
  4. Configure google services file/s and config plugins in app.json(https://rnfirebase.io/#configure-react-native-firebase-modules)
  5. Prebuild w/ npx expo prebuild --clean
  6. Either run npx expo run:ios or open xcode(open ios/yourproject.xcworkspace) and run
  7. Build fails with above error

I've checked package.json of react-native-firebase/app and firebase sdk version is well fixed to 11.4.0
스크린샷 2024-11-12 오후 2 44 23,

Podfile doesn't contain any version pin on firebase sdk such as $FirebaseSDKVersion = '11.4.0',

and Podfile.lock file also shows that 21.4.0 and 11.4.0 is installed
스크린샷 2024-11-12 오후 2 45 38

Then I found this comment, where dependencies:@[] got removed from 21.2.0.
I tried reverting that line back by modifying RNFBCrashlyticsInitProvider.m from node_modules and the error disappeared!
스크린샷 2024-11-12 오후 3 08 24
I don't understand the whole context but AFAIK that change was necessary to support firebase-ios-sdk v11?

Any idea if that revert is necessary or is there something I'm missing?


Project Files

Javascript

Click To Expand

package.json:

{
  "name": "test-firebase",
  "main": "expo-router/entry",
  "version": "1.0.0",
  "scripts": {
    "start": "expo start",
    "reset-project": "node ./scripts/reset-project.js",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "prebuild": "expo prebuild --clean",
    "web": "expo start --web",
    "test": "jest --watchAll",
    "lint": "expo lint"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@expo/vector-icons": "^14.0.2",
    "@react-native-firebase/app": "^21.4.0",
    "@react-native-firebase/crashlytics": "^21.4.0",
    "@react-navigation/native": "^6.0.2",
    "expo": "~51.0.28",
    "expo-build-properties": "~0.12.5",
    "expo-constants": "~16.0.2",
    "expo-dev-client": "~4.0.29",
    "expo-font": "~12.0.9",
    "expo-linking": "~6.3.1",
    "expo-router": "~3.5.23",
    "expo-splash-screen": "~0.27.5",
    "expo-status-bar": "~1.12.1",
    "expo-system-ui": "~3.0.7",
    "expo-web-browser": "~13.0.3",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "react-native": "0.74.5",
    "react-native-gesture-handler": "~2.16.1",
    "react-native-reanimated": "~3.10.1",
    "react-native-safe-area-context": "4.10.5",
    "react-native-screens": "3.31.1",
    "react-native-web": "~0.19.10"
  },
  "devDependencies": {
    "@babel/core": "^7.20.0",
    "@types/jest": "^29.5.12",
    "@types/react": "~18.2.45",
    "@types/react-test-renderer": "^18.0.7",
    "jest": "^29.2.1",
    "jest-expo": "~51.0.3",
    "react-test-renderer": "18.2.0",
    "typescript": "~5.3.3"
  },
  "private": true
}

firebase.json for react-native-firebase v6:

# N/A

iOS

Click To Expand

ios/Podfile:

  • I'm not using Pods
  • I'm using Pods and my Podfile looks like:
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")

require 'json'
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}

ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']

use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym
origin_autolinking_method = self.method(use_autolinking_method_symbol)
self.define_singleton_method(use_autolinking_method_symbol) do |*args|
  if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'
    Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)
    config_command = [
      'node',
      '--no-warnings',
      '--eval',
      'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))',
      'react-native-config',
      '--json',
      '--platform',
      'ios'
    ]
    origin_autolinking_method.call(config_command)
  else
    origin_autolinking_method.call()
  end
end

platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'
install! 'cocoapods',
  :deterministic_uuids => false

prepare_react_native_project!

target 'testfirebase' do
  use_expo_modules!
  config = use_native_modules!

  use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
  use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/..",
    :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',
  )

  post_install do |installer|
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false,
      :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',
    )

    # This is necessary for Xcode 14, because it signs resource bundles by default
    # when building for devices.
    installer.target_installation_results.pod_target_installation_results
      .each do |pod_name, target_installation_result|
      target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
        resource_bundle_target.build_configurations.each do |config|
          config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
        end
      end
    end
  end

  post_integrate do |installer|
    begin
      expo_patch_react_imports!(installer)
    rescue => e
      Pod::UI.warn e
    end
  end
end

AppDelegate.m:

#import "AppDelegate.h"
#import <Firebase/Firebase.h>

#import <React/RCTBundleURLProvider.h>
#import <React/RCTLinkingManager.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// @generated begin @react-native-firebase/app-didFinishLaunchingWithOptions - expo prebuild (DO NOT MODIFY) sync-ecd111c37e49fdd1ed6354203cd6b1e2a38cccda
[FIRApp configure];
// @generated end @react-native-firebase/app-didFinishLaunchingWithOptions
  self.moduleName = @"main";

  // You can add your custom initial props in the dictionary below.
  // They will be passed down to the ViewController used by React Native.
  self.initialProps = @{};

  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
  return [self bundleURL];
}

- (NSURL *)bundleURL
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

// Linking API
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
  return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
}

// Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
  BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
  return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
}

// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}

// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
  return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
}

// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
  return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}

@end


Environment

Click To Expand

react-native info output:

System:
  OS: macOS 15.1
  CPU: (10) arm64 Apple M1 Pro
  Memory: 128.47 MB / 16.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 20.10.0
    path: ~/.nvm/versions/node/v20.10.0/bin/node
  Yarn:
    version: 1.22.21
    path: ~/.nvm/versions/node/v20.10.0/bin/yarn
  npm:
    version: 10.5.2
    path: ~/.nvm/versions/node/v20.10.0/bin/npm
  Watchman:
    version: 4.9.0
    path: /usr/local/bin/watchman
Managers:
  CocoaPods:
    version: 1.16.2
    path: /usr/local/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 24.1
      - iOS 18.1
      - macOS 15.1
      - tvOS 18.1
      - visionOS 2.1
      - watchOS 11.1
  Android SDK: Not Found
IDEs:
  Android Studio: Not Found
  Xcode:
    version: 16.1/16B40
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 12.0.1
    path: /usr/bin/javac
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.74.5
    wanted: 0.74.5
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: true
  newArchEnabled: false
  • Platform that you're experiencing the issue on:
    • iOS
    • Android
    • iOS but have not tested behavior on Android
    • Android but have not tested behavior on iOS
    • Both
  • react-native-firebase version you're using that has this issue:
    • 21.4.0
  • Firebase module(s) you're using that has the issue:
    • Crashlytics
  • Are you using TypeScript?
    • Y


@mikehardy
Copy link
Collaborator

mikehardy commented Nov 12, 2024

If this fixed it:

I tried reverting that line back by modifying RNFBCrashlyticsInitProvider.m from node_modules and the error disappeared!

Then you are not actually compiling against the firebase-ios-sdk you think you are compiling against

It would be best if you posted text, but I am able to read your graphics at least.

The one you posted about your Podfile lockfile:

and Podfile.lock file also shows that 21.4.0 and 11.4.0 is installed

Does not show what you think it shows, that's an intermediate step showing some constraints in the tree, and that they will be met by 11.4.0 or anything below it

You want to see what it finally resolved to.

Try this line and see how it goes, your output should match this output (note: the one with the = sign is the final in-use resolution):

mike@isabela:~/work/invertase/react-native-firebase/tests/ios (firestore-getAggregateFromServer) % cat Podfile.lock |grep FirebaseCore |grep =
    - FirebaseCore (= 11.4.0)
    - FirebaseCore (= 11.4.0)
    - FirebaseCoreExtension (= 11.4.0)
    - FirebaseCore (= 11.4.0)
    - FirebaseCoreExtension (<= 11.4.0)
    - FirebaseCoreExtension (<= 11.4.0)

Your compilation error indicates that it will not. And you will have to determine the root cause of why - it will be project-specific, there will no change in this repository in response to the project-specific issue so it will not be actionable here unfortunately

@mikehardy mikehardy added resolution: user Issue with users code or an issue that should be directed to Stack Overflow or the Discord server. and removed type: bug New bug report Needs Attention labels Nov 12, 2024
@thisisgit
Copy link
Author

@mikehardy Hmm you're right. My bad, that was <= not =. This is what I get by running that command:

    - FirebaseCore (= 10.28.1)
    - FirebaseCoreExtension (<= 11.4.0)

And I guess this part of Podfile.lock needs to show 11.4.0 instead of 10.28.1 in my case?
스크린샷 2024-11-12 오후 10 18 59

I can now see that the problem isn't coming from crashlytics but from not being able to install 11.4.0 ios sdk.

Since I'm using npx expo prebuild --clean on every build, it cleans up native codes including Podfile.lock and generates them fresh every time. But then I'm wondering why Podfile.lock gets 10.28.1 instead of 11.4.0 while I have 21.4.0 firebase/app in node_modules?
스크린샷 2024-11-12 오후 10 27 49

I tried manually deleting Podfile.lock file and running pod install, it keeps on getting 10.28.1.

Can you give me any clue on where to dig at since I get the same result(10.28.1 being installed) even from fresh expo project w/ only firebase/app installed? I have no idea why cocoapods decides to install 10.28.1 instead of 11.4.0 when <=11.4.0 is mentioned.

Or from this part of Podfile.lock:
385155301-139da2f3-0fe7-47b0-a928-f918c1bd2ae4

is it possible to make Firebase/CoreOnly part to have = 11.4.0 not <= 11.4.0?

@mikehardy
Copy link
Collaborator

Github is a text medium, it would be possible to maybe give you an answer if you just included your Podfile.lock instead of those images which are incomplete, and impossible to copy/paste from etc. Images strongly discouraged.

But then I'm wondering why Podfile.lock gets 10.28.1 instead of 11.4.0 while I have 21.4.0 firebase/app in node_modules?

The simple (but unfortunately vague) answer is "one of your dependencies or your Podfile is pinning it at 10.28.1 somehow"

Examine your Podfile.lock and see who is depending on FirebaseCore at that version and why. Make sure you don't have a pin in your Podfile

With apologies, I need to emphasize this is not a problem in this repo it is project-specific. It is not actionable by us and we cannot extend unlimited support for all project-specific issues - I won't be able to help further on this one, but perhaps stackoverflow has similar issues with methods to determine why pod versions resolve to unexpected values

@thisisgit
Copy link
Author

Just in case other people with the same problem would see it, I'll share a link to Podfile.lock and re-paste Podfile here so that they can compare with theirs

Podfile
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")

require 'json'
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}

ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']

use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym
origin_autolinking_method = self.method(use_autolinking_method_symbol)
self.define_singleton_method(use_autolinking_method_symbol) do |*args|
  if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'
    Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)
    config_command = [
      'node',
      '--no-warnings',
      '--eval',
      'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))',
      'react-native-config',
      '--json',
      '--platform',
      'ios'
    ]
    origin_autolinking_method.call(config_command)
  else
    origin_autolinking_method.call()
  end
end

platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'
install! 'cocoapods',
  :deterministic_uuids => false

prepare_react_native_project!

target 'testfirebase' do
  use_expo_modules!
  config = use_native_modules!

  use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
  use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/..",
    :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',
  )

  post_install do |installer|
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false,
      :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',
    )

    # This is necessary for Xcode 14, because it signs resource bundles by default
    # when building for devices.
    installer.target_installation_results.pod_target_installation_results
      .each do |pod_name, target_installation_result|
      target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
        resource_bundle_target.build_configurations.each do |config|
          config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
        end
      end
    end
  end

  post_integrate do |installer|
    begin
      expo_patch_react_imports!(installer)
    rescue => e
      Pod::UI.warn e
    end
  end
end

From what I see until now, I can't find any dependencies or pin in Podfile.lock and Podfile. Since I created a fresh project and only installed firebase/app as its dependency, I actually don't know what more to suspect. Maybe it has to do something with cocoapods or expo?

I'll keep looking for a solution since I see that it is now a bigger problem to not being able to install 11.4.0 than not just being able to use crashlytics. I'll post my solution here once I find it.

@thisisgit
Copy link
Author

Found a fix:

  1. Go to ios directory (cd ios)
  2. Remove Podfile.lock file (rm -rf Podfile.lock)
  3. Run pod install --repo-update
  4. Check if Firebase versions in Podfile.lock are updated to 11.4.0. In case of my example, these lines from 280-287 should now show 11.4.0 instead of 10.28.1/10.28.0.
  5. If they're changed, it will always install 11.4.0 even if you delete and reinstall pods or run expo prebuild.

Then I got curious why it kept installing 10.28.1 until I ran pod install --repo-update, I asked gpt and here's his answer:

  1. Cached Podspecs and Local Podspec Repository:
    When you run pod install, CocoaPods typically uses a local, cached version of the specs repository (~/.cocoapods/repos) rather than fetching the latest versions from the central repo. This speeds up installs but means CocoaPods won’t necessarily know about newer versions unless you explicitly tell it to check for updates with pod install --repo-update. Since your last installed version was 10.28.1, CocoaPods continued to use it from the local cache.
  2. Dependency Version Resolution:
    Since the version constraint on Firebase/CoreOnly was <= 11.4.0, CocoaPods interpreted that as allowing any compatible version, and the cached version 10.28.1 satisfied that condition. Without --repo-update, CocoaPods simply resolved to the locally cached version rather than fetching the latest available version (11.4.0).
  3. Why It’s Now Resolving Correctly:
    After running pod install --repo-update, CocoaPods updated the local spec repository and now recognizes that 11.4.0 is available, which it can use as the maximum allowed version for Firebase/CoreOnly. With the updated local spec, pod install alone will now keep selecting 11.4.0 by default.

If that's true, then I'll be sticking to version 11.4.0 in the future updates unless I don't explicitly run pod install --repo-update.
Then wouldn't it be better to limit the version range from the podspec? As in from this line:

s.dependency 'Firebase/CoreOnly', "<= #{firebase_sdk_version}"

it is set to <=11.4.0, but since RNFB version 21.4.0 shouldn't allow versions under 11, it would be something like:

s.dependency 'Firebase/CoreOnly', '>= 11.0.0', "<= #{firebase_sdk_version}"

Would this solution be valid? @mikehardy

@mikehardy
Copy link
Collaborator

mikehardy commented Nov 13, 2024

Oh no - the law of unintended consequences has bitten me/us here, this is a module issue here and is not project-specific, I was wrong here:

there will no change in this repository in response to the project-specific issue so it will not be actionable here unfortunately

There was an upstream build error that affected everyone when firebase-ios-sdk 11.4.0 came out and it was quite messy because transitive deps were allowed to slip to higher versions, thus pulling in the new versions with errors instead of staying on the old versions. In response I made the change from specifying the version with no range to a '<=' in order to stop that:

d03ab42

I didn't realize that this would let old versions stay in place instead of upgrading but your analysis here makes it clear to me now. Thank you

Your proposed solution would fix your issue right now but is not quite sufficient as we sometimes adopt new APIs released in semver minor versions and we need people to go from (for example) 11.1.0 to 11.2.0 of firebase-ios-sdk in order for the APIs to exist.

I think I may need to do an = or a combo of `>=' and '<=' or whatever is the best way to express that. I'll experiment to find the correct style, and then I'll close this with an actual fix

@mikehardy mikehardy reopened this Nov 13, 2024
@mikehardy mikehardy added platform: ios impact: build-error Behaviour causing build failure plugin: app-core Firebase Apps / Core internals. plugin: crashlytics Firebase Crashlytics and removed resolution: user Issue with users code or an issue that should be directed to Stack Overflow or the Discord server. labels Nov 13, 2024
mikehardy added a commit that referenced this issue Nov 13, 2024
This reverts commit d03ab42.

the cure was worse than the disease, see:
#8127

If we constrain deps to <=, old deps may be used which is invalid
If we constrain deps to =, then binary firestore-ios-sdk-frameworks does not resolve
If we constrain deps to ~> like FlutterFire it may work
However, we constrained this way for a long time without issue until one build break
that prompted this commit, and the ~> suffered the build break as well in FlutterFire

The break was fixed quickly and had a workaround, so revert appears to be the lesser of all evils
@mikehardy
Copy link
Collaborator

In the end a revert was the only thing that tested out correctly, which was a surprise.
I posted a PR that reverted my incorrect version constraint change and added some user guidance
This issue will close once that's merged
Thanks again for the persistence here and posting up all the details of your findings - helped me see this issue and fix it for everyone

mikehardy added a commit that referenced this issue Nov 13, 2024
This reverts commit d03ab42.

the cure was worse than the disease, see:
#8127

If we constrain deps to <=, old deps may be used which is invalid
If we constrain deps to =, then binary firestore-ios-sdk-frameworks does not resolve
If we constrain deps to ~> like FlutterFire it may work
However, we constrained this way for a long time without issue until one build break
that prompted this commit, and the ~> suffered the build break as well in FlutterFire

The break was fixed quickly and had a workaround, so revert appears to be the lesser of all evils
mikehardy added a commit that referenced this issue Nov 13, 2024
This reverts commit d03ab42.

the cure was worse than the disease, see:
#8127

If we constrain deps to <=, old deps may be used which is invalid
If we constrain deps to =, then binary firestore-ios-sdk-frameworks does not resolve
If we constrain deps to ~> like FlutterFire it may work
However, we constrained this way for a long time without issue until one build break
that prompted this commit, and the ~> suffered the build break as well in FlutterFire

The break was fixed quickly and had a workaround, so revert appears to be the lesser of all evils
@thisisgit
Copy link
Author

@mikehardy Glad that this helped. Thanks for your time on resolving the issue!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
impact: build-error Behaviour causing build failure Needs Attention platform: ios plugin: app-core Firebase Apps / Core internals. plugin: crashlytics Firebase Crashlytics
Projects
None yet
2 participants