summaryrefslogtreecommitdiff
path: root/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics')
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m644
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c60
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h193
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleDataTransport/GDTCORLibrary/Internal/GoogleDataTransportInternal.h22
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h47
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h49
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainStorage.h79
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainUtils.h61
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULSecureCoding.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Logger/Private/GULLogger.h163
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h61
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/LICENSE202
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/README.md298
14 files changed, 1949 insertions, 0 deletions
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m
new file mode 100644
index 00000000..85f6b548
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m
@@ -0,0 +1,644 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+#import <objc/runtime.h>
+#include <sys/utsname.h>
+
+#import "GoogleDataTransport/GDTCORLibrary/Internal/GoogleDataTransportInternal.h"
+
+#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h"
+#import "GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h"
+#import "GoogleUtilities/Logger/Private/GULLogger.h"
+
+#import "Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h"
+#import "Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h"
+
+#import <nanopb/pb.h>
+#import <nanopb/pb_decode.h>
+#import <nanopb/pb_encode.h>
+
+#import "FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h"
+
+/** The logger service string to use when printing to the console. */
+static GULLoggerService kFIRCoreDiagnostics = @"[FirebaseCoreDiagnostics/FIRCoreDiagnostics]";
+
+#ifdef FIREBASE_BUILD_ZIP_FILE
+static BOOL kUsingZipFile = YES;
+#else // FIREBASE_BUILD_ZIP_FILE
+static BOOL kUsingZipFile = NO;
+#endif // FIREBASE_BUILD_ZIP_FILE
+
+#ifdef FIREBASE_BUILD_CARTHAGE
+#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE
+#elif FIREBASE_BUILD_ZIP_FILE
+#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE
+#else
+#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS
+#endif
+
+static NSString *const kFIRServiceMLVisionOnDeviceAutoML = @"MLVisionOnDeviceAutoML";
+static NSString *const kFIRServiceMLVisionOnDeviceFace = @"MLVisionOnDeviceFace";
+static NSString *const kFIRServiceMLVisionOnDeviceBarcode = @"MLVisionOnDeviceBarcode";
+static NSString *const kFIRServiceMLVisionOnDeviceText = @"MLVisionOnDeviceText";
+static NSString *const kFIRServiceMLVisionOnDeviceLabel = @"MLVisionOnDeviceLabel";
+static NSString *const kFIRServiceMLVisionOnDeviceObjectDetection =
+ @"MLVisionOnDeviceObjectDetection";
+static NSString *const kFIRServiceMLModelInterpreter = @"MLModelInterpreter";
+
+static NSString *const kFIRServiceAdMob = @"AdMob";
+static NSString *const kFIRServiceAuth = @"Auth";
+static NSString *const kFIRServiceAuthUI = @"AuthUI";
+static NSString *const kFIRServiceCrash = @"Crash";
+static NSString *const kFIRServiceDatabase = @"Database";
+static NSString *const kFIRServiceDynamicLinks = @"DynamicLinks";
+static NSString *const kFIRServiceFirestore = @"Firestore";
+static NSString *const kFIRServiceFunctions = @"Functions";
+static NSString *const kFIRServiceIAM = @"InAppMessaging";
+static NSString *const kFIRServiceInstanceID = @"InstanceID";
+static NSString *const kFIRServiceInvites = @"Invites";
+static NSString *const kFIRServiceMessaging = @"Messaging";
+static NSString *const kFIRServiceMeasurement = @"Measurement";
+static NSString *const kFIRServicePerformance = @"Performance";
+static NSString *const kFIRServiceRemoteConfig = @"RemoteConfig";
+static NSString *const kFIRServiceStorage = @"Storage";
+static NSString *const kGGLServiceAnalytics = @"Analytics";
+static NSString *const kGGLServiceSignIn = @"SignIn";
+static NSString *const kFIRAppDiagnosticsConfigurationTypeKey =
+ @"FIRAppDiagnosticsConfigurationTypeKey";
+static NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRAppDiagnosticsFIRAppKey";
+static NSString *const kFIRAppDiagnosticsSDKNameKey = @"FIRAppDiagnosticsSDKNameKey";
+static NSString *const kFIRAppDiagnosticsSDKVersionKey = @"FIRAppDiagnosticsSDKVersionKey";
+static NSString *const kFIRCoreDiagnosticsHeartbeatTag = @"FIRCoreDiagnostics";
+
+/**
+ * The file name to the recent heartbeat date.
+ */
+NSString *const kFIRCoreDiagnosticsHeartbeatDateFileName = @"FIREBASE_DIAGNOSTICS_HEARTBEAT_DATE";
+
+/**
+ * @note This should implement the GDTCOREventDataObject protocol, but can't because of
+ * weak-linking.
+ */
+@interface FIRCoreDiagnosticsLog : NSObject
+
+/** The config that will be converted to proto bytes. */
+@property(nonatomic) logs_proto_mobilesdk_ios_ICoreConfiguration config;
+
+@end
+
+@implementation FIRCoreDiagnosticsLog
+
+- (instancetype)initWithConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration)config {
+ self = [super init];
+ if (self) {
+ _config = config;
+ }
+ return self;
+}
+
+// Provided and required by the GDTCOREventDataObject protocol.
+- (NSData *)transportBytes {
+ pb_ostream_t sizestream = PB_OSTREAM_SIZING;
+
+ // Encode 1 time to determine the size.
+ if (!pb_encode(&sizestream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) {
+ GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for size: %s",
+ PB_GET_ERROR(&sizestream));
+ }
+
+ // Encode a 2nd time to actually get the bytes from it.
+ size_t bufferSize = sizestream.bytes_written;
+ CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize);
+ CFDataSetLength(dataRef, bufferSize);
+ pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize);
+ if (!pb_encode(&ostream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) {
+ GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for bytes: %s",
+ PB_GET_ERROR(&ostream));
+ }
+ CFDataSetLength(dataRef, ostream.bytes_written);
+
+ return CFBridgingRelease(dataRef);
+}
+
+- (void)dealloc {
+ pb_release(logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config);
+}
+
+@end
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** This class produces a protobuf containing diagnostics and usage data to be logged. */
+@interface FIRCoreDiagnostics : NSObject <FIRCoreDiagnosticsInterop>
+
+/** The queue on which all diagnostics collection will occur. */
+@property(nonatomic, readonly) dispatch_queue_t diagnosticsQueue;
+
+/** The transport object used to send data. */
+@property(nonatomic, readonly) GDTCORTransport *transport;
+
+/** The storage to store the date of the last sent heartbeat. */
+@property(nonatomic, readonly) GULHeartbeatDateStorage *heartbeatDateStorage;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+@implementation FIRCoreDiagnostics
+
++ (instancetype)sharedInstance {
+ static FIRCoreDiagnostics *sharedInstance;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ sharedInstance = [[FIRCoreDiagnostics alloc] init];
+ });
+ return sharedInstance;
+}
+
+- (instancetype)init {
+ GDTCORTransport *transport = [[GDTCORTransport alloc] initWithMappingID:@"137"
+ transformers:nil
+ target:kGDTCORTargetFLL];
+
+ GULHeartbeatDateStorage *dateStorage =
+ [[GULHeartbeatDateStorage alloc] initWithFileName:kFIRCoreDiagnosticsHeartbeatDateFileName];
+
+ return [self initWithTransport:transport heartbeatDateStorage:dateStorage];
+}
+
+/** Initializer for unit tests.
+ *
+ * @param transport A `GDTCORTransport` instance which that be used to send event.
+ * @param heartbeatDateStorage An instanse of date storage to track heartbeat sending.
+ * @return Returns the initialized `FIRCoreDiagnostics` instance.
+ */
+- (instancetype)initWithTransport:(GDTCORTransport *)transport
+ heartbeatDateStorage:(GULHeartbeatDateStorage *)heartbeatDateStorage {
+ self = [super init];
+ if (self) {
+ _diagnosticsQueue =
+ dispatch_queue_create("com.google.FIRCoreDiagnostics", DISPATCH_QUEUE_SERIAL);
+ _transport = transport;
+ _heartbeatDateStorage = heartbeatDateStorage;
+ }
+ return self;
+}
+
+#pragma mark - Metadata helpers
+
+/** Returns the model of iOS device. Sample platform strings are @"iPhone7,1" for iPhone 6 Plus,
+ * @"iPhone7,2" for iPhone 6, etc. Refer to the Hardware strings at
+ * https://en.wikipedia.org/wiki/List_of_iOS_devices
+ *
+ * @return The device model as an NSString.
+ */
++ (NSString *)deviceModel {
+ static NSString *deviceModel = nil;
+ if (deviceModel == nil) {
+ struct utsname systemInfo;
+ uname(&systemInfo);
+ deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
+ }
+ return deviceModel;
+}
+
+#pragma mark - nanopb helper functions
+
+/** Callocs a pb_bytes_array and copies the given NSString's bytes into the bytes array.
+ *
+ * @note Memory needs to be free manually, through pb_free or pb_release.
+ * @param string The string to encode as pb_bytes.
+ */
+pb_bytes_array_t *FIREncodeString(NSString *string) {
+ NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding];
+ return FIREncodeData(stringBytes);
+}
+
+/** Callocs a pb_bytes_array and copies the given NSData bytes into the bytes array.
+ *
+ * @note Memory needs to be free manually, through pb_free or pb_release.
+ * @param data The data to copy into the new bytes array.
+ */
+pb_bytes_array_t *FIREncodeData(NSData *data) {
+ pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length));
+ if (pbBytesArray != NULL) {
+ [data getBytes:pbBytesArray->bytes length:data.length];
+ pbBytesArray->size = (pb_size_t)data.length;
+ }
+ return pbBytesArray;
+}
+
+/** Maps a service string to the representative nanopb enum.
+ *
+ * @param serviceString The SDK service string to convert.
+ * @return The representative nanopb enum.
+ */
+logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType FIRMapFromServiceStringToTypeEnum(
+ NSString *serviceString) {
+ static NSDictionary<NSString *, NSNumber *> *serviceStringToTypeEnum;
+ if (serviceStringToTypeEnum == nil) {
+ serviceStringToTypeEnum = @{
+ kFIRServiceAdMob : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB),
+ kFIRServiceMessaging : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING),
+ kFIRServiceMeasurement :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT),
+ kFIRServiceRemoteConfig :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG),
+ kFIRServiceDatabase : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE),
+ kFIRServiceDynamicLinks :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS),
+ kFIRServiceAuth : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH),
+ kFIRServiceAuthUI : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI),
+ kFIRServiceFirestore : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE),
+ kFIRServiceFunctions : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS),
+ kFIRServicePerformance :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE),
+ kFIRServiceStorage : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE),
+ kFIRServiceMLVisionOnDeviceAutoML :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML),
+ kFIRServiceMLVisionOnDeviceFace :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE),
+ kFIRServiceMLVisionOnDeviceBarcode :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE),
+ kFIRServiceMLVisionOnDeviceText :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT),
+ kFIRServiceMLVisionOnDeviceLabel :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL),
+ kFIRServiceMLVisionOnDeviceObjectDetection : @(
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION),
+ kFIRServiceMLModelInterpreter :
+ @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER),
+ kGGLServiceAnalytics : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS),
+ kGGLServiceSignIn : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN),
+ kFIRServiceIAM : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING),
+ };
+ }
+ if (serviceStringToTypeEnum[serviceString] != nil) {
+ return (int32_t)serviceStringToTypeEnum[serviceString].longLongValue;
+ }
+ return logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE;
+}
+
+#pragma mark - Proto population functions
+
+/** Populates the given proto with data related to an SDK logDiagnostics call from the
+ * diagnosticObjects dictionary.
+ *
+ * @param config The proto to populate
+ * @param diagnosticObjects The dictionary of diagnostics objects.
+ */
+void FIRPopulateProtoWithInfoFromUserInfoParams(logs_proto_mobilesdk_ios_ICoreConfiguration *config,
+ NSDictionary<NSString *, id> *diagnosticObjects) {
+ NSNumber *configurationType = diagnosticObjects[kFIRCDConfigurationTypeKey];
+ if (configurationType != nil) {
+ switch (configurationType.integerValue) {
+ case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE:
+ config->configuration_type =
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE;
+ config->has_configuration_type = 1;
+ break;
+ case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK:
+ config->configuration_type =
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK;
+ config->has_configuration_type = 1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ NSString *sdkName = diagnosticObjects[kFIRCDSdkNameKey];
+ if (sdkName) {
+ config->sdk_name = FIRMapFromServiceStringToTypeEnum(sdkName);
+ config->has_sdk_name = 1;
+ }
+
+ NSString *version = diagnosticObjects[kFIRCDSdkVersionKey];
+ if (version) {
+ config->sdk_version = FIREncodeString(version);
+ }
+}
+
+/** Populates the given proto with data from the calling FIRApp using the given
+ * diagnosticObjects dictionary.
+ *
+ * @param config The proto to populate
+ * @param diagnosticObjects The dictionary of diagnostics objects.
+ */
+void FIRPopulateProtoWithCommonInfoFromApp(logs_proto_mobilesdk_ios_ICoreConfiguration *config,
+ NSDictionary<NSString *, id> *diagnosticObjects) {
+ config->pod_name = logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE;
+ config->has_pod_name = 1;
+
+ if (!diagnosticObjects[kFIRCDllAppsCountKey]) {
+ GDTCORLogError(GDTCORMCEGeneralError, @"%@",
+ @"App count is a required value in the data dict.");
+ }
+ config->app_count = (int32_t)[diagnosticObjects[kFIRCDllAppsCountKey] integerValue];
+ config->has_app_count = 1;
+
+ NSString *googleAppID = diagnosticObjects[kFIRCDGoogleAppIDKey];
+ if (googleAppID.length) {
+ config->app_id = FIREncodeString(googleAppID);
+ }
+
+ NSString *bundleID = diagnosticObjects[kFIRCDBundleIDKey];
+ if (bundleID.length) {
+ config->bundle_id = FIREncodeString(bundleID);
+ }
+
+ NSString *firebaseUserAgent = diagnosticObjects[kFIRCDFirebaseUserAgentKey];
+ if (firebaseUserAgent.length) {
+ config->platform_info = FIREncodeString(firebaseUserAgent);
+ }
+
+ NSNumber *usingOptionsFromDefaultPlist = diagnosticObjects[kFIRCDUsingOptionsFromDefaultPlistKey];
+ if (usingOptionsFromDefaultPlist != nil) {
+ config->use_default_app = [usingOptionsFromDefaultPlist boolValue];
+ config->has_use_default_app = 1;
+ }
+
+ NSString *libraryVersionID = diagnosticObjects[kFIRCDLibraryVersionIDKey];
+ if (libraryVersionID) {
+ config->icore_version = FIREncodeString(libraryVersionID);
+ }
+
+ NSString *deviceModel = [FIRCoreDiagnostics deviceModel];
+ if (deviceModel.length) {
+ config->device_model = FIREncodeString(deviceModel);
+ }
+
+ NSString *osVersion = [GULAppEnvironmentUtil systemVersion];
+ if (osVersion.length) {
+ config->os_version = FIREncodeString(osVersion);
+ }
+
+ config->using_zip_file = kUsingZipFile;
+ config->has_using_zip_file = 1;
+ config->deployment_type = kDeploymentType;
+ config->has_deployment_type = 1;
+ config->deployed_in_app_store = [GULAppEnvironmentUtil isFromAppStore];
+ config->has_deployed_in_app_store = 1;
+}
+
+/** Populates the given proto with installed services data.
+ *
+ * @param config The proto to populate
+ */
+void FIRPopulateProtoWithInstalledServices(logs_proto_mobilesdk_ios_ICoreConfiguration *config) {
+ NSMutableArray<NSNumber *> *sdkServiceInstalledArray = [NSMutableArray array];
+
+ // AdMob
+ if (NSClassFromString(@"GADBannerView") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAdMob))];
+ }
+ // CloudMessaging
+ if (NSClassFromString(@"FIRMessaging") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMessaging))];
+ }
+ // RemoteConfig
+ if (NSClassFromString(@"FIRRemoteConfig") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceRemoteConfig))];
+ }
+ // Measurement/Analtyics
+ if (NSClassFromString(@"FIRAnalytics") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMeasurement))];
+ }
+ // ML Vision On Device AutoML.
+ if (NSClassFromString(@"FIRVisionOnDeviceAutoMLImageLabelerOptions") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceAutoML))];
+ }
+ // ML Vision On Device Face.
+ if (NSClassFromString(@"FIRVisionFaceDetector") != nil &&
+ NSClassFromString(@"GMVFaceDetector") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceFace))];
+ }
+ // ML Vision On Device Barcode.
+ if (NSClassFromString(@"FIRVisionBarcodeDetector") != nil &&
+ NSClassFromString(@"GMVBarcodeDetector") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceBarcode))];
+ }
+ // ML Vision On Device Text.
+ if (NSClassFromString(@"FIRVisionTextDetector") != nil &&
+ NSClassFromString(@"GMVTextDetector") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceText))];
+ }
+ // ML Vision On Device Image Label.
+ if (NSClassFromString(@"FIRVisionLabelDetector") != nil &&
+ NSClassFromString(@"GMVLabelDetector") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceLabel))];
+ }
+ // ML Vision On Device Object.
+ if (NSClassFromString(@"FIRVisionObjectDetector") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceObjectDetection))];
+ }
+ // ML Model Interpreter
+ if (NSClassFromString(@"FIRCustomModelInterpreter") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLModelInterpreter))];
+ }
+ // Database
+ if (NSClassFromString(@"FIRDatabase") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDatabase))];
+ }
+ // DynamicDeepLink
+ if (NSClassFromString(@"FIRDynamicLinks") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDynamicLinks))];
+ }
+ // Auth
+ if (NSClassFromString(@"FIRAuth") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuth))];
+ }
+ // AuthUI
+ if (NSClassFromString(@"FUIAuth") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuthUI))];
+ }
+ // Firestore
+ if (NSClassFromString(@"FIRFirestore") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFirestore))];
+ }
+ // Functions
+ if (NSClassFromString(@"FIRFunctions") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFunctions))];
+ }
+ // Performance
+ if (NSClassFromString(@"FIRPerformance") != nil) {
+ [sdkServiceInstalledArray
+ addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServicePerformance))];
+ }
+ // Storage
+ if (NSClassFromString(@"FIRStorage") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceStorage))];
+ }
+ // SignIn via Google pod
+ if (NSClassFromString(@"GIDSignIn") != nil && NSClassFromString(@"GGLContext") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceSignIn))];
+ }
+ // Analytics via Google pod
+ if (NSClassFromString(@"GAI") != nil && NSClassFromString(@"GGLContext") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceAnalytics))];
+ }
+
+ // In-App Messaging
+ if (NSClassFromString(@"FIRInAppMessaging") != nil) {
+ [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceIAM))];
+ }
+
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *servicesInstalled =
+ calloc(sdkServiceInstalledArray.count,
+ sizeof(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType));
+ if (servicesInstalled == NULL) {
+ return;
+ }
+ for (NSUInteger i = 0; i < sdkServiceInstalledArray.count; i++) {
+ NSNumber *typeEnum = sdkServiceInstalledArray[i];
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType serviceType =
+ (int32_t)typeEnum.integerValue;
+ servicesInstalled[i] = serviceType;
+ }
+
+ config->sdk_service_installed = servicesInstalled;
+ config->sdk_service_installed_count = (int32_t)sdkServiceInstalledArray.count;
+}
+
+/** Populates the proto with the number of linked frameworks.
+ *
+ * @param config The proto to populate.
+ */
+void FIRPopulateProtoWithNumberOfLinkedFrameworks(
+ logs_proto_mobilesdk_ios_ICoreConfiguration *config) {
+ int numFrameworks = -1; // Subtract the app binary itself.
+ unsigned int numImages;
+ const char **imageNames = objc_copyImageNames(&numImages);
+ for (unsigned int i = 0; i < numImages; i++) {
+ NSString *imageName = [NSString stringWithUTF8String:imageNames[i]];
+ if ([imageName rangeOfString:@"System/Library"].length != 0 // Apple .frameworks
+ || [imageName rangeOfString:@"Developer/Library"].length != 0 // Xcode debug .frameworks
+ || [imageName rangeOfString:@"usr/lib"].length != 0) { // Public .dylibs
+ continue;
+ }
+ numFrameworks++;
+ }
+ free(imageNames);
+ config->dynamic_framework_count = numFrameworks;
+ config->has_dynamic_framework_count = 1;
+}
+
+/** Populates the proto with Info.plist values.
+ *
+ * @param config The proto to populate.
+ */
+void FIRPopulateProtoWithInfoPlistValues(logs_proto_mobilesdk_ios_ICoreConfiguration *config) {
+ NSDictionary<NSString *, id> *info = [[NSBundle mainBundle] infoDictionary];
+
+ NSString *xcodeVersion = info[@"DTXcodeBuild"] ?: @"";
+ NSString *sdkVersion = info[@"DTSDKBuild"] ?: @"";
+ NSString *combinedVersions = [NSString stringWithFormat:@"%@-%@", xcodeVersion, sdkVersion];
+ config->apple_framework_version = FIREncodeString(combinedVersions);
+
+ NSString *minVersion = info[@"MinimumOSVersion"];
+ if (minVersion) {
+ config->min_supported_ios_version = FIREncodeString(minVersion);
+ }
+
+ // Apps can turn off swizzling in the Info.plist, check if they've explicitly set the value and
+ // report it. It's enabled by default.
+ NSNumber *appDelegateSwizzledNum = info[@"FirebaseAppDelegateProxyEnabled"];
+ BOOL appDelegateSwizzled = YES;
+ if ([appDelegateSwizzledNum isKindOfClass:[NSNumber class]]) {
+ appDelegateSwizzled = [appDelegateSwizzledNum boolValue];
+ }
+ config->swizzling_enabled = appDelegateSwizzled;
+ config->has_swizzling_enabled = 1;
+}
+
+#pragma mark - FIRCoreDiagnosticsInterop
+
++ (void)sendDiagnosticsData:(nonnull id<FIRCoreDiagnosticsData>)diagnosticsData {
+ FIRCoreDiagnostics *diagnostics = [FIRCoreDiagnostics sharedInstance];
+ [diagnostics sendDiagnosticsData:diagnosticsData];
+}
+
+- (void)sendDiagnosticsData:(nonnull id<FIRCoreDiagnosticsData>)diagnosticsData {
+ dispatch_async(self.diagnosticsQueue, ^{
+ NSDictionary<NSString *, id> *diagnosticObjects = diagnosticsData.diagnosticObjects;
+ NSNumber *isDataCollectionDefaultEnabled =
+ diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey];
+ if (isDataCollectionDefaultEnabled && ![isDataCollectionDefaultEnabled boolValue]) {
+ return;
+ }
+
+ // Create the proto.
+ logs_proto_mobilesdk_ios_ICoreConfiguration icore_config =
+ logs_proto_mobilesdk_ios_ICoreConfiguration_init_default;
+
+ icore_config.using_gdt = 1;
+ icore_config.has_using_gdt = 1;
+
+ // Populate the proto with information.
+ FIRPopulateProtoWithInfoFromUserInfoParams(&icore_config, diagnosticObjects);
+ FIRPopulateProtoWithCommonInfoFromApp(&icore_config, diagnosticObjects);
+ FIRPopulateProtoWithInstalledServices(&icore_config);
+ FIRPopulateProtoWithNumberOfLinkedFrameworks(&icore_config);
+ FIRPopulateProtoWithInfoPlistValues(&icore_config);
+ [self setHeartbeatFlagIfNeededToConfig:&icore_config];
+
+ // This log object is capable of converting the proto to bytes.
+ FIRCoreDiagnosticsLog *log = [[FIRCoreDiagnosticsLog alloc] initWithConfig:icore_config];
+
+ // Send the log as a telemetry event.
+ GDTCOREvent *event = [self.transport eventForTransport];
+ event.dataObject = (id<GDTCOREventDataObject>)log;
+ [self.transport sendTelemetryEvent:event];
+ });
+}
+
+#pragma mark - Heartbeat
+
+- (void)setHeartbeatFlagIfNeededToConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration *)config {
+ // Check if need to send a heartbeat.
+ NSDate *currentDate = [NSDate date];
+ NSDate *lastCheckin =
+ [self.heartbeatDateStorage heartbeatDateForTag:kFIRCoreDiagnosticsHeartbeatTag];
+ if (lastCheckin) {
+ // Ensure the previous checkin was on a different date in the past.
+ if ([self isDate:currentDate inSameDayOrBeforeThan:lastCheckin]) {
+ return;
+ }
+ }
+
+ // Update heartbeat sent date.
+ [self.heartbeatDateStorage setHearbeatDate:currentDate forTag:kFIRCoreDiagnosticsHeartbeatTag];
+ // Set the flag.
+ config->sdk_name = logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE;
+ config->has_sdk_name = 1;
+}
+
+- (BOOL)isDate:(NSDate *)date1 inSameDayOrBeforeThan:(NSDate *)date2 {
+ return [[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2] ||
+ [date1 compare:date2] == NSOrderedAscending;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c
new file mode 100644
index 00000000..0bdb27e2
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+/* Automatically generated nanopb constant definitions */
+/* Generated by nanopb-0.3.9.5 */
+
+#include "firebasecore.nanopb.h"
+
+/* @@protoc_insertion_point(includes) */
+#if PB_PROTO_HEADER_VERSION != 30
+#error Regenerate this file with the current version of nanopb generator.
+#endif
+
+
+
+const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22] = {
+ PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, logs_proto_mobilesdk_ios_ICoreConfiguration, configuration_type, configuration_type, 0),
+ PB_FIELD( 7, UENUM , REPEATED, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_service_installed, configuration_type, 0),
+ PB_FIELD( 9, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, device_model, sdk_service_installed, 0),
+ PB_FIELD( 10, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_id, device_model, 0),
+ PB_FIELD( 12, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, bundle_id, app_id, 0),
+ PB_FIELD( 16, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, pod_name, bundle_id, 0),
+ PB_FIELD( 18, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, icore_version, pod_name, 0),
+ PB_FIELD( 19, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_version, icore_version, 0),
+ PB_FIELD( 20, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_name, sdk_version, 0),
+ PB_FIELD( 21, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_count, sdk_name, 0),
+ PB_FIELD( 22, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, os_version, app_count, 0),
+ PB_FIELD( 24, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, min_supported_ios_version, os_version, 0),
+ PB_FIELD( 25, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, use_default_app, min_supported_ios_version, 0),
+ PB_FIELD( 26, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployed_in_app_store, use_default_app, 0),
+ PB_FIELD( 27, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, dynamic_framework_count, deployed_in_app_store, 0),
+ PB_FIELD( 28, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, apple_framework_version, dynamic_framework_count, 0),
+ PB_FIELD( 29, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_zip_file, apple_framework_version, 0),
+ PB_FIELD( 30, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployment_type, using_zip_file, 0),
+ PB_FIELD( 31, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, platform_info, deployment_type, 0),
+ PB_FIELD( 33, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, swizzling_enabled, platform_info, 0),
+ PB_FIELD( 36, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_gdt, swizzling_enabled, 0),
+ PB_LAST_FIELD
+};
+
+
+
+
+
+
+
+/* @@protoc_insertion_point(eof) */
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h
new file mode 100644
index 00000000..59d1b3b0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+/* Automatically generated nanopb header */
+/* Generated by nanopb-0.3.9.5 */
+
+#ifndef PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED
+#define PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED
+#include <nanopb/pb.h>
+
+/* @@protoc_insertion_point(includes) */
+#if PB_PROTO_HEADER_VERSION != 30
+#error Regenerate this file with the current version of nanopb generator.
+#endif
+
+
+/* Enum definitions */
+typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType {
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE = 0,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE = 1,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK = 2
+} logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType;
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK+1))
+
+typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType {
+ logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE = 0,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_INTERNAL = 1,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_EAP = 2,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD = 3
+} logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType;
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType)(logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD+1))
+
+typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType {
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE = 0,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE = 1,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB = 2,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INVITE = 3,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN = 5,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_GCM = 6,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAPS = 7,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SCION = 8,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS = 9,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INDEXING = 10,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CONFIG = 11,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DURABLE_DEEP_LINKS = 12,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CRASH = 13,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH = 14,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE = 15,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE = 16,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING = 17,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT = 18,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG = 19,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS = 20,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_INVITES = 21,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI = 22,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE = 23,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE = 24,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE = 26,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE = 27,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT = 28,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL = 29,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER = 30,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING = 31,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS = 32,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_NATURAL_LANGUAGE = 33,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML = 34,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION = 35
+} logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType;
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION+1))
+
+typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName {
+ logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME = 0,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_GOOGLE = 1,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE = 2
+} logs_proto_mobilesdk_ios_ICoreConfiguration_PodName;
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_PodName)(logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE+1))
+
+typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType {
+ logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN = 0,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS = 1,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE = 2,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE = 3,
+ logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM = 4
+} logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType;
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM
+#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType)(logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM+1))
+
+/* Struct definitions */
+typedef struct _logs_proto_mobilesdk_ios_ICoreConfiguration {
+ bool has_configuration_type;
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType configuration_type;
+ pb_size_t sdk_service_installed_count;
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *sdk_service_installed;
+ pb_bytes_array_t *device_model;
+ pb_bytes_array_t *app_id;
+ pb_bytes_array_t *bundle_id;
+ bool has_pod_name;
+ logs_proto_mobilesdk_ios_ICoreConfiguration_PodName pod_name;
+ pb_bytes_array_t *icore_version;
+ pb_bytes_array_t *sdk_version;
+ bool has_sdk_name;
+ logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType sdk_name;
+ bool has_app_count;
+ int32_t app_count;
+ pb_bytes_array_t *os_version;
+ pb_bytes_array_t *min_supported_ios_version;
+ bool has_use_default_app;
+ bool use_default_app;
+ bool has_deployed_in_app_store;
+ bool deployed_in_app_store;
+ bool has_dynamic_framework_count;
+ int32_t dynamic_framework_count;
+ pb_bytes_array_t *apple_framework_version;
+ bool has_using_zip_file;
+ bool using_zip_file;
+ bool has_deployment_type;
+ logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType deployment_type;
+ pb_bytes_array_t *platform_info;
+ bool has_swizzling_enabled;
+ bool swizzling_enabled;
+ bool has_using_gdt;
+ bool using_gdt;
+/* @@protoc_insertion_point(struct:logs_proto_mobilesdk_ios_ICoreConfiguration) */
+} logs_proto_mobilesdk_ios_ICoreConfiguration;
+
+/* Default values for struct fields */
+
+/* Initializer values for message structs */
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_default {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0}
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_zero {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0}
+
+/* Field tags (for use in manual encoding/decoding) */
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_pod_name_tag 16
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_configuration_type_tag 1
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_icore_version_tag 18
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_version_tag 19
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_service_installed_tag 7
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_name_tag 20
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_device_model_tag 9
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_os_version_tag 22
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_id_tag 10
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_bundle_id_tag 12
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_min_supported_ios_version_tag 24
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_use_default_app_tag 25
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_count_tag 21
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployed_in_app_store_tag 26
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_dynamic_framework_count_tag 27
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_apple_framework_version_tag 28
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_zip_file_tag 29
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployment_type_tag 30
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_platform_info_tag 31
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_swizzling_enabled_tag 33
+#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_gdt_tag 36
+
+/* Struct field encoding specification for nanopb */
+extern const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22];
+
+/* Maximum encoded size of messages (where known) */
+/* logs_proto_mobilesdk_ios_ICoreConfiguration_size depends on runtime parameters */
+
+/* Message IDs (where set with "msgid" option) */
+#ifdef PB_MSGID
+
+#define FIREBASECORE_MESSAGES \
+
+
+#endif
+
+/* @@protoc_insertion_point(eof) */
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleDataTransport/GDTCORLibrary/Internal/GoogleDataTransportInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleDataTransport/GDTCORLibrary/Internal/GoogleDataTransportInternal.h
new file mode 100644
index 00000000..b5f6bc94
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleDataTransport/GDTCORLibrary/Internal/GoogleDataTransportInternal.h
@@ -0,0 +1,22 @@
+// Copyright 2020 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.
+
+// An umbrella header, for any other libraries in this repo to access Firebase Public and Private
+// headers. Any package manager complexity should be handled here.
+
+#if SWIFT_PACKAGE
+@import GoogleDataTransport;
+#else
+#import <GoogleDataTransport/GoogleDataTransport.h>
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h
new file mode 100644
index 00000000..2fb16226
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google
+ *
+ * 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface GULAppEnvironmentUtil : NSObject
+
+/// Indicates whether the app is from Apple Store or not. Returns NO if the app is on simulator,
+/// development environment or sideloaded.
++ (BOOL)isFromAppStore;
+
+/// Indicates whether the app is a Testflight app. Returns YES if the app has sandbox receipt.
+/// Returns NO otherwise.
++ (BOOL)isAppStoreReceiptSandbox;
+
+/// Indicates whether the app is on simulator or not at runtime depending on the device
+/// architecture.
++ (BOOL)isSimulator;
+
+/// The current device model. Returns an empty string if device model cannot be retrieved.
++ (NSString *)deviceModel;
+
+/// The current operating system version. Returns an empty string if the system version cannot be
+/// retrieved.
++ (NSString *)systemVersion;
+
+/// Indicates whether it is running inside an extension or an app.
++ (BOOL)isAppExtension;
+
+/// @return Returns @YES when is run on iOS version greater or equal to 7.0
++ (BOOL)isIOS7OrHigher DEPRECATED_MSG_ATTRIBUTE(
+ "Always `YES` because only iOS 8 and higher supported. The method will be removed.");
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h
new file mode 100644
index 00000000..9432dfc0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Stores either a date or a dictionary to a specified file.
+@interface GULHeartbeatDateStorage : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+@property(nonatomic, readonly) NSURL *fileURL;
+
+/**
+ * Default initializer.
+ * @param fileName The name of the file to store the date information.
+ * exist, it will be created if needed.
+ */
+- (instancetype)initWithFileName:(NSString *)fileName;
+
+/**
+ * Reads the date from the specified file for the given tag.
+ * @return Returns date if exists, otherwise `nil`.
+ */
+- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag;
+
+/**
+ * Saves the date for the specified tag in the specified file.
+ * @return YES on success, NO otherwise.
+ */
+- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainStorage.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainStorage.h
new file mode 100644
index 00000000..dc01a836
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainStorage.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// The class provides a convenient abstraction on top of the iOS Keychain API to save data.
+@interface GULKeychainStorage : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/** Initializes the keychain storage with Keychain Service name.
+ * @param service A Keychain Service name that will be used to store and retrieve objects. See also
+ * `kSecAttrService`.
+ */
+- (instancetype)initWithService:(NSString *)service;
+
+/**
+ * Get an object by key.
+ * @param key The key.
+ * @param objectClass The expected object class required by `NSSecureCoding`.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns a promise. It is resolved with an object stored by key if exists. It is resolved
+ * with `nil` when the object not found. It fails on a Keychain error.
+ */
+- (FBLPromise<id<NSSecureCoding>> *)getObjectForKey:(NSString *)key
+ objectClass:(Class)objectClass
+ accessGroup:(nullable NSString *)accessGroup;
+
+/**
+ * Saves the given object by the given key.
+ * @param object The object to store.
+ * @param key The key to store the object. If there is an existing object by the key, it will be
+ * overridden.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns which is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)setObject:(id<NSSecureCoding>)object
+ forKey:(NSString *)key
+ accessGroup:(nullable NSString *)accessGroup;
+
+/**
+ * Removes the object by the given key.
+ * @param key The key to store the object. If there is an existing object by the key, it will be
+ * overridden.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns which is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)removeObjectForKey:(NSString *)key
+ accessGroup:(nullable NSString *)accessGroup;
+
+#if TARGET_OS_OSX
+/// If not `nil`, then only this keychain will be used to save and read data (see
+/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests.
+@property(nonatomic, nullable) SecKeychainRef keychainRef;
+#endif // TARGET_OSX
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainUtils.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainUtils.h
new file mode 100644
index 00000000..de4bef2f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULKeychainUtils.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+FOUNDATION_EXPORT NSString *const kGULKeychainUtilsErrorDomain;
+
+/// Helper functions to access Keychain.
+@interface GULKeychainUtils : NSObject
+
+/** Fetches a keychain item data matching to the provided query.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemCopyMatching` for
+ * details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns Data for the first Keychain Item matching the provided query or `nil` if there is not
+ * such an item (`outError` will be `nil` in this case) or an error occurred.
+ */
++ (nullable NSData *)getItemWithQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** Stores data to a Keychain Item matching to the provided query. An existing Keychain Item
+ * matching the query parameters will be updated or a new will be created.
+ * @param item A Keychain Item data to store.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemAdd` and
+ * `SecItemUpdate` for details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns `YES` when data was successfully stored, `NO` otherwise.
+ */
++ (BOOL)setItem:(NSData *)item
+ withQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** Removes a Keychain Item matching to the provided query.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemDelete` for
+ * details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns `YES` if the item was removed successfully or doesn't exist, `NO` otherwise.
+ */
++ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULSecureCoding.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULSecureCoding.h
new file mode 100644
index 00000000..8484b395
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Environment/Private/GULSecureCoding.h
@@ -0,0 +1,36 @@
+// Copyright 2019 Google
+//
+// 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.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** The class wraps `NSKeyedArchiver` and `NSKeyedUnarchiver` API to provide a unified secure coding
+ * methods for iOS versions before and after 11.
+ */
+@interface GULSecureCoding : NSObject
+
++ (nullable id)unarchivedObjectOfClasses:(NSSet<Class> *)classes
+ fromData:(NSData *)data
+ error:(NSError **)outError;
+
++ (nullable id)unarchivedObjectOfClass:(Class)class
+ fromData:(NSData *)data
+ error:(NSError **)outError;
+
++ (nullable NSData *)archivedDataWithRootObject:(id<NSCoding>)object error:(NSError **)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Logger/Private/GULLogger.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Logger/Private/GULLogger.h
new file mode 100644
index 00000000..1146ee23
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/GoogleUtilities/Logger/Private/GULLogger.h
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2018 Google
+ *
+ * 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+#if SWIFT_PACKAGE
+@import GoogleUtilities_Logger;
+#else
+#import <GoogleUtilities/GULLoggerLevel.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The services used in the logger.
+ */
+typedef NSString *const GULLoggerService;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * Initialize GULLogger.
+ */
+extern void GULLoggerInitializeASL(void);
+
+/**
+ * Override log level to Debug.
+ */
+void GULLoggerForceDebug(void);
+
+/**
+ * Turn on logging to STDERR.
+ */
+extern void GULLoggerEnableSTDERR(void);
+
+/**
+ * Changes the default logging level of GULLoggerLevelNotice to a user-specified level.
+ * The default level cannot be set above GULLoggerLevelNotice if the app is running from App Store.
+ * (required) log level (one of the GULLoggerLevel enum values).
+ */
+extern void GULSetLoggerLevel(GULLoggerLevel loggerLevel);
+
+/**
+ * Checks if the specified logger level is loggable given the current settings.
+ * (required) log level (one of the GULLoggerLevel enum values).
+ */
+extern BOOL GULIsLoggableLevel(GULLoggerLevel loggerLevel);
+
+/**
+ * Register version to include in logs.
+ * (required) version
+ */
+extern void GULLoggerRegisterVersion(const char *version);
+
+/**
+ * Logs a message to the Xcode console and the device log. If running from AppStore, will
+ * not log any messages with a level higher than GULLoggerLevelNotice to avoid log spamming.
+ * (required) log level (one of the GULLoggerLevel enum values).
+ * (required) service name of type GULLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+extern void GULLogBasic(GULLoggerLevel level,
+ GULLoggerService service,
+ BOOL forceLog,
+ NSString *messageCode,
+ NSString *message,
+// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable
+// See: http://stackoverflow.com/q/29095469
+#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX
+ va_list args_ptr
+#else
+ va_list _Nullable args_ptr
+#endif
+);
+
+/**
+ * The following functions accept the following parameters in order:
+ * (required) service name of type GULLoggerService.
+ * (required) message code starting from "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * See go/firebase-log-proposal for details.
+ * (required) message string which can be a format string.
+ * (optional) the list of arguments to substitute into the format string.
+ * Example usage:
+ * GULLogError(kGULLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name);
+ */
+extern void GULLogError(GULLoggerService service,
+ BOOL force,
+ NSString *messageCode,
+ NSString *message,
+ ...) NS_FORMAT_FUNCTION(4, 5);
+extern void GULLogWarning(GULLoggerService service,
+ BOOL force,
+ NSString *messageCode,
+ NSString *message,
+ ...) NS_FORMAT_FUNCTION(4, 5);
+extern void GULLogNotice(GULLoggerService service,
+ BOOL force,
+ NSString *messageCode,
+ NSString *message,
+ ...) NS_FORMAT_FUNCTION(4, 5);
+extern void GULLogInfo(GULLoggerService service,
+ BOOL force,
+ NSString *messageCode,
+ NSString *message,
+ ...) NS_FORMAT_FUNCTION(4, 5);
+extern void GULLogDebug(GULLoggerService service,
+ BOOL force,
+ NSString *messageCode,
+ NSString *message,
+ ...) NS_FORMAT_FUNCTION(4, 5);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+@interface GULLoggerWrapper : NSObject
+
+/**
+ * Objective-C wrapper for GULLogBasic to allow weak linking to GULLogger
+ * (required) log level (one of the GULLoggerLevel enum values).
+ * (required) service name of type GULLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+
++ (void)logWithLevel:(GULLoggerLevel)level
+ withService:(GULLoggerService)service
+ withCode:(NSString *)messageCode
+ withMessage:(NSString *)message
+ withArgs:(va_list)args;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h
new file mode 100644
index 00000000..69c40721
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** If present, is a BOOL wrapped in an NSNumber. */
+#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey"
+
+/** If present, is an int32_t wrapped in an NSNumber. */
+#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey"
+
+/** If present, is an NSString. */
+#define kFIRCDSdkNameKey @"FIRCDSdkNameKey"
+
+/** If present, is an NSString. */
+#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey"
+
+/** If present, is an int32_t wrapped in an NSNumber. */
+#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey"
+
+/** If present, is an NSString. */
+#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey"
+
+/** If present, is an NSString. */
+#define kFIRCDBundleIDKey @"FIRCDBundleID"
+
+/** If present, is a BOOL wrapped in an NSNumber. */
+#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey"
+
+/** If present, is an NSString. */
+#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey"
+
+/** If present, is an NSString. */
+#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey"
+
+/** Defines the interface of a data object needed to log diagnostics data. */
+@protocol FIRCoreDiagnosticsData <NSObject>
+
+@required
+
+/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */
+@property(nonatomic) NSDictionary<NSString *, id> *diagnosticObjects;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h
new file mode 100644
index 00000000..2b0eb710
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 Google
+ *
+ * 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.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FIRCoreDiagnosticsData.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */
+@protocol FIRCoreDiagnosticsInterop <NSObject>
+
+/** Sends the given diagnostics data.
+ *
+ * @param diagnosticsData The diagnostics data object to send.
+ */
++ (void)sendDiagnosticsData:(id<FIRCoreDiagnosticsData>)diagnosticsData;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/LICENSE b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/README.md b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/README.md
new file mode 100644
index 00000000..1d9f0f67
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseCoreDiagnostics/README.md
@@ -0,0 +1,298 @@
+[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+
+[![Actions Status][gh-abtesting-badge]][gh-actions]
+[![Actions Status][gh-auth-badge]][gh-actions]
+[![Actions Status][gh-core-badge]][gh-actions]
+[![Actions Status][gh-crashlytics-badge]][gh-actions]
+[![Actions Status][gh-database-badge]][gh-actions]
+[![Actions Status][gh-datatransport-badge]][gh-actions]
+[![Actions Status][gh-dynamiclinks-badge]][gh-actions]
+[![Actions Status][gh-firebasepod-badge]][gh-actions]
+[![Actions Status][gh-firestore-badge]][gh-actions]
+[![Actions Status][gh-functions-badge]][gh-actions]
+[![Actions Status][gh-inappmessaging-badge]][gh-actions]
+[![Actions Status][gh-interop-badge]][gh-actions]
+[![Actions Status][gh-messaging-badge]][gh-actions]
+[![Actions Status][gh-remoteconfig-badge]][gh-actions]
+[![Actions Status][gh-storage-badge]][gh-actions]
+[![Actions Status][gh-symbolcollision-badge]][gh-actions]
+[![Actions Status][gh-zip-badge]][gh-actions]
+[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
+
+# Firebase Apple Open Source Development
+
+This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics,
+FirebasePerformance, and FirebaseML.
+
+The repository also includes GoogleUtilities source. The
+[GoogleUtilities](GoogleUtilities/README.md) pod is
+a set of utilities used by Firebase and other Google products.
+
+Firebase is an app development platform with tools to help you build, grow and
+monetize your app. More information about Firebase can be found at
+[https://firebase.google.com](https://firebase.google.com).
+
+## Installation
+
+See the three subsections for details about three different installation methods.
+1. [Standard pod install](README.md#standard-pod-install)
+1. [Installing from the GitHub repo](README.md#installing-from-github)
+1. [Experimental Carthage](README.md#carthage-ios-only)
+
+### Standard pod install
+
+Go to
+[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
+
+### Installing from GitHub
+
+For releases starting with 5.0.0, the source for each release is also deployed
+to CocoaPods master and available via standard
+[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
+
+These instructions can be used to access the Firebase repo at other branches,
+tags, or commits.
+
+#### Background
+
+See
+[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
+for instructions and options about overriding pod source locations.
+
+#### Accessing Firebase Source Snapshots
+
+All of the official releases are tagged in this repo and available via CocoaPods. To access a local
+source snapshot or unreleased branch, use Podfile directives like the following:
+
+To access FirebaseFirestore via a branch:
+```
+pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+```
+
+To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
+
+```
+pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
+pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
+```
+
+### Carthage (iOS only)
+
+Instructions for the experimental Carthage distribution are at
+[Carthage](Carthage.md).
+
+### Rome
+
+Instructions for installing binary frameworks via
+[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
+
+### Using Firebase from a Framework or a library
+
+[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
+
+## Development
+
+To develop Firebase software in this repository, ensure that you have at least
+the following software:
+
+ * Xcode 10.3 (or later)
+ * CocoaPods 1.7.2 (or later)
+ * [CocoaPods generate](https://github.com/square/cocoapods-generate)
+
+For the pod that you want to develop:
+
+`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+
+Note: If the CocoaPods cache is out of date, you may need to run
+`pod repo update` before the `pod gen` command.
+
+Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
+those platforms. Since 10.2, Xcode does not properly handle multi-platform
+CocoaPods workspaces.
+
+Firestore has a self contained Xcode project. See
+[Firestore/README.md](Firestore/README.md).
+
+### Development for Catalyst
+* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+* Check the Mac box in the App-iOS Build Settings
+* Sign the App in the Settings Signing & Capabilities tab
+* Click Pods in the Project Manager
+* Add Signing to the iOS host app and unit test targets
+* Select the Unit-unit scheme
+* Run it to build and test
+
+### Adding a New Firebase Pod
+
+See [AddNewPod.md](AddNewPod.md).
+
+### Managing Headers and Imports
+
+See [HeadersImports.md](HeadersImports.md).
+
+### Code Formatting
+
+To ensure that the code is formatted consistently, run the script
+[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
+before creating a PR.
+
+Travis will verify that any code changes are done in a style compliant way. Install
+`clang-format` and `swiftformat`:
+
+```
+brew install clang-format
+brew install swiftformat
+```
+
+### Running Unit Tests
+
+Select a scheme and press Command-u to build a component and run its unit tests.
+
+#### Viewing Code Coverage (Deprecated)
+
+First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
+
+After running the `AllUnitTests_iOS` scheme in Xcode, execute
+`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
+at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
+
+### Running Sample Apps
+In order to run the sample apps and integration tests, you'll need valid
+`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
+files without real values, but can be replaced with real plist files. To get your own
+`GoogleService-Info.plist` files:
+
+1. Go to the [Firebase Console](https://console.firebase.google.com/)
+2. Create a new Firebase project, if you don't already have one
+3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
+identifier (e.g. `com.google.Database-Example`)
+4. Download the resulting `GoogleService-Info.plist` and add it to the Xcode project.
+
+## Specific Component Instructions
+See the sections below for any special instructions for those components.
+
+### Firebase Auth
+
+If you're doing specific Firebase Auth development, see
+[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
+building and running the FirebaseAuth pod along with various samples and tests.
+
+### Firebase Database
+
+The Firebase Database Integration tests can be run against a locally running Database Emulator
+or against a production instance.
+
+To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before
+running the integration test.
+
+To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to
+`FirebaseDatabase/Tests/Resources/GoogleService-Info.plist`. Your Security Rule must be set to
+[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are
+running.
+
+### Firebase Storage
+
+To run the Storage Integration tests, follow the instructions in
+[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
+
+#### Push Notifications
+
+Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
+In order to actually test receiving push notifications, you will need to:
+
+1. Change the bundle identifier of the sample app to something you own in your Apple Developer
+account, and enable that App ID for push notifications.
+2. You'll also need to
+[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
+at **Project Settings > Cloud Messaging > [Your Firebase App]**.
+3. Ensure your iOS device is added to your Apple Developer portal as a test device.
+
+#### iOS Simulator
+
+The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
+In order to receive push notifications, you'll have to follow the steps above and run the app on a
+physical device.
+
+## Community Supported Efforts
+
+We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
+very grateful! We'd like to empower as many developers as we can to be able to use Firebase and
+participate in the Firebase community.
+
+### tvOS, macOS, watchOS and Catalyst
+Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
+tvOS, macOS, watchOS and Catalyst.
+
+For tvOS, checkout the [Sample](Example/tvOSSample).
+For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
+[Independent Watch App Sample](Example/watchOSSample).
+
+Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
+repository is actively developed primarily for iOS. While we can catch basic unit test issues with
+Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
+encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
+
+During app setup in the console, you may get to a step that mentions something like "Checking if the app
+has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
+**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
+
+To install, add a subset of the following to the Podfile:
+
+```
+pod 'Firebase/ABTesting' # No watchOS support yet
+pod 'Firebase/Auth' # No watchOS support yet
+pod 'Firebase/Crashlytics' # No watchOS support yet
+pod 'Firebase/Database' # No watchOS support yet
+pod 'Firebase/Firestore' # No watchOS support yet
+pod 'Firebase/Functions' # No watchOS support yet
+pod 'Firebase/Messaging'
+pod 'Firebase/RemoteConfig' # No watchOS support yet
+pod 'Firebase/Storage'
+```
+
+#### Additional Catalyst Notes
+
+* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
+to Build Settings.
+* FirebaseFirestore requires signing the
+[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
+
+## Roadmap
+
+See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
+plans and directions.
+
+## Contributing
+
+See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
+iOS SDK.
+
+## License
+
+The contents of this repository is licensed under the
+[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
+
+Your use of Firebase is governed by the
+[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
+
+[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
+[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg
+[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
+[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
+[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg
+[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg
+[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
+[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
+[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
+[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
+[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg
+[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg
+[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
+[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
+[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg
+[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
+[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
+[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg