Skip to content

[🐛] 🔥 App Check fails within iPad-MacOS Compatibility Mode #8550

Open
@RohovDmytro

Description

@RohovDmytro

Issue

Describe your issue here

  • Apple's App Check on enabled in a release app in Testflight (appAttestWithDeviceCheckFallback)
  • The app is built for iOS / iPad
  • The app os opened on MacOS through TestFlight in iPad-MacOS Compatibility Mode.
  • App Check verification fails, and fails for a while

Javascript

if (['android', 'ios'].includes(Platform.OS)) {
  const provider = instanceForAppCheck.newReactNativeFirebaseAppCheckProvider();

  const isDebug =
    BUILD_TYPE_NOW === PROJECT_BUILD_TYPE.DEBUG ||
    BUILD_TYPE_NOW === PROJECT_BUILD_TYPE.E2E ||
    __DEV__;

  provider.configure({
    android: isDebug
      ? {
          provider: 'debug',
          debugToken: ***,
        }
      : {
          provider: 'playIntegrity',
        },

    apple: isDebug
      ? {
          provider: 'debug',
          debugToken: ***,
        }
      : {
          provider: 'appAttestWithDeviceCheckFallback',
        },
    web: {
      provider: 'reCaptchaV3',
      siteKey: 'unknown',
    },
  });

  (async () => {
    try {
      await initializeAppCheck(getApp(), { provider });
    } catch (e) {
      console.error(e);
    }
  })();
}

package.json:

"@react-native-firebase/analytics": "22.2.0",
"@react-native-firebase/app": "22.2.0",
"@react-native-firebase/app-check": "22.2.0",
"@react-native-firebase/auth": "22.2.0",
"@react-native-firebase/crashlytics": "22.2.0",
"@react-native-firebase/firestore": "22.2.0",
"@react-native-firebase/functions": "22.2.0",
"@react-native-firebase/messaging": "22.2.0",
"@react-native-firebase/perf": "22.2.0",
"@react-native-firebase/remote-config": "22.2.0",
"@react-native-firebase/storage": "22.2.0",
"@react-native-firebase/vertexai": "22.2.0",

firebase.json for react-native-firebase v6:

{
   "react-native": {
    "analytics_auto_collection_enabled": true,
    "analytics_idfv_collection_enabled": true,
    "messaging_android_notification_channel_id": "default-channel",
    "app_check_token_auto_refresh": true,
    "app_data_collection_default_enabled": true,
    "crashlytics_auto_collection_enabled": true,
    "crashlytics_debug_enabled": false,
    "crashlytics_ndk_enabled": true,
    "google_analytics_adid_collection_enabled": true,
    "google_analytics_automatic_screen_reporting_enabled": true,
    "google_analytics_registration_with_ad_network_enabled": true,
    "perf_auto_collection_enabled": true,
    "android_task_executor_maximum_pool_size": 16
  }
}

iOS

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']

# @generated begin with-on-device-measure - expo prebuild (DO NOT MODIFY) sync-6d1952a1f7b9ccb2d313cbd66659db4cdeae591f
$RNFirebaseAnalyticsGoogleAppMeasurementOnDeviceConversion = true
# @generated end with-on-device-measure
platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'
install! 'cocoapods',
  :deterministic_uuids => false

prepare_react_native_project!

target 'SnapDone' 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']

  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

AppDelegate.m:

// N/A


Android

Click To Expand

Have you converted to AndroidX?

  • my application is an AndroidX application?
  • I am using android/gradle.settings jetifier=true for Android compatibility?
  • I am using the NPM package jetifier for react-native compatibility?

android/build.gradle:

// N/A

android/app/build.gradle:

// N/A

android/settings.gradle:

// N/A

MainApplication.java:

// N/A

AndroidManifest.xml:

<!-- N/A -->


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:
    • e.g. 5.4.3
  • Firebase module(s) you're using that has the issue:
    • e.g. Instance ID
  • Are you using TypeScript?
    • Y/N & VERSION


Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions