diff --git a/Android/firebase_dependencies.gradle b/Android/firebase_dependencies.gradle
index 4f09733b17..e4b182892f 100644
--- a/Android/firebase_dependencies.gradle
+++ b/Android/firebase_dependencies.gradle
@@ -77,6 +77,9 @@ class Dependencies {
def getAnalytics() {
libSet.add('analytics')
}
+ def getAppCheck() {
+ libSet.add('app_check')
+ }
def getAuth() {
libSet.add('auth')
}
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 6fc3472ba2..a12d42b2c6 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -493,6 +493,13 @@ if (IOS)
${analytics_generated_headers_dir}/event_names.h
${analytics_generated_headers_dir}/parameter_names.h
${analytics_generated_headers_dir}/user_property_names.h)
+ set(app_check_HDRS
+ ${FIREBASE_SOURCE_DIR}/app_check/src/include/firebase/app_check.h
+ ${FIREBASE_SOURCE_DIR}/app_check/src/include/firebase/app_check/app_attest_provider.h
+ ${FIREBASE_SOURCE_DIR}/app_check/src/include/firebase/app_check/debug_provider.h
+ ${FIREBASE_SOURCE_DIR}/app_check/src/include/firebase/app_check/device_check_provider.h
+ ${FIREBASE_SOURCE_DIR}/app_check/src/include/firebase/app_check/play_integrity_provider.h
+ ${FIREBASE_SOURCE_DIR}/app_check/src/include/firebase/app_check/safety_net_provider.h)
set(auth_HDRS
${FIREBASE_SOURCE_DIR}/auth/src/include/firebase/auth.h
${FIREBASE_SOURCE_DIR}/auth/src/include/firebase/auth/credential.h
@@ -565,6 +572,7 @@ if (IOS)
src/include/firebase/internal/platform.h
${admob_HDRS}
${analytics_HDRS}
+ ${app_check_HDRS}
${auth_HDRS}
${database_HDRS}
${dynamic_links_HDRS}
diff --git a/app_check/integration_test/AndroidManifest.xml b/app_check/integration_test/AndroidManifest.xml
new file mode 100644
index 0000000000..1882a20b62
--- /dev/null
+++ b/app_check/integration_test/AndroidManifest.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app_check/integration_test/CMakeLists.txt b/app_check/integration_test/CMakeLists.txt
new file mode 100644
index 0000000000..d78a43e09f
--- /dev/null
+++ b/app_check/integration_test/CMakeLists.txt
@@ -0,0 +1,227 @@
+# Copyright 2022 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Cmake file for a single C++ integration test build.
+
+cmake_minimum_required(VERSION 2.8)
+
+set(FIREBASE_PYTHON_EXECUTABLE "python" CACHE FILEPATH
+ "The Python interpreter to use, such as one from a venv")
+
+# User settings for Firebase integration tests.
+# Path to Firebase SDK.
+# Try to read the path to the Firebase C++ SDK from an environment variable.
+if (NOT "$ENV{FIREBASE_CPP_SDK_DIR}" STREQUAL "")
+ set(DEFAULT_FIREBASE_CPP_SDK_DIR "$ENV{FIREBASE_CPP_SDK_DIR}")
+else()
+ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/../../cpp_sdk_version.json")
+ set(DEFAULT_FIREBASE_CPP_SDK_DIR "${CMAKE_CURRENT_LIST_DIR}/../..")
+ else()
+ set(DEFAULT_FIREBASE_CPP_SDK_DIR "firebase_cpp_sdk")
+ endif()
+endif()
+if ("${FIREBASE_CPP_SDK_DIR}" STREQUAL "")
+ set(FIREBASE_CPP_SDK_DIR ${DEFAULT_FIREBASE_CPP_SDK_DIR})
+endif()
+if(NOT EXISTS ${FIREBASE_CPP_SDK_DIR})
+ message(FATAL_ERROR "The Firebase C++ SDK directory does not exist: ${FIREBASE_CPP_SDK_DIR}. See the readme.md for more information")
+endif()
+
+# Copy all prerequisite files for integration tests to run.
+if(NOT ANDROID)
+ if (EXISTS ${CMAKE_CURRENT_LIST_DIR}/../../setup_integration_tests.py)
+ # If this is running from inside the SDK directory, run the setup script.
+ execute_process(COMMAND ${FIREBASE_PYTHON_EXECUTABLE} "${CMAKE_CURRENT_LIST_DIR}/../../setup_integration_tests.py" "${CMAKE_CURRENT_LIST_DIR}")
+ endif()
+endif()
+
+# Windows runtime mode, either MD or MT depending on whether you are using
+# /MD or /MT. For more information see:
+# https://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
+set(MSVC_RUNTIME_MODE MD)
+
+project(firebase_testapp)
+
+# Integration test source files.
+set(FIREBASE_APP_FRAMEWORK_SRCS
+ src/app_framework.cc
+ src/app_framework.h
+)
+
+set(FIREBASE_TEST_FRAMEWORK_SRCS
+ src/firebase_test_framework.h
+ src/firebase_test_framework.cc
+)
+
+set(FIREBASE_INTEGRATION_TEST_SRCS
+ src/integration_test.cc
+)
+
+# The include directory for the testapp.
+include_directories(src)
+
+# Integration test uses some features that require C++ 11, such as lambdas.
+set (CMAKE_CXX_STANDARD 11)
+
+# Download and unpack googletest (and googlemock) at configure time
+set(GOOGLETEST_ROOT ${CMAKE_CURRENT_LIST_DIR}/external/googletest)
+# Note: Once googletest is downloaded once, it won't be updated or
+# downloaded again unless you delete the "external/googletest"
+# directory.
+if (NOT EXISTS ${GOOGLETEST_ROOT}/src/googletest/src/gtest-all.cc)
+ configure_file(googletest.cmake
+ ${CMAKE_CURRENT_LIST_DIR}/external/googletest/CMakeLists.txt COPYONLY)
+ execute_process(COMMAND ${CMAKE_COMMAND} .
+ RESULT_VARIABLE result
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/external/googletest )
+ if(result)
+ message(FATAL_ERROR "CMake step for googletest failed: ${result}")
+ endif()
+ execute_process(COMMAND ${CMAKE_COMMAND} --build .
+ RESULT_VARIABLE result
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/external/googletest )
+ if(result)
+ message(FATAL_ERROR "Build step for googletest failed: ${result}")
+ endif()
+endif()
+
+if(ANDROID)
+ # Build an Android application.
+
+ # Source files used for the Android build.
+ set(FIREBASE_APP_FRAMEWORK_ANDROID_SRCS
+ src/android/android_app_framework.cc
+ )
+
+ # Source files used for the Android build.
+ set(FIREBASE_TEST_FRAMEWORK_ANDROID_SRCS
+ src/android/android_firebase_test_framework.cc
+ )
+
+ # Build native_app_glue as a static lib
+ add_library(native_app_glue STATIC
+ ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+ # Export ANativeActivity_onCreate(),
+ # Refer to: https://github.com/android-ndk/ndk/issues/381.
+ set(CMAKE_SHARED_LINKER_FLAGS
+ "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+ add_library(gtest STATIC
+ ${GOOGLETEST_ROOT}/src/googletest/src/gtest-all.cc)
+ target_include_directories(gtest
+ PRIVATE ${GOOGLETEST_ROOT}/src/googletest
+ PUBLIC ${GOOGLETEST_ROOT}/src/googletest/include)
+ add_library(gmock STATIC
+ ${GOOGLETEST_ROOT}/src/googlemock/src/gmock-all.cc)
+ target_include_directories(gmock
+ PRIVATE ${GOOGLETEST_ROOT}/src/googletest
+ PRIVATE ${GOOGLETEST_ROOT}/src/googlemock
+ PUBLIC ${GOOGLETEST_ROOT}/src/googletest/include
+ PUBLIC ${GOOGLETEST_ROOT}/src/googlemock/include)
+
+ # Define the target as a shared library, as that is what gradle expects.
+ set(integration_test_target_name "android_integration_test_main")
+ add_library(${integration_test_target_name} SHARED
+ ${FIREBASE_APP_FRAMEWORK_SRCS}
+ ${FIREBASE_APP_FRAMEWORK_ANDROID_SRCS}
+ ${FIREBASE_INTEGRATION_TEST_SRCS}
+ ${FIREBASE_TEST_FRAMEWORK_SRCS}
+ ${FIREBASE_TEST_FRAMEWORK_ANDROID_SRCS}
+ )
+
+ target_include_directories(${integration_test_target_name} PRIVATE
+ ${ANDROID_NDK}/sources/android/native_app_glue)
+
+ set(ADDITIONAL_LIBS log android atomic native_app_glue)
+else()
+ # Build a desktop application.
+ add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
+
+ # Prevent overriding the parent project's compiler/linker
+ # settings on Windows
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+
+ # Add googletest directly to our build. This defines
+ # the gtest and gtest_main targets.
+ add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/external/googletest/src
+ ${CMAKE_CURRENT_LIST_DIR}/external/googletest/build
+ EXCLUDE_FROM_ALL)
+
+ # The gtest/gtest_main targets carry header search path
+ # dependencies automatically when using CMake 2.8.11 or
+ # later. Otherwise we have to add them here ourselves.
+ if (CMAKE_VERSION VERSION_LESS 2.8.11)
+ include_directories("${gtest_SOURCE_DIR}/include")
+ include_directories("${gmock_SOURCE_DIR}/include")
+ endif()
+
+ # Windows runtime mode, either MD or MT depending on whether you are using
+ # /MD or /MT. For more information see:
+ # https://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
+ set(MSVC_RUNTIME_MODE MD)
+
+ # Platform abstraction layer for the desktop integration test.
+ set(FIREBASE_APP_FRAMEWORK_DESKTOP_SRCS
+ src/desktop/desktop_app_framework.cc
+ )
+
+ set(integration_test_target_name "integration_test")
+ add_executable(${integration_test_target_name}
+ ${FIREBASE_APP_FRAMEWORK_SRCS}
+ ${FIREBASE_APP_FRAMEWORK_DESKTOP_SRCS}
+ ${FIREBASE_TEST_FRAMEWORK_SRCS}
+ ${FIREBASE_INTEGRATION_TEST_SRCS}
+ )
+
+ if(APPLE)
+ set(ADDITIONAL_LIBS
+ gssapi_krb5
+ pthread
+ "-framework CoreFoundation"
+ "-framework Foundation"
+ "-framework GSS"
+ "-framework Security"
+ )
+ elseif(MSVC)
+ set(ADDITIONAL_LIBS advapi32 ws2_32 crypt32 iphlpapi psapi userenv shell32)
+ else()
+ set(ADDITIONAL_LIBS pthread)
+ endif()
+
+ # If a config file is present, copy it into the binary location so that it's
+ # possible to create the default Firebase app.
+ set(FOUND_JSON_FILE FALSE)
+ foreach(config "google-services-desktop.json" "google-services.json")
+ if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/${config}")
+ add_custom_command(
+ TARGET ${integration_test_target_name} POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ "${CMAKE_CURRENT_LIST_DIR}/${config}" $)
+ set(FOUND_JSON_FILE TRUE)
+ break()
+ endif()
+ endforeach()
+ if(NOT FOUND_JSON_FILE)
+ message(WARNING "Failed to find either google-services-desktop.json or google-services.json. See the readme.md for more information.")
+ endif()
+endif()
+
+# Add the Firebase libraries to the target using the function from the SDK.
+add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
+# Note that firebase_app needs to be last in the list.
+set(firebase_libs firebase_app_check firebase_database firebase_auth firebase_app)
+set(gtest_libs gtest gmock)
+target_link_libraries(${integration_test_target_name} ${firebase_libs}
+ ${gtest_libs} ${ADDITIONAL_LIBS})
diff --git a/app_check/integration_test/Images.xcassets/AppIcon.appiconset/Contents.json b/app_check/integration_test/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..d8db8d65fd
--- /dev/null
+++ b/app_check/integration_test/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "83.5x83.5",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "size" : "1024x1024",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/app_check/integration_test/Images.xcassets/LaunchImage.launchimage/Contents.json b/app_check/integration_test/Images.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000000..6f870a4629
--- /dev/null
+++ b/app_check/integration_test/Images.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,51 @@
+{
+ "images" : [
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "subtype" : "retina4",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "portrait",
+ "idiom" : "ipad",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "1x"
+ },
+ {
+ "orientation" : "landscape",
+ "idiom" : "ipad",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "1x"
+ },
+ {
+ "orientation" : "portrait",
+ "idiom" : "ipad",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "landscape",
+ "idiom" : "ipad",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/app_check/integration_test/Info.plist b/app_check/integration_test/Info.plist
new file mode 100644
index 0000000000..2b065a657b
--- /dev/null
+++ b/app_check/integration_test/Info.plist
@@ -0,0 +1,40 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleURLTypes
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLName
+ google
+ CFBundleURLSchemes
+
+ REPLACE_WITH_REVERSED_CLIENT_ID
+ firebase-game-loop
+
+
+
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+
+
diff --git a/app_check/integration_test/LaunchScreen.storyboard b/app_check/integration_test/LaunchScreen.storyboard
new file mode 100644
index 0000000000..673e0f7e68
--- /dev/null
+++ b/app_check/integration_test/LaunchScreen.storyboard
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app_check/integration_test/LibraryManifest.xml b/app_check/integration_test/LibraryManifest.xml
new file mode 100644
index 0000000000..d6e23c7191
--- /dev/null
+++ b/app_check/integration_test/LibraryManifest.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/app_check/integration_test/Podfile b/app_check/integration_test/Podfile
new file mode 100644
index 0000000000..d499882e54
--- /dev/null
+++ b/app_check/integration_test/Podfile
@@ -0,0 +1,24 @@
+source 'https://github.com/CocoaPods/Specs.git'
+# Firebase App Check test application.
+use_frameworks! :linkage => :static
+
+target 'integration_test' do
+ platform :ios, '11.0'
+ pod 'Firebase/AppCheck', '10.0.0'
+ pod 'Firebase/Database', '10.0.0'
+ pod 'Firebase/Auth', '10.0.0'
+end
+
+target 'integration_test_tvos' do
+ platform :tvos, '12.0'
+ pod 'Firebase/AppCheck', '10.0.0'
+ pod 'Firebase/Database', '10.0.0'
+ pod 'Firebase/Auth', '10.0.0'
+end
+
+post_install do |installer|
+ # If this is running from inside the SDK directory, run the setup script.
+ system("if [[ -r ../../setup_integration_tests.py ]]; then python3 ../../setup_integration_tests.py .; fi")
+ system("python3 ./download_googletest.py")
+end
+
diff --git a/app_check/integration_test/build.gradle b/app_check/integration_test/build.gradle
new file mode 100644
index 0000000000..a98a0ffb87
--- /dev/null
+++ b/app_check/integration_test/build.gradle
@@ -0,0 +1,100 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ mavenLocal()
+ maven { url 'https://maven.google.com' }
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.3.3'
+ classpath 'com.google.gms:google-services:4.0.1'
+ }
+}
+
+allprojects {
+ repositories {
+ mavenLocal()
+ maven { url 'https://maven.google.com' }
+ mavenCentral()
+ }
+}
+
+apply plugin: 'com.android.application'
+
+android {
+ compileOptions {
+ sourceCompatibility 1.8
+ targetCompatibility 1.8
+ }
+ compileSdkVersion 28
+ buildToolsVersion '28.0.3'
+
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']
+ manifest.srcFile 'AndroidManifest.xml'
+ java.srcDirs = ['src/android/java']
+ res.srcDirs = ['res']
+ }
+ }
+
+ defaultConfig {
+ applicationId 'com.google.firebase.cpp.appcheck.testapp'
+ minSdkVersion 19
+ targetSdkVersion 28
+ versionCode 1
+ versionName '1.0'
+ externalNativeBuild.cmake {
+ arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir",
+ "-DFIREBASE_INCLUDE_LIBRARY_DEFAULT=OFF",
+ "-DFIREBASE_INCLUDE_APP_CHECK=ON",
+ "-DFIREBASE_INCLUDE_AUTH=ON",
+ "-DFIREBASE_INCLUDE_DATABASE=ON"
+ }
+ }
+ externalNativeBuild.cmake {
+ path 'CMakeLists.txt'
+ }
+ buildTypes {
+ release {
+ minifyEnabled true
+ proguardFile getDefaultProguardFile('proguard-android.txt')
+ proguardFile file('proguard.pro')
+ }
+ }
+}
+
+apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
+firebaseCpp.dependencies {
+ appCheck
+ auth
+ database
+}
+
+apply plugin: 'com.google.gms.google-services'
+
+task copyIntegrationTestFiles(type:Exec) {
+ // If this is running form inside the SDK directory, run the setup script.
+ if (project.file('../../setup_integration_tests.py').exists()) {
+ commandLine 'python', '../../setup_integration_tests.py', project.projectDir.toString()
+ }
+ else {
+ commandLine 'echo', ''
+ }
+}
+
+build.dependsOn(copyIntegrationTestFiles)
diff --git a/app_check/integration_test/googletest.cmake b/app_check/integration_test/googletest.cmake
new file mode 100644
index 0000000000..5efa28280b
--- /dev/null
+++ b/app_check/integration_test/googletest.cmake
@@ -0,0 +1,35 @@
+# Copyright 2022 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Download GoogleTest from GitHub as an external project.
+# Pin to 1.11.0 because we touch internal GoogleTest structures that could change in the future.
+
+# This CMake file is taken from:
+# https://github.com/google/googletest/blob/master/googletest/README.md#incorporating-into-an-existing-cmake-project
+
+cmake_minimum_required(VERSION 2.8.2)
+
+project(googletest-download NONE)
+
+include(ExternalProject)
+ExternalProject_Add(googletest
+ GIT_REPOSITORY https://github.com/google/googletest.git
+ GIT_TAG "release-1.11.0"
+ SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/src"
+ BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/build"
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ""
+ INSTALL_COMMAND ""
+ TEST_COMMAND ""
+)
diff --git a/app_check/integration_test/gradle/wrapper/gradle-wrapper.jar b/app_check/integration_test/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000..8c0fb64a86
Binary files /dev/null and b/app_check/integration_test/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/app_check/integration_test/gradle/wrapper/gradle-wrapper.properties b/app_check/integration_test/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000..9e09cdb6ad
--- /dev/null
+++ b/app_check/integration_test/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Nov 27 14:03:45 PST 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-all.zip
diff --git a/app_check/integration_test/gradlew b/app_check/integration_test/gradlew
new file mode 100755
index 0000000000..9df5d1e6cc
--- /dev/null
+++ b/app_check/integration_test/gradlew
@@ -0,0 +1,178 @@
+#!/usr/bin/env bash
+#
+# Copyright 2022 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/app_check/integration_test/gradlew.bat b/app_check/integration_test/gradlew.bat
new file mode 100644
index 0000000000..182682e3ee
--- /dev/null
+++ b/app_check/integration_test/gradlew.bat
@@ -0,0 +1,104 @@
+@rem Copyright 2022 Google LLC
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/app_check/integration_test/integration_test.xcodeproj/project.pbxproj b/app_check/integration_test/integration_test.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..16cbe44041
--- /dev/null
+++ b/app_check/integration_test/integration_test.xcodeproj/project.pbxproj
@@ -0,0 +1,605 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 520BC0391C869159008CFBC3 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 520BC0381C869159008CFBC3 /* GoogleService-Info.plist */; };
+ 529226D61C85F68000C89379 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 529226D51C85F68000C89379 /* Foundation.framework */; };
+ 529226D81C85F68000C89379 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 529226D71C85F68000C89379 /* CoreGraphics.framework */; };
+ 529226DA1C85F68000C89379 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 529226D91C85F68000C89379 /* UIKit.framework */; };
+ 9F2ABA30267A4720001A35CE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9F2ABA2E267A4720001A35CE /* Main.storyboard */; };
+ 9F2ABA35267A4721001A35CE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9F2ABA33267A4721001A35CE /* LaunchScreen.storyboard */; };
+ 9F2ABA3C267A4744001A35CE /* gmock-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = D62CCBBF22F367140099BE9F /* gmock-all.cc */; };
+ 9F2ABA3E267A4747001A35CE /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = D67D355622BABD2100292C1D /* gtest-all.cc */; };
+ 9F2ABA3F267A474A001A35CE /* app_framework.cc in Sources */ = {isa = PBXBuildFile; fileRef = D6C179EF22CB32A000C2651A /* app_framework.cc */; };
+ 9F2ABA40267A474D001A35CE /* firebase_test_framework.cc in Sources */ = {isa = PBXBuildFile; fileRef = D6C179EC22CB323300C2651A /* firebase_test_framework.cc */; };
+ 9F2ABA41267A474F001A35CE /* integration_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = D61C5F9222BABAD100A79141 /* integration_test.cc */; };
+ 9F4C472E267A4DB6001E25DA /* ios_app_framework.mm in Sources */ = {isa = PBXBuildFile; fileRef = D6C179E722CB322900C2651A /* ios_app_framework.mm */; };
+ 9F4C472F267A4DC0001E25DA /* ios_firebase_test_framework.mm in Sources */ = {isa = PBXBuildFile; fileRef = D6C179E822CB322900C2651A /* ios_firebase_test_framework.mm */; };
+ BCF6A94C2682C02800578FDD /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 520BC0381C869159008CFBC3 /* GoogleService-Info.plist */; };
+ BCF6A94E2682C02E00578FDD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCF6A94D2682C02E00578FDD /* Foundation.framework */; };
+ BCF6A9502682C03300578FDD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCF6A94F2682C03300578FDD /* CoreGraphics.framework */; };
+ BCF6A9522682C03700578FDD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCF6A9512682C03700578FDD /* UIKit.framework */; };
+ D61C5F8E22BABA9C00A79141 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D61C5F8C22BABA9B00A79141 /* Images.xcassets */; };
+ D61C5F9622BABAD200A79141 /* integration_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = D61C5F9222BABAD100A79141 /* integration_test.cc */; };
+ D61DACA92819C7610022DDC4 /* empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61DACA82819C7610022DDC4 /* empty.swift */; };
+ D61DACAA2819C7610022DDC4 /* empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61DACA82819C7610022DDC4 /* empty.swift */; };
+ D62CCBC022F367140099BE9F /* gmock-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = D62CCBBF22F367140099BE9F /* gmock-all.cc */; };
+ D66B16871CE46E8900E5638A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D66B16861CE46E8900E5638A /* LaunchScreen.storyboard */; };
+ D67D355822BABD2200292C1D /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = D67D355622BABD2100292C1D /* gtest-all.cc */; };
+ D6C179E922CB322900C2651A /* ios_app_framework.mm in Sources */ = {isa = PBXBuildFile; fileRef = D6C179E722CB322900C2651A /* ios_app_framework.mm */; };
+ D6C179EA22CB322900C2651A /* ios_firebase_test_framework.mm in Sources */ = {isa = PBXBuildFile; fileRef = D6C179E822CB322900C2651A /* ios_firebase_test_framework.mm */; };
+ D6C179EE22CB323300C2651A /* firebase_test_framework.cc in Sources */ = {isa = PBXBuildFile; fileRef = D6C179EC22CB323300C2651A /* firebase_test_framework.cc */; };
+ D6C179F022CB32A000C2651A /* app_framework.cc in Sources */ = {isa = PBXBuildFile; fileRef = D6C179EF22CB32A000C2651A /* app_framework.cc */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 520BC0381C869159008CFBC3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
+ 529226D21C85F68000C89379 /* integration_test.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = integration_test.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 529226D51C85F68000C89379 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 529226D71C85F68000C89379 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 529226D91C85F68000C89379 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 529226EE1C85F68000C89379 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
+ 9F2ABA26267A4720001A35CE /* integration_test_tvos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = integration_test_tvos.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9F2ABA2F267A4720001A35CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 9F2ABA34267A4721001A35CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ BCF6A94D2682C02E00578FDD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.5.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+ BCF6A94F2682C03300578FDD /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.5.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
+ BCF6A9512682C03700578FDD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.5.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+ D61C5F8C22BABA9B00A79141 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
+ D61C5F8D22BABA9C00A79141 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ D61C5F9222BABAD100A79141 /* integration_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = integration_test.cc; path = src/integration_test.cc; sourceTree = ""; };
+ D61DACA82819C7610022DDC4 /* empty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = empty.swift; path = src/empty.swift; sourceTree = ""; };
+ D62CCBBF22F367140099BE9F /* gmock-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gmock-all.cc"; path = "external/googletest/src/googlemock/src/gmock-all.cc"; sourceTree = ""; };
+ D62CCBC122F367320099BE9F /* gmock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gmock.h; path = external/googletest/src/googlemock/include/gmock/gmock.h; sourceTree = ""; };
+ D66B16861CE46E8900E5638A /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; };
+ D67D355622BABD2100292C1D /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gtest-all.cc"; path = "external/googletest/src/googletest/src/gtest-all.cc"; sourceTree = ""; };
+ D67D355722BABD2100292C1D /* gtest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gtest.h; path = external/googletest/src/googletest/include/gtest/gtest.h; sourceTree = ""; };
+ D6C179E722CB322900C2651A /* ios_app_framework.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ios_app_framework.mm; path = src/ios/ios_app_framework.mm; sourceTree = ""; };
+ D6C179E822CB322900C2651A /* ios_firebase_test_framework.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ios_firebase_test_framework.mm; path = src/ios/ios_firebase_test_framework.mm; sourceTree = ""; };
+ D6C179EB22CB323300C2651A /* firebase_test_framework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = firebase_test_framework.h; path = src/firebase_test_framework.h; sourceTree = ""; };
+ D6C179EC22CB323300C2651A /* firebase_test_framework.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = firebase_test_framework.cc; path = src/firebase_test_framework.cc; sourceTree = ""; };
+ D6C179ED22CB323300C2651A /* app_framework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = app_framework.h; path = src/app_framework.h; sourceTree = ""; };
+ D6C179EF22CB32A000C2651A /* app_framework.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = app_framework.cc; path = src/app_framework.cc; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 529226CF1C85F68000C89379 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 529226D81C85F68000C89379 /* CoreGraphics.framework in Frameworks */,
+ 529226DA1C85F68000C89379 /* UIKit.framework in Frameworks */,
+ 529226D61C85F68000C89379 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9F2ABA23267A4720001A35CE /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BCF6A9522682C03700578FDD /* UIKit.framework in Frameworks */,
+ BCF6A9502682C03300578FDD /* CoreGraphics.framework in Frameworks */,
+ BCF6A94E2682C02E00578FDD /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 529226C91C85F68000C89379 = {
+ isa = PBXGroup;
+ children = (
+ D61C5F8C22BABA9B00A79141 /* Images.xcassets */,
+ D61C5F8D22BABA9C00A79141 /* Info.plist */,
+ D66B16861CE46E8900E5638A /* LaunchScreen.storyboard */,
+ 520BC0381C869159008CFBC3 /* GoogleService-Info.plist */,
+ 5292271D1C85FB5500C89379 /* src */,
+ 9F2ABA27267A4720001A35CE /* integration_test_tvos */,
+ 529226D41C85F68000C89379 /* Frameworks */,
+ 529226D31C85F68000C89379 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 529226D31C85F68000C89379 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 529226D21C85F68000C89379 /* integration_test.app */,
+ 9F2ABA26267A4720001A35CE /* integration_test_tvos.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 529226D41C85F68000C89379 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ BCF6A9512682C03700578FDD /* UIKit.framework */,
+ BCF6A94F2682C03300578FDD /* CoreGraphics.framework */,
+ 529226D51C85F68000C89379 /* Foundation.framework */,
+ BCF6A94D2682C02E00578FDD /* Foundation.framework */,
+ 529226D71C85F68000C89379 /* CoreGraphics.framework */,
+ 529226D91C85F68000C89379 /* UIKit.framework */,
+ 529226EE1C85F68000C89379 /* XCTest.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 5292271D1C85FB5500C89379 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ D61DACA82819C7610022DDC4 /* empty.swift */,
+ D62CCBC122F367320099BE9F /* gmock.h */,
+ D62CCBBF22F367140099BE9F /* gmock-all.cc */,
+ D67D355622BABD2100292C1D /* gtest-all.cc */,
+ D67D355722BABD2100292C1D /* gtest.h */,
+ D6C179EF22CB32A000C2651A /* app_framework.cc */,
+ D6C179ED22CB323300C2651A /* app_framework.h */,
+ D6C179EC22CB323300C2651A /* firebase_test_framework.cc */,
+ D6C179EB22CB323300C2651A /* firebase_test_framework.h */,
+ D61C5F9222BABAD100A79141 /* integration_test.cc */,
+ 5292271E1C85FB5B00C89379 /* ios */,
+ );
+ name = src;
+ sourceTree = "";
+ };
+ 5292271E1C85FB5B00C89379 /* ios */ = {
+ isa = PBXGroup;
+ children = (
+ D6C179E722CB322900C2651A /* ios_app_framework.mm */,
+ D6C179E822CB322900C2651A /* ios_firebase_test_framework.mm */,
+ );
+ name = ios;
+ sourceTree = "";
+ };
+ 9F2ABA27267A4720001A35CE /* integration_test_tvos */ = {
+ isa = PBXGroup;
+ children = (
+ 9F2ABA2E267A4720001A35CE /* Main.storyboard */,
+ 9F2ABA33267A4721001A35CE /* LaunchScreen.storyboard */,
+ );
+ path = integration_test_tvos;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 529226D11C85F68000C89379 /* integration_test */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 529226F91C85F68000C89379 /* Build configuration list for PBXNativeTarget "integration_test" */;
+ buildPhases = (
+ 529226CE1C85F68000C89379 /* Sources */,
+ 529226CF1C85F68000C89379 /* Frameworks */,
+ 529226D01C85F68000C89379 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = integration_test;
+ productName = testapp;
+ productReference = 529226D21C85F68000C89379 /* integration_test.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 9F2ABA25267A4720001A35CE /* integration_test_tvos */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 9F2ABA3B267A4721001A35CE /* Build configuration list for PBXNativeTarget "integration_test_tvos" */;
+ buildPhases = (
+ 9F2ABA22267A4720001A35CE /* Sources */,
+ 9F2ABA23267A4720001A35CE /* Frameworks */,
+ 9F2ABA24267A4720001A35CE /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = integration_test_tvos;
+ productName = integration_test_tvos;
+ productReference = 9F2ABA26267A4720001A35CE /* integration_test_tvos.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 529226CA1C85F68000C89379 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0640;
+ ORGANIZATIONNAME = Google;
+ TargetAttributes = {
+ 529226D11C85F68000C89379 = {
+ CreatedOnToolsVersion = 6.4;
+ DevelopmentTeam = EQHXZ8M8AV;
+ LastSwiftMigration = 1320;
+ ProvisioningStyle = Automatic;
+ };
+ 9F2ABA25267A4720001A35CE = {
+ CreatedOnToolsVersion = 12.5;
+ LastSwiftMigration = 1320;
+ ProvisioningStyle = Automatic;
+ };
+ };
+ };
+ buildConfigurationList = 529226CD1C85F68000C89379 /* Build configuration list for PBXProject "integration_test" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ English,
+ en,
+ Base,
+ );
+ mainGroup = 529226C91C85F68000C89379;
+ productRefGroup = 529226D31C85F68000C89379 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 529226D11C85F68000C89379 /* integration_test */,
+ 9F2ABA25267A4720001A35CE /* integration_test_tvos */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 529226D01C85F68000C89379 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D61C5F8E22BABA9C00A79141 /* Images.xcassets in Resources */,
+ D66B16871CE46E8900E5638A /* LaunchScreen.storyboard in Resources */,
+ 520BC0391C869159008CFBC3 /* GoogleService-Info.plist in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9F2ABA24267A4720001A35CE /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BCF6A94C2682C02800578FDD /* GoogleService-Info.plist in Resources */,
+ 9F2ABA35267A4721001A35CE /* LaunchScreen.storyboard in Resources */,
+ 9F2ABA30267A4720001A35CE /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 529226CE1C85F68000C89379 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D67D355822BABD2200292C1D /* gtest-all.cc in Sources */,
+ D62CCBC022F367140099BE9F /* gmock-all.cc in Sources */,
+ D6C179EA22CB322900C2651A /* ios_firebase_test_framework.mm in Sources */,
+ D61C5F9622BABAD200A79141 /* integration_test.cc in Sources */,
+ D6C179E922CB322900C2651A /* ios_app_framework.mm in Sources */,
+ D61DACA92819C7610022DDC4 /* empty.swift in Sources */,
+ D6C179F022CB32A000C2651A /* app_framework.cc in Sources */,
+ D6C179EE22CB323300C2651A /* firebase_test_framework.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9F2ABA22267A4720001A35CE /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9F2ABA41267A474F001A35CE /* integration_test.cc in Sources */,
+ 9F4C472F267A4DC0001E25DA /* ios_firebase_test_framework.mm in Sources */,
+ 9F2ABA3C267A4744001A35CE /* gmock-all.cc in Sources */,
+ 9F4C472E267A4DB6001E25DA /* ios_app_framework.mm in Sources */,
+ 9F2ABA3F267A474A001A35CE /* app_framework.cc in Sources */,
+ D61DACAA2819C7610022DDC4 /* empty.swift in Sources */,
+ 9F2ABA3E267A4747001A35CE /* gtest-all.cc in Sources */,
+ 9F2ABA40267A474D001A35CE /* firebase_test_framework.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 9F2ABA2E267A4720001A35CE /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 9F2ABA2F267A4720001A35CE /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 9F2ABA33267A4721001A35CE /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 9F2ABA34267A4721001A35CE /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 529226F71C85F68000C89379 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 529226F81C85F68000C89379 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 529226FA1C85F68000C89379 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = "";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ );
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ "\"$(SRCROOT)/src\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock\"",
+ );
+ INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.cpp.appcheck.testapp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ 529226FB1C85F68000C89379 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = "";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ );
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ "\"$(SRCROOT)/src\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock\"",
+ );
+ INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.cpp.appcheck.testapp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 5.0;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+ 9F2ABA39267A4721001A35CE /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_STYLE = Automatic;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ "\"$(SRCROOT)/src\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock\"",
+ );
+ INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.cpp.appcheck.testapp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Debug;
+ };
+ 9F2ABA3A267A4721001A35CE /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_STYLE = Automatic;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ "\"$(SRCROOT)/src\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock/include\"",
+ "\"$(SRCROOT)/external/googletest/src/googletest\"",
+ "\"$(SRCROOT)/external/googletest/src/googlemock\"",
+ );
+ INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.cpp.appcheck.testapp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 529226CD1C85F68000C89379 /* Build configuration list for PBXProject "integration_test" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 529226F71C85F68000C89379 /* Debug */,
+ 529226F81C85F68000C89379 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 529226F91C85F68000C89379 /* Build configuration list for PBXNativeTarget "integration_test" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 529226FA1C85F68000C89379 /* Debug */,
+ 529226FB1C85F68000C89379 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 9F2ABA3B267A4721001A35CE /* Build configuration list for PBXNativeTarget "integration_test_tvos" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9F2ABA39267A4721001A35CE /* Debug */,
+ 9F2ABA3A267A4721001A35CE /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 529226CA1C85F68000C89379 /* Project object */;
+}
diff --git a/app_check/integration_test/integration_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/app_check/integration_test/integration_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..919434a625
--- /dev/null
+++ b/app_check/integration_test/integration_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/app_check/integration_test/integration_test.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/app_check/integration_test/integration_test.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000..18d981003d
--- /dev/null
+++ b/app_check/integration_test/integration_test.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/app_check/integration_test/integration_test_tvos/Base.lproj/LaunchScreen.storyboard b/app_check/integration_test/integration_test_tvos/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000000..660ba53de4
--- /dev/null
+++ b/app_check/integration_test/integration_test_tvos/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app_check/integration_test/integration_test_tvos/Base.lproj/Main.storyboard b/app_check/integration_test/integration_test_tvos/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000..a5c40f1968
--- /dev/null
+++ b/app_check/integration_test/integration_test_tvos/Base.lproj/Main.storyboard
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app_check/integration_test/proguard.pro b/app_check/integration_test/proguard.pro
new file mode 100644
index 0000000000..2d04b8a9a5
--- /dev/null
+++ b/app_check/integration_test/proguard.pro
@@ -0,0 +1,2 @@
+-ignorewarnings
+-keep,includedescriptorclasses public class com.google.firebase.example.LoggingUtils { * ; }
diff --git a/app_check/integration_test/res/layout/main.xml b/app_check/integration_test/res/layout/main.xml
new file mode 100644
index 0000000000..a21f04272f
--- /dev/null
+++ b/app_check/integration_test/res/layout/main.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/app_check/integration_test/res/values/strings.xml b/app_check/integration_test/res/values/strings.xml
new file mode 100644
index 0000000000..11edebbab2
--- /dev/null
+++ b/app_check/integration_test/res/values/strings.xml
@@ -0,0 +1,20 @@
+
+
+
+ Firebase App Check Integration Test
+
diff --git a/app_check/integration_test/settings.gradle b/app_check/integration_test/settings.gradle
new file mode 100644
index 0000000000..5d33554481
--- /dev/null
+++ b/app_check/integration_test/settings.gradle
@@ -0,0 +1,39 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir')
+if (firebase_cpp_sdk_dir == null || firebase_cpp_sdk_dir.isEmpty()) {
+ firebase_cpp_sdk_dir = System.getenv('FIREBASE_CPP_SDK_DIR')
+ if (firebase_cpp_sdk_dir == null || firebase_cpp_sdk_dir.isEmpty()) {
+ if ((new File('../../cpp_sdk_version.json')).exists()) {
+ firebase_cpp_sdk_dir = new File('../..').absolutePath
+ }
+ else if ((new File('firebase_cpp_sdk')).exists()) {
+ firebase_cpp_sdk_dir = 'firebase_cpp_sdk'
+ } else {
+ throw new StopActionException(
+ 'firebase_cpp_sdk.dir property or the FIREBASE_CPP_SDK_DIR ' +
+ 'environment variable must be set to reference the Firebase C++ ' +
+ 'SDK install directory. This is used to configure static library ' +
+ 'and C/C++ include paths for the SDK.')
+ }
+ }
+}
+if (!(new File(firebase_cpp_sdk_dir)).exists()) {
+ throw new StopActionException(
+ sprintf('Firebase C++ SDK directory %s does not exist',
+ firebase_cpp_sdk_dir))
+}
+gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir"
+includeBuild "$firebase_cpp_sdk_dir"
diff --git a/app_check/integration_test/src/integration_test.cc b/app_check/integration_test/src/integration_test.cc
new file mode 100644
index 0000000000..9034954fa4
--- /dev/null
+++ b/app_check/integration_test/src/integration_test.cc
@@ -0,0 +1,500 @@
+// Copyright 2022 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include