-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Open
Labels
blocked: customer-responseplatform: iosplugin: authenticationFirebase AuthenticationFirebase Authenticationtype: bugNew bug reportNew bug report
Description
Issue
I'm using auth in my Expo project. I have the plugin @react-native-firebase/auth
in my app.config.js, as advised by the documentation since the auth project has an app.plugin.js.
Every time I run npx expo prebuild
, it modifies my AppDelegate to add the following snippet to the openURL function. This is super annoying as I have to discard this change every time the command is run.
The snippet added:
// @generated begin @react-native-firebase/auth-openURL - expo prebuild (DO NOT MODIFY)
if url.host?.lowercased() == "firebaseauth" {
// invocations for Firebase Auth are handled elsewhere and should not be forwarded to Expo Router
return false
}
// @generated end @react-native-firebase/auth-openURL
The function to which the snippet is added: public override func application( _ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:] ) -> Bool {
Project Files
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'] = '0' if podfile_properties['newArchEnabled'] == 'false'
ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
platform :ios, podfile_properties['ios.deploymentTarget'] || '15.5'
install! 'cocoapods',
:deterministic_uuids => false
prepare_react_native_project!
pod 'FirebaseCore', :modular_headers => true
pod 'GoogleUtilities', '~> 8.1.0', :modular_headers => true
static_frameworks = [
"FirebaseStorage",
"FirebaseAuth",
"FirebaseAuthInterop",
"FirebaseAppCheckInterop",
"FirebaseCoreExtension",
"RecaptchaInterop"
]
pre_install do |installer|
installer.pod_targets.each do |pod|
if static_frameworks.include?(pod.name)
puts "Configuring #{pod.name} as static framework"
def pod.build_type
Pod::BuildType.new(:linkage => :static, :packaging => :framework)
end
end
end
end
target 'myapp' do
use_expo_modules!
if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'
config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"];
else
config_command = [
'npx',
'expo-modules-autolinking',
'react-native-config',
'--json',
'--platform',
'ios'
]
end
config = use_native_modules!(config_command)
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']
# $RNFirebaseAsStaticFramework = true
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
end
target 'NotificationServiceExtension' do
pod 'Firebase/Messaging'
end
AppDelegate.swift
:
import Expo
import Firebase
import FirebaseCore
import React
import ReactAppDependencyProvider
import Sentry
@UIApplicationMain
public class AppDelegate: ExpoAppDelegate, RNAppAuthAuthorizationFlowManager {
var window: UIWindow?
var reactNativeDelegate: ExpoReactNativeFactoryDelegate?
var reactNativeFactory: RCTReactNativeFactory?
public weak var authorizationFlowManagerDelegate:
RNAppAuthAuthorizationFlowManagerDelegate?
public override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication
.LaunchOptionsKey: Any]? = nil
) -> Bool {
SentrySDK.start { options in
options.dsn =
""
options.tracesSampleRate = 1.0
options.debug = true // Enabled debug when first installing is always helpful
// Adds IP for users.
// For more information, visit: https://docs.sentry.io/platforms/apple/data-management/data-collected/
options.sendDefaultPii = true
}
FirebaseApp.configure()
let delegate = ReactNativeDelegate()
let factory = ExpoReactNativeFactory(delegate: delegate)
delegate.dependencyProvider = RCTAppDependencyProvider()
reactNativeDelegate = delegate
reactNativeFactory = factory
bindReactNativeFactory(factory)
#if os(iOS) || os(tvOS)
window = UIWindow(frame: UIScreen.main.bounds)
factory.startReactNative(
withModuleName: "main",
in: window,
launchOptions: launchOptions
)
#endif
return super.application(
application,
didFinishLaunchingWithOptions: launchOptions
)
}
// Linking API
public override func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
) -> Bool {
// @generated begin @react-native-firebase/auth-openURL - expo prebuild (DO NOT MODIFY)
if url.host?.lowercased() == "firebaseauth" {
// invocations for Firebase Auth are handled elsewhere and should not be forwarded to Expo Router
return false
}
// @generated end @react-native-firebase/auth-openURL
// @generated begin @react-native-firebase/auth-openURL - expo prebuild (DO NOT MODIFY)
if url.host?.lowercased() == "firebaseauth" {
// invocations for Firebase Auth are handled elsewhere and should not be forwarded to Expo Router
return false
}
// @generated end @react-native-firebase/auth-openURL
// @generated begin @react-native-firebase/auth-openURL - expo prebuild (DO NOT MODIFY)
if url.host?.lowercased() == "firebaseauth" {
// invocations for Firebase Auth are handled elsewhere and should not be forwarded to Expo Router
return false
}
// @generated end @react-native-firebase/auth-openURL
// @generated begin @react-native-firebase/auth-openURL - expo prebuild (DO NOT MODIFY)
if url.host?.lowercased() == "firebaseauth" {
// invocations for Firebase Auth are handled elsewhere and should not be forwarded to Expo Router
return false
}
// @generated end @react-native-firebase/auth-openURL
return super.application(app, open: url, options: options)
|| RCTLinkingManager.application(app, open: url, options: options)
}
// Universal Links
public override func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
let result = RCTLinkingManager.application(
application,
continue: userActivity,
restorationHandler: restorationHandler
)
return super.application(
application,
continue: userActivity,
restorationHandler: restorationHandler
) || result
}
}
class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {
// Extension point for config-plugins
override func sourceURL(for bridge: RCTBridge) -> URL? {
// needed to return the correct URL for expo-dev-client.
bridge.bundleURL ?? bundleURL()
}
override func bundleURL() -> URL? {
#if DEBUG
return RCTBundleURLProvider.sharedSettings().jsBundleURL(
forBundleRoot: ".expo/.virtual-metro-entry"
)
#else
return Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
}
}
Environment
Click To Expand
react-native info
output:
OUTPUT GOES HERE
- 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:23.4.0
Firebase
module(s) you're using that has the issue:Auth
- Are you using
TypeScript
?Y
&5.9.2
- π Check out
React Native Firebase
andInvertase
on Twitter for updates on the library.
Metadata
Metadata
Assignees
Labels
blocked: customer-responseplatform: iosplugin: authenticationFirebase AuthenticationFirebase Authenticationtype: bugNew bug reportNew bug report