lpw
2021-01-26 454098c2f508505fc55c60c577250b8610abaaf3
3.9.2
14 files deleted
8 files renamed
28 files added
1 files copied
37 files modified
2841 ■■■■■ changed files
WAFirebaseImpl.podspec 2 ●●● patch | view | raw | blame | history
WAFirebaseImpl/3.9.2/WAFirebaseImpl.podspec 25 ●●●●● patch | view | raw | blame | history
config/wa_sdk_impl_config_firebase.xml 2 ●●● patch | view | raw | blame | history
frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector patch | view | raw | blame | history
frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap 11 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/FirebaseAnalytics patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h 33 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h 25 ●●●● patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h 15 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h 41 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h 1 ●●●● patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseAnalytics.framework/Modules/module.modulemap 15 ●●●● patch | view | raw | blame | history
frameworks/FirebaseCore.framework/FirebaseCore patch | view | raw | blame | history
frameworks/FirebaseCore.framework/Headers/FIROptions.h 7 ●●●● patch | view | raw | blame | history
frameworks/FirebaseCore.framework/Headers/FIRVersion.h 9 ●●●● patch | view | raw | blame | history
frameworks/FirebaseCore.framework/Headers/FirebaseCore.h 1 ●●●● patch | view | raw | blame | history
frameworks/FirebaseCore.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/Headers/FIRCoreDiagnostics.h 7 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/Headers/FIRCoreDiagnosticsData.h 61 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/Headers/FIRCoreDiagnosticsInterop.h 34 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/Headers/FirebaseCoreDiagnostics-umbrella.h 11 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/Headers/GoogleDataTransportInternal.h 18 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/Headers/firebasecore.nanopb.h 193 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseCoreDiagnostics.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseInstallations.framework/FirebaseInstallations patch | view | raw | blame | history
frameworks/FirebaseInstallations.framework/Headers/FIRInstallations.h 27 ●●●●● patch | view | raw | blame | history
frameworks/FirebaseInstallations.framework/Headers/FIRInstallationsAuthTokenResult.h 6 ●●●● patch | view | raw | blame | history
frameworks/FirebaseInstallations.framework/Headers/FirebaseInstallations.h 1 ●●●● patch | view | raw | blame | history
frameworks/FirebaseInstallations.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement patch | view | raw | blame | history
frameworks/GoogleAppMeasurement.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap 13 ●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/GoogleDataTransport patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCORAssert.h 95 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCOREndpoints.h 36 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCORLifecycle.h 63 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCORPlatform.h 210 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCORRegistrar.h 50 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCORStorageEventSelector.h 61 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCORStorageProtocol.h 128 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GDTCORUploader.h 59 ●●●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Headers/GoogleDataTransport.h 4 ●●● patch | view | raw | blame | history
frameworks/GoogleDataTransport.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/GoogleUtilities patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULAppDelegateSwizzler.h 107 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULAppEnvironmentUtil.h 15 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULApplication.h 50 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULHeartbeatDateStorage.h patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULKeychainStorage.h patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULKeychainUtils.h patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULLogger.h 8 ●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULLoggerCodes.h 56 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULMutableDictionary.h 46 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULNetwork.h 87 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULNetworkConstants.h 71 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULNetworkLoggerProtocol.h 49 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULNetworkMessageCode.h 47 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULNetworkURLSession.h 62 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULObjectSwizzler.h 123 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULOriginalIMPConvenienceMacros.h 207 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULReachabilityChecker.h 79 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULSceneDelegateSwizzler.h 76 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULSecureCoding.h patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULSwizzledObject.h 44 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULSwizzler.h 71 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULURLSessionDataResponse.h 14 ●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GULUserDefaults.h 110 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/GoogleUtilities-umbrella.h 24 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Headers/NSURLSession+GULPromises.h 37 ●●●●● patch | view | raw | blame | history
frameworks/GoogleUtilities.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/PromisesObjC.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/PromisesObjC.framework/PromisesObjC patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/Headers/WAFirebaseImpl.h 2 ●●● patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/Info.plist patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/WAFirebaseImpl patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeDirectory patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeRequirements patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeRequirements-1 patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeResources 8 ●●●● patch | view | raw | blame | history
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeSignature patch | view | raw | blame | history
frameworks/nanopb.framework/Headers/pb.h 2 ●●● patch | view | raw | blame | history
frameworks/nanopb.framework/Headers/pb_encode.h 2 ●●● patch | view | raw | blame | history
frameworks/nanopb.framework/Info.plist 20 ●●●●● patch | view | raw | blame | history
frameworks/nanopb.framework/nanopb patch | view | raw | blame | history
WAFirebaseImpl.podspec
@@ -9,7 +9,7 @@
Pod::Spec.new do |s|
s.name = 'WAFirebaseImpl'
s.version = '3.8.5'
s.version = '3.9.2'
s.summary = 'WAFirebaseImpl framework in testing environment.'
s.license = 'MIT'
s.author = { "Wuyx" => "wuyixin_gh@gamehollywood.com" }
WAFirebaseImpl/3.9.2/WAFirebaseImpl.podspec
New file
@@ -0,0 +1,25 @@
#
#  Be sure to run `pod spec lint WAFbImpl.podspec' to ensure this is a
#  valid spec and to remove all comments including this before submitting the spec.
#
#  To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
#  To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
#
Pod::Spec.new do |s|
s.name = 'WAFirebaseImpl'
s.version = '3.9.2'
s.summary = 'WAFirebaseImpl framework in testing environment.'
s.license = 'MIT'
s.author = { "Wuyx" => "wuyixin_gh@gamehollywood.com" }
s.homepage = 'http://repo.wingsdk.cn:8082/summary/WAFirebaseImpl.git'
s.source = { :git => "http://admin@repo.wingsdk.cn:8082/r/WAFirebaseImpl.git" , :tag => s.version}
s.platform = :ios
s.ios.deployment_target = "7.0"
s.vendored_frameworks = 'frameworks/*.framework'
s.resources = ['config/*.xml']
s.requires_arc = true
s.dependency 'WASdkIntf'
s.dependency 'WASdkImpl'
end
config/wa_sdk_impl_config_firebase.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <version val="Firebase 3.8.5"/>
    <version val="Firebase 3.9.2"/>
    <comps>
        <!-- 公共模块 -->
frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector
Binary files differ
frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap
File was deleted
frameworks/FirebaseAnalytics.framework/FirebaseAnalytics
old mode 100755 new mode 100644 Binary files differ
frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h
old mode 100755 new mode 100644
frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h
New file
@@ -0,0 +1,33 @@
#import <Foundation/Foundation.h>
#import "FIRAnalytics.h"
NS_ASSUME_NONNULL_BEGIN
/// The type of consent to set. Supported consent types are `ConsentType.adStorage` and
/// `ConsentType.analyticsStorage`. Omitting a type retains its previous status.
typedef NSString *FIRConsentType NS_TYPED_ENUM NS_SWIFT_NAME(ConsentType);
extern FIRConsentType const FIRConsentTypeAdStorage;
extern FIRConsentType const FIRConsentTypeAnalyticsStorage;
/// The status value of the consent type. Supported statuses are `ConsentStatus.granted` and
/// `ConsentStatus.denied`.
typedef NSString *FIRConsentStatus NS_TYPED_ENUM NS_SWIFT_NAME(ConsentStatus);
extern FIRConsentStatus const FIRConsentStatusDenied;
extern FIRConsentStatus const FIRConsentStatusGranted;
/// Sets the applicable end user consent state.
@interface FIRAnalytics (Consent)
/// Sets the applicable end user consent state (e.g. for device identifiers) for this app on this
/// device. Use the consent settings to specify individual consent type values. Settings are
/// persisted across app sessions. By default consent types are set to `ConsentStatus.granted`.
///
/// @param consentSettings An NSDictionary of consent types. Supported consent type keys are
///   `ConsentType.adStorage` and `ConsentType.analyticsStorage`. Valid values are
///   `ConsentStatus.granted` and `ConsentStatus.denied`.
+ (void)setConsent:(NSDictionary<FIRConsentType, FIRConsentStatus> *)consentSettings;
@end
NS_ASSUME_NONNULL_END
frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h
old mode 100755 new mode 100644
@@ -25,14 +25,26 @@
///     <li>ad_activeview</li>
///     <li>ad_click</li>
///     <li>ad_exposure</li>
///     <li>ad_impression</li>
///     <li>ad_query</li>
///     <li>ad_reward</li>
///     <li>adunit_exposure</li>
///     <li>app_background</li>
///     <li>app_clear_data</li>
///     <li>app_exception</li>
///     <li>app_remove</li>
///     <li>app_store_refund</li>
///     <li>app_store_subscription_cancel</li>
///     <li>app_store_subscription_convert</li>
///     <li>app_store_subscription_renew</li>
///     <li>app_update</li>
///     <li>app_upgrade</li>
///     <li>dynamic_link_app_open</li>
///     <li>dynamic_link_app_update</li>
///     <li>dynamic_link_first_open</li>
///     <li>error</li>
///     <li>firebase_campaign</li>
///     <li>first_open</li>
///     <li>first_visit</li>
///     <li>in_app_purchase</li>
///     <li>notification_dismiss</li>
///     <li>notification_foreground</li>
@@ -40,6 +52,7 @@
///     <li>notification_receive</li>
///     <li>os_update</li>
///     <li>session_start</li>
///     <li>session_start_with_rollout</li>
///     <li>user_engagement</li>
/// </ul>
///
@@ -128,8 +141,11 @@
///     session terminates.
+ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval;
/// The unique ID for this instance of the application.
+ (NSString *)appInstanceID;
/// Returns the unique ID for this instance of the application or nil if
/// `ConsentType.analyticsStorage` has been set to `ConsentStatus.denied`.
///
/// @see `FIRAnalytics+Consent.h`
+ (nullable NSString *)appInstanceID;
/// Clears all analytics data for this instance from the device and resets the app instance ID.
/// FIRAnalyticsConfiguration values will be reset to the default values.
@@ -149,6 +165,9 @@
///     that parameter. Passing in a nil dictionary will clear all parameters.
+ (void)setDefaultEventParameters:(nullable NSDictionary<NSString *, id> *)parameters;
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END
frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h
old mode 100755 new mode 100644
@@ -52,6 +52,21 @@
static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) =
    @"add_to_wishlist";
/// Ad Impression event. This event signifies when a user sees an ad impression. Note: If you supply
/// the @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter
/// so that revenue metrics can be computed accurately. Params:
///
/// <ul>
///     <li>@c kFIRParameterAdPlatform (NSString) (optional)</li>
///     <li>@c kFIRParameterAdFormat (NSString) (optional)</li>
///     <li>@c kFIRParameterAdSource (NSString) (optional)</li>
///     <li>@c kFIRParameterAdUnitName (NSString) (optional)</li>
///     <li>@c kFIRParameterCurrency (NSString) (optional)</li>
///     <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
/// </ul>
static NSString *const kFIREventAdImpression NS_SWIFT_NAME(AnalyticsEventAdImpression) =
    @"ad_impression";
/// App Open event. By logging this event when an App becomes active, developers can understand how
/// often users leave and return during the course of a Session. Although Sessions are automatically
/// reported, this event can provide further clarification around the continuous engagement of
frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
old mode 100755 new mode 100644
@@ -22,6 +22,17 @@
static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) =
    @"achievement_id";
/// The ad format (e.g. Banner, Interstitial, Rewarded, Native, Rewarded Interstitial, Instream).
/// (NSString).
/// <pre>
///     NSDictionary *params = @{
///       kFIRParameterAdFormat : @"Banner",
///       // ...
///     };
/// </pre>
static NSString *const kFIRParameterAdFormat NS_SWIFT_NAME(AnalyticsParameterAdFormat) =
    @"ad_format";
/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format.
/// <pre>
///     NSDictionary *params = @{
@@ -32,6 +43,36 @@
static NSString *const kFIRParameterAdNetworkClickID
    NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid";
/// The ad platform (e.g. MoPub, IronSource) (NSString).
/// <pre>
///     NSDictionary *params = @{
///       kFIRParameterAdPlatform : @"MoPub",
///       // ...
///     };
/// </pre>
static NSString *const kFIRParameterAdPlatform NS_SWIFT_NAME(AnalyticsParameterAdPlatform) =
    @"ad_platform";
/// The ad source (e.g. AdColony) (NSString).
/// <pre>
///     NSDictionary *params = @{
///       kFIRParameterAdSource : @"AdColony",
///       // ...
///     };
/// </pre>
static NSString *const kFIRParameterAdSource NS_SWIFT_NAME(AnalyticsParameterAdSource) =
    @"ad_source";
/// The ad unit name (e.g. Banner_03) (NSString).
/// <pre>
///     NSDictionary *params = @{
///       kFIRParameterAdUnitName : @"Banner_03",
///       // ...
///     };
/// </pre>
static NSString *const kFIRParameterAdUnitName NS_SWIFT_NAME(AnalyticsParameterAdUnitName) =
    @"ad_unit_name";
/// A product affiliation to designate a supplying company or brick and mortar store location
/// (NSString). <pre>
///     NSDictionary *params = @{
frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h
old mode 100755 new mode 100644
frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
old mode 100755 new mode 100644
@@ -1,4 +1,5 @@
#import "FIRAnalytics+AppDelegate.h"
#import "FIRAnalytics+Consent.h"
#import "FIRAnalytics.h"
#import "FIREventNames.h"
#import "FIRParameterNames.h"
frameworks/FirebaseAnalytics.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>FirebaseAnalytics</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-FirebaseAnalytics</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>FirebaseAnalytics</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>7.4.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/FirebaseAnalytics.framework/Modules/module.modulemap
old mode 100755 new mode 100644
@@ -1,12 +1,13 @@
framework module FirebaseAnalytics {
  umbrella header "FirebaseAnalytics.h"
  export *
  module * { export * }
  link "sqlite3"
  link "z"
  link framework "CoreData"
umbrella header "FirebaseAnalytics.h"
export *
module * { export * }
  link framework "CoreTelephony"
  link framework "Foundation"
  link framework "Security"
  link framework "StoreKit"
  link framework "SystemConfiguration"
  link framework "UIKit"
  link "c++"
  link "sqlite3"
  link "z"
}
frameworks/FirebaseCore.framework/FirebaseCore
Binary files differ
frameworks/FirebaseCore.framework/Headers/FIROptions.h
@@ -106,7 +106,7 @@
 * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
 * Returns nil if the plist file does not exist or is invalid.
 */
- (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath;
- (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath NS_DESIGNATED_INITIALIZER;
/**
 * Initializes a customized instance of FIROptions with required fields. Use the mutable properties
@@ -115,9 +115,12 @@
// clang-format off
- (instancetype)initWithGoogleAppID:(NSString *)googleAppID
                        GCMSenderID:(NSString *)GCMSenderID
    NS_SWIFT_NAME(init(googleAppID:gcmSenderID:));
    NS_SWIFT_NAME(init(googleAppID:gcmSenderID:)) NS_DESIGNATED_INITIALIZER;
// clang-format on
/** Unavailable. Please use `init(contentsOfFile:)` or `init(googleAppID:gcmSenderID:)` instead. */
- (instancetype)init NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END
frameworks/FirebaseCore.framework/Headers/FIRVersion.h
File was renamed from frameworks/FirebaseInstallations.framework/Headers/FIRInstallationsVersion.h
@@ -1,5 +1,5 @@
/*
 * Copyright 2019 Google
 * 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.
@@ -16,4 +16,9 @@
#import <Foundation/Foundation.h>
FOUNDATION_EXPORT const char *const FIRInstallationsVersionStr;
NS_ASSUME_NONNULL_BEGIN
NS_SWIFT_NAME(FirebaseVersion())
NSString* FIRFirebaseVersion(void);
NS_ASSUME_NONNULL_END
frameworks/FirebaseCore.framework/Headers/FirebaseCore.h
@@ -18,3 +18,4 @@
#import "FIRConfiguration.h"
#import "FIRLoggerLevel.h"
#import "FIROptions.h"
#import "FIRVersion.h"
frameworks/FirebaseCore.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>FirebaseCore</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-FirebaseCore</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>FirebaseCore</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>7.4.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics
Binary files differ
frameworks/FirebaseCoreDiagnostics.framework/Headers/FIRCoreDiagnostics.h
copy from frameworks/FirebaseInstallations.framework/Headers/FIRInstallationsVersion.h copy to frameworks/FirebaseCoreDiagnostics.framework/Headers/FIRCoreDiagnostics.h
File was copied from frameworks/FirebaseInstallations.framework/Headers/FIRInstallationsVersion.h
@@ -1,5 +1,5 @@
/*
 * Copyright 2019 Google
 * 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.
@@ -14,6 +14,5 @@
 * limitations under the License.
 */
#import <Foundation/Foundation.h>
FOUNDATION_EXPORT const char *const FIRInstallationsVersionStr;
// There are no actual public headers in the lib. This is a dummy public header to prevent Cocoapods
// from adding all internal headers as public.
frameworks/FirebaseCoreDiagnostics.framework/Headers/FIRCoreDiagnosticsData.h
File was deleted
frameworks/FirebaseCoreDiagnostics.framework/Headers/FIRCoreDiagnosticsInterop.h
File was deleted
frameworks/FirebaseCoreDiagnostics.framework/Headers/FirebaseCoreDiagnostics-umbrella.h
@@ -10,16 +10,7 @@
#endif
#endif
#import "firebasecore.nanopb.h"
#import "GoogleDataTransportInternal.h"
#import "GULAppEnvironmentUtil.h"
#import "GULHeartbeatDateStorage.h"
#import "GULKeychainStorage.h"
#import "GULKeychainUtils.h"
#import "GULSecureCoding.h"
#import "GULLogger.h"
#import "FIRCoreDiagnosticsData.h"
#import "FIRCoreDiagnosticsInterop.h"
#import "FIRCoreDiagnostics.h"
FOUNDATION_EXPORT double FirebaseCoreDiagnosticsVersionNumber;
FOUNDATION_EXPORT const unsigned char FirebaseCoreDiagnosticsVersionString[];
frameworks/FirebaseCoreDiagnostics.framework/Headers/GoogleDataTransportInternal.h
File was deleted
frameworks/FirebaseCoreDiagnostics.framework/Headers/firebasecore.nanopb.h
File was deleted
frameworks/FirebaseCoreDiagnostics.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>FirebaseCoreDiagnostics</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-FirebaseCoreDiagnostics</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>FirebaseCoreDiagnostics</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>7.4.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/FirebaseInstallations.framework/FirebaseInstallations
Binary files differ
frameworks/FirebaseInstallations.framework/Headers/FIRInstallations.h
@@ -22,9 +22,11 @@
NS_ASSUME_NONNULL_BEGIN
/** A notification with this name is sent each time an installation is created or deleted. */
FOUNDATION_EXPORT const NSNotificationName FIRInstallationIDDidChangeNotification;
FOUNDATION_EXPORT const NSNotificationName FIRInstallationIDDidChangeNotification
    NS_SWIFT_NAME(InstallationIDDidChange);
/** `userInfo` key for the `FirebaseApp.name` in `FIRInstallationIDDidChangeNotification`. */
FOUNDATION_EXPORT NSString *const kFIRInstallationIDDidChangeNotificationAppNameKey;
FOUNDATION_EXPORT NSString *const kFIRInstallationIDDidChangeNotificationAppNameKey
    NS_SWIFT_NAME(InstallationIDDidChangeAppNameKey);
/**
 * An installation ID handler block.
@@ -83,9 +85,9 @@
- (void)installationIDWithCompletion:(FIRInstallationsIDHandler)completion;
/**
 * Retrieves (locally if it exists or from the server) a valid authorization token. An existing
 * token may be invalidated or expired, so it is recommended to fetch the auth token before each
 * server request. The method does the same as `Installations.authTokenForcingRefresh(:,
 * Retrieves (locally if it exists or from the server) a valid installation auth token. An existing
 * token may be invalidated or expired, so it is recommended to fetch the installation auth token
 * before each server request. The method does the same as `Installations.authTokenForcingRefresh(:,
 * completion:)` with forcing refresh `NO`.
 * @param completion A completion handler which is invoked when the operation completes. See
 * `InstallationsTokenHandler` for additional details.
@@ -93,13 +95,14 @@
- (void)authTokenWithCompletion:(FIRInstallationsTokenHandler)completion;
/**
 * Retrieves (locally or from the server depending on `forceRefresh` value) a valid authorization
 * token. An existing token may be invalidated or expire, so it is recommended to fetch the auth
 * token before each server request. This method should be used with `forceRefresh == YES` when e.g.
 * a request with the previously fetched auth token failed with "Not Authorized" error.
 * @param forceRefresh If `YES` then the locally cached auth token will be ignored and a new one
 * will be requested from the server. If `NO`, then the locally cached auth token will be returned
 * if exists and has not expired yet.
 * Retrieves (locally or from the server depending on `forceRefresh` value) a valid installation
 * auth token. An existing token may be invalidated or expire, so it is recommended to fetch the
 * installation auth token before each server request. This method should be used with `forceRefresh
 * == YES` when e.g. a request with the previously fetched installation auth token failed with "Not
 * Authorized" error.
 * @param forceRefresh If `YES` then the locally cached installation auth token will be ignored and
 * a new one will be requested from the server. If `NO`, then the locally cached installation auth
 * token will be returned if exists and has not expired yet.
 * @param completion  A completion handler which is invoked when the operation completes. See
 * `InstallationsTokenHandler` for additional details.
 */
frameworks/FirebaseInstallations.framework/Headers/FIRInstallationsAuthTokenResult.h
@@ -18,14 +18,14 @@
NS_ASSUME_NONNULL_BEGIN
/** The class represents a result of the auth token request. */
/** The class represents a result of the installation auth token request. */
NS_SWIFT_NAME(InstallationsAuthTokenResult)
@interface FIRInstallationsAuthTokenResult : NSObject
/** The authorization token string. */
/** The installation auth token string. */
@property(nonatomic, readonly) NSString *authToken;
/** The auth token expiration date. */
/** The installation auth token expiration date. */
@property(nonatomic, readonly) NSDate *expirationDate;
@end
frameworks/FirebaseInstallations.framework/Headers/FirebaseInstallations.h
@@ -17,4 +17,3 @@
#import "FIRInstallations.h"
#import "FIRInstallationsAuthTokenResult.h"
#import "FIRInstallationsErrors.h"
#import "FIRInstallationsVersion.h"
frameworks/FirebaseInstallations.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>FirebaseInstallations</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-FirebaseInstallations</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>FirebaseInstallations</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>7.4.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement
old mode 100755 new mode 100644 Binary files differ
frameworks/GoogleAppMeasurement.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>GoogleAppMeasurement</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-GoogleAppMeasurement</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>GoogleAppMeasurement</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>7.4.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap
old mode 100755 new mode 100644
@@ -1,11 +1,10 @@
framework module GoogleAppMeasurement {
  export *
  module * { export * }
umbrella header "GoogleAppMeasurement-umbrella.h"
export *
module * { export * }
  link framework "Security"
  link framework "SystemConfiguration"
  link "c++"
  link "sqlite3"
  link "z"
  link framework "CoreData"
  link framework "Security"
  link framework "StoreKit"
  link framework "SystemConfiguration"
  link framework "UIKit"
}
frameworks/GoogleDataTransport.framework/GoogleDataTransport
Binary files differ
frameworks/GoogleDataTransport.framework/Headers/GDTCORAssert.h
File was deleted
frameworks/GoogleDataTransport.framework/Headers/GDTCOREndpoints.h
New file
@@ -0,0 +1,36 @@
/*
 * Copyright 2018 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.
 */
#import <Foundation/Foundation.h>
#import "GDTCORTargets.h"
NS_ASSUME_NONNULL_BEGIN
/* Class that manages the endpoints used by Google data transport library. */
@interface GDTCOREndpoints : NSObject
- (instancetype)init NS_UNAVAILABLE;
/** Returns the upload URL for a target specified. If the target is not available, returns nil.
 *
 *  @param target GoogleDataTransport target for which the upload URL is being looked up for.
 *  @return URL that will be used for uploading the events for the provided target.
 */
+ (nullable NSURL *)uploadURLForTarget:(GDTCORTarget)target;
@end
NS_ASSUME_NONNULL_END
frameworks/GoogleDataTransport.framework/Headers/GDTCORLifecycle.h
File was deleted
frameworks/GoogleDataTransport.framework/Headers/GDTCORPlatform.h
File was deleted
frameworks/GoogleDataTransport.framework/Headers/GDTCORRegistrar.h
File was deleted
frameworks/GoogleDataTransport.framework/Headers/GDTCORStorageEventSelector.h
File was deleted
frameworks/GoogleDataTransport.framework/Headers/GDTCORStorageProtocol.h
File was deleted
frameworks/GoogleDataTransport.framework/Headers/GDTCORUploader.h
File was deleted
frameworks/GoogleDataTransport.framework/Headers/GoogleDataTransport.h
@@ -16,11 +16,9 @@
#import "GDTCORClock.h"
#import "GDTCORConsoleLogger.h"
#import "GDTCOREndpoints.h"
#import "GDTCOREvent.h"
#import "GDTCOREventDataObject.h"
#import "GDTCOREventTransformer.h"
#import "GDTCORLifecycle.h"
#import "GDTCORRegistrar.h"
#import "GDTCORTargets.h"
#import "GDTCORTransport.h"
#import "GDTCORUploader.h"
frameworks/GoogleDataTransport.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>GoogleDataTransport</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-GoogleDataTransport</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>GoogleDataTransport</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>8.2.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/GoogleUtilities.framework/GoogleUtilities
Binary files differ
frameworks/GoogleUtilities.framework/Headers/GULAppDelegateSwizzler.h
New file
@@ -0,0 +1,107 @@
/*
 * Copyright 2018 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.
 */
#import <Foundation/Foundation.h>
#import "GULApplication.h"
NS_ASSUME_NONNULL_BEGIN
typedef NSString *const GULAppDelegateInterceptorID;
/** This class contains methods that isa swizzle the app delegate. */
@interface GULAppDelegateSwizzler : NSProxy
/** Registers an app delegate interceptor whose methods will be invoked as they're invoked on the
 *  original app delegate.
 *
 *  @param interceptor An instance of a class that conforms to the application delegate protocol.
 *      The interceptor is NOT retained.
 *  @return A unique GULAppDelegateInterceptorID if interceptor was successfully registered; nil
 *      if it fails.
 */
+ (nullable GULAppDelegateInterceptorID)registerAppDelegateInterceptor:
    (id<GULApplicationDelegate>)interceptor;
/** Unregisters an interceptor with the given ID if it exists.
 *
 *  @param interceptorID The object that was generated when the interceptor was registered.
 */
+ (void)unregisterAppDelegateInterceptorWithID:(GULAppDelegateInterceptorID)interceptorID;
/** This method ensures that the original app delegate has been proxied. Call this before
 *  registering your interceptor. This method is safe to call multiple times (but it only proxies
 *  the app delegate once).
 *
 *  This method doesn't proxy APNS related methods:
 *  @code
 *    - application:didRegisterForRemoteNotificationsWithDeviceToken:
 *    - application:didFailToRegisterForRemoteNotificationsWithError:
 *    - application:didReceiveRemoteNotification:fetchCompletionHandler:
 *    - application:didReceiveRemoteNotification:
 *  @endcode
 *
 *  To proxy these methods use +[GULAppDelegateSwizzler
 *  proxyOriginalDelegateIncludingAPNSMethods]. The methods have to be proxied separately to
 *  avoid potential warnings from Apple review about missing Push Notification Entitlement (e.g.
 *  https://github.com/firebase/firebase-ios-sdk/issues/2807)
 *
 *  The method has no effect for extensions.
 *
 *  @see proxyOriginalDelegateIncludingAPNSMethods
 */
+ (void)proxyOriginalDelegate;
/** This method ensures that the original app delegate has been proxied including APNS related
 *  methods. Call this before registering your interceptor. This method is safe to call multiple
 *  times (but it only proxies the app delegate once) or
 *  after +[GULAppDelegateSwizzler proxyOriginalDelegate]
 *
 *  This method calls +[GULAppDelegateSwizzler proxyOriginalDelegate] under the hood.
 *  After calling this method the following App Delegate methods will be proxied in addition to
 *  the methods proxied by proxyOriginalDelegate:
 *  @code
 *    - application:didRegisterForRemoteNotificationsWithDeviceToken:
 *    - application:didFailToRegisterForRemoteNotificationsWithError:
 *    - application:didReceiveRemoteNotification:fetchCompletionHandler:
 *    - application:didReceiveRemoteNotification:
 *  @endcode
 *
 *  The method has no effect for extensions.
 *
 *  @see proxyOriginalDelegate
 */
+ (void)proxyOriginalDelegateIncludingAPNSMethods;
/** Indicates whether app delegate proxy is explicitly disabled or enabled. Enabled by default.
 *
 *  @return YES if AppDelegateProxy is Enabled, NO otherwise.
 */
+ (BOOL)isAppDelegateProxyEnabled;
/** Returns the current sharedApplication.
 *
 *  @return the current application instance if in an app, or nil if in extension or if it doesn't
 * exist.
 */
+ (nullable GULApplication *)sharedApplication;
/** Do not initialize this class. */
- (instancetype)init NS_UNAVAILABLE;
NS_ASSUME_NONNULL_END
@end
frameworks/GoogleUtilities.framework/Headers/GULAppEnvironmentUtil.h
File was renamed from frameworks/FirebaseCoreDiagnostics.framework/Headers/GULAppEnvironmentUtil.h
@@ -16,6 +16,8 @@
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface GULAppEnvironmentUtil : NSObject
/// Indicates whether the app is from Apple Store or not. Returns NO if the app is on simulator,
@@ -31,7 +33,7 @@
+ (BOOL)isSimulator;
/// The current device model. Returns an empty string if device model cannot be retrieved.
+ (NSString *)deviceModel;
+ (nullable NSString *)deviceModel;
/// The current operating system version. Returns an empty string if the system version cannot be
/// retrieved.
@@ -44,4 +46,15 @@
+ (BOOL)isIOS7OrHigher DEPRECATED_MSG_ATTRIBUTE(
    "Always `YES` because only iOS 8 and higher supported. The method will be removed.");
/// @return YES if Swift runtime detected in the app.
+ (BOOL)hasSwiftRuntime;
/// @return An Apple platform. Possible values "ios", "tvos", "macos", "watchos", "maccatalyst".
+ (NSString *)applePlatform;
/// @return The way the library was added to the app, e.g. "swiftpm", "cocoapods", etc.
+ (NSString *)deploymentType;
@end
NS_ASSUME_NONNULL_END
frameworks/GoogleUtilities.framework/Headers/GULApplication.h
New file
@@ -0,0 +1,50 @@
/*
 * Copyright 2019 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.
 */
#import <Foundation/Foundation.h>
#if TARGET_OS_IOS || TARGET_OS_TV
#import <UIKit/UIKit.h>
#define GULApplication UIApplication
#define GULApplicationDelegate UIApplicationDelegate
#define GULUserActivityRestoring UIUserActivityRestoring
static NSString *const kGULApplicationClassName = @"UIApplication";
#elif TARGET_OS_OSX
#import <AppKit/AppKit.h>
#define GULApplication NSApplication
#define GULApplicationDelegate NSApplicationDelegate
#define GULUserActivityRestoring NSUserActivityRestoring
static NSString *const kGULApplicationClassName = @"NSApplication";
#elif TARGET_OS_WATCH
#import <WatchKit/WatchKit.h>
// We match the according watchOS API but swizzling should not work in watch
#define GULApplication WKExtension
#define GULApplicationDelegate WKExtensionDelegate
#define GULUserActivityRestoring NSUserActivityRestoring
static NSString *const kGULApplicationClassName = @"WKExtension";
#endif
frameworks/GoogleUtilities.framework/Headers/GULHeartbeatDateStorage.h
frameworks/GoogleUtilities.framework/Headers/GULKeychainStorage.h
frameworks/GoogleUtilities.framework/Headers/GULKeychainUtils.h
frameworks/GoogleUtilities.framework/Headers/GULLogger.h
File was renamed from frameworks/FirebaseCoreDiagnostics.framework/Headers/GULLogger.h
@@ -16,11 +16,7 @@
#import <Foundation/Foundation.h>
#if SWIFT_PACKAGE
@import GoogleUtilities_Logger;
#else
#import <GoogleUtilities/GULLoggerLevel.h>
#endif
#import "GULLoggerLevel.h"
NS_ASSUME_NONNULL_BEGIN
@@ -65,7 +61,7 @@
 * Register version to include in logs.
 * (required) version
 */
extern void GULLoggerRegisterVersion(const char *version);
extern void GULLoggerRegisterVersion(NSString *version);
/**
 * Logs a message to the Xcode console and the device log. If running from AppStore, will
frameworks/GoogleUtilities.framework/Headers/GULLoggerCodes.h
File was deleted
frameworks/GoogleUtilities.framework/Headers/GULMutableDictionary.h
New file
@@ -0,0 +1,46 @@
/*
 * 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>
/// A mutable dictionary that provides atomic accessor and mutators.
@interface GULMutableDictionary : NSObject
/// Returns an object given a key in the dictionary or nil if not found.
- (id)objectForKey:(id)key;
/// Updates the object given its key or adds it to the dictionary if it is not in the dictionary.
- (void)setObject:(id)object forKey:(id<NSCopying>)key;
/// Removes the object given its session ID from the dictionary.
- (void)removeObjectForKey:(id)key;
/// Removes all objects.
- (void)removeAllObjects;
/// Returns the number of current objects in the dictionary.
- (NSUInteger)count;
/// Returns an object given a key in the dictionary or nil if not found.
- (id)objectForKeyedSubscript:(id<NSCopying>)key;
/// Updates the object given its key or adds it to the dictionary if it is not in the dictionary.
- (void)setObject:(id)obj forKeyedSubscript:(id<NSCopying>)key;
/// Returns the immutable dictionary.
- (NSDictionary *)dictionary;
@end
frameworks/GoogleUtilities.framework/Headers/GULNetwork.h
New file
@@ -0,0 +1,87 @@
/*
 * 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>
#import "GULNetworkConstants.h"
#import "GULNetworkLoggerProtocol.h"
#import "GULNetworkURLSession.h"
/// Delegate protocol for GULNetwork events.
@protocol GULNetworkReachabilityDelegate
/// Tells the delegate to handle events when the network reachability changes to connected or not
/// connected.
- (void)reachabilityDidChange;
@end
/// The Network component that provides network status and handles network requests and responses.
/// This is not thread safe.
///
/// NOTE:
/// User must add FIRAnalytics handleEventsForBackgroundURLSessionID:completionHandler to the
/// AppDelegate application:handleEventsForBackgroundURLSession:completionHandler:
@interface GULNetwork : NSObject
/// Indicates if network connectivity is available.
@property(nonatomic, readonly, getter=isNetworkConnected) BOOL networkConnected;
/// Indicates if there are any uploads in progress.
@property(nonatomic, readonly, getter=hasUploadInProgress) BOOL uploadInProgress;
/// An optional delegate that can be used in the event when network reachability changes.
@property(nonatomic, weak) id<GULNetworkReachabilityDelegate> reachabilityDelegate;
/// An optional delegate that can be used to log messages, warnings or errors that occur in the
/// network operations.
@property(nonatomic, weak) id<GULNetworkLoggerDelegate> loggerDelegate;
/// Indicates whether the logger should display debug messages.
@property(nonatomic, assign) BOOL isDebugModeEnabled;
/// The time interval in seconds for the network request to timeout.
@property(nonatomic, assign) NSTimeInterval timeoutInterval;
/// Initializes with the default reachability host.
- (instancetype)init;
/// Initializes with a custom reachability host.
- (instancetype)initWithReachabilityHost:(NSString *)reachabilityHost;
/// Handles events when background session with the given ID has finished.
+ (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID
                            completionHandler:(GULNetworkSystemCompletionHandler)completionHandler;
/// Compresses and sends a POST request with the provided data to the URL. The session will be
/// background session if usingBackgroundSession is YES. Otherwise, the POST session is default
/// session. Returns a session ID or nil if an error occurs.
- (NSString *)postURL:(NSURL *)url
                   payload:(NSData *)payload
                     queue:(dispatch_queue_t)queue
    usingBackgroundSession:(BOOL)usingBackgroundSession
         completionHandler:(GULNetworkCompletionHandler)handler;
/// Sends a GET request with the provided data to the URL. The session will be background session
/// if usingBackgroundSession is YES. Otherwise, the GET session is default session. Returns a
/// session ID or nil if an error occurs.
- (NSString *)getURL:(NSURL *)url
                   headers:(NSDictionary *)headers
                     queue:(dispatch_queue_t)queue
    usingBackgroundSession:(BOOL)usingBackgroundSession
         completionHandler:(GULNetworkCompletionHandler)handler;
@end
frameworks/GoogleUtilities.framework/Headers/GULNetworkConstants.h
New file
@@ -0,0 +1,71 @@
/*
 * 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>
/// Error codes in Firebase Network error domain.
/// Note: these error codes should never change. It would make it harder to decode the errors if
/// we inadvertently altered any of these codes in a future SDK version.
typedef NS_ENUM(NSInteger, GULNetworkErrorCode) {
  /// Unknown error.
  GULNetworkErrorCodeUnknown = 0,
  /// Error occurs when the request URL is invalid.
  GULErrorCodeNetworkInvalidURL = 1,
  /// Error occurs when request cannot be constructed.
  GULErrorCodeNetworkRequestCreation = 2,
  /// Error occurs when payload cannot be compressed.
  GULErrorCodeNetworkPayloadCompression = 3,
  /// Error occurs when session task cannot be created.
  GULErrorCodeNetworkSessionTaskCreation = 4,
  /// Error occurs when there is no response.
  GULErrorCodeNetworkInvalidResponse = 5
};
#pragma mark - Network constants
/// The prefix of the ID of the background session.
extern NSString *const kGULNetworkBackgroundSessionConfigIDPrefix;
/// The sub directory to store the files of data that is being uploaded in the background.
extern NSString *const kGULNetworkApplicationSupportSubdirectory;
/// Name of the temporary directory that stores files for background uploading.
extern NSString *const kGULNetworkTempDirectoryName;
/// The period when the temporary uploading file can stay.
extern const NSTimeInterval kGULNetworkTempFolderExpireTime;
/// The default network request timeout interval.
extern const NSTimeInterval kGULNetworkTimeOutInterval;
/// The host to check the reachability of the network.
extern NSString *const kGULNetworkReachabilityHost;
/// The key to get the error context of the UserInfo.
extern NSString *const kGULNetworkErrorContext;
#pragma mark - Network Status Code
extern const int kGULNetworkHTTPStatusOK;
extern const int kGULNetworkHTTPStatusNoContent;
extern const int kGULNetworkHTTPStatusCodeMultipleChoices;
extern const int kGULNetworkHTTPStatusCodeMovedPermanently;
extern const int kGULNetworkHTTPStatusCodeFound;
extern const int kGULNetworkHTTPStatusCodeNotModified;
extern const int kGULNetworkHTTPStatusCodeMovedTemporarily;
extern const int kGULNetworkHTTPStatusCodeNotFound;
extern const int kGULNetworkHTTPStatusCodeCannotAcceptTraffic;
extern const int kGULNetworkHTTPStatusCodeUnavailable;
frameworks/GoogleUtilities.framework/Headers/GULNetworkLoggerProtocol.h
New file
@@ -0,0 +1,49 @@
/*
 * 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>
#import "GULNetworkMessageCode.h"
/// The log levels used by GULNetworkLogger.
typedef NS_ENUM(NSInteger, GULNetworkLogLevel) {
  kGULNetworkLogLevelError = 3,
  kGULNetworkLogLevelWarning = 4,
  kGULNetworkLogLevelInfo = 6,
  kGULNetworkLogLevelDebug = 7,
};
@protocol GULNetworkLoggerDelegate <NSObject>
@required
/// Tells the delegate to log a message with an array of contexts and the log level.
- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel
                    messageCode:(GULNetworkMessageCode)messageCode
                        message:(NSString *)message
                       contexts:(NSArray *)contexts;
/// Tells the delegate to log a message with a context and the log level.
- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel
                    messageCode:(GULNetworkMessageCode)messageCode
                        message:(NSString *)message
                        context:(id)context;
/// Tells the delegate to log a message with the log level.
- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel
                    messageCode:(GULNetworkMessageCode)messageCode
                        message:(NSString *)message;
@end
frameworks/GoogleUtilities.framework/Headers/GULNetworkMessageCode.h
New file
@@ -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>
// Make sure these codes do not overlap with any contained in the FIRAMessageCode enum.
typedef NS_ENUM(NSInteger, GULNetworkMessageCode) {
  // GULNetwork.m
  kGULNetworkMessageCodeNetwork000 = 900000,  // I-NET900000
  kGULNetworkMessageCodeNetwork001 = 900001,  // I-NET900001
  kGULNetworkMessageCodeNetwork002 = 900002,  // I-NET900002
  kGULNetworkMessageCodeNetwork003 = 900003,  // I-NET900003
  // GULNetworkURLSession.m
  kGULNetworkMessageCodeURLSession000 = 901000,  // I-NET901000
  kGULNetworkMessageCodeURLSession001 = 901001,  // I-NET901001
  kGULNetworkMessageCodeURLSession002 = 901002,  // I-NET901002
  kGULNetworkMessageCodeURLSession003 = 901003,  // I-NET901003
  kGULNetworkMessageCodeURLSession004 = 901004,  // I-NET901004
  kGULNetworkMessageCodeURLSession005 = 901005,  // I-NET901005
  kGULNetworkMessageCodeURLSession006 = 901006,  // I-NET901006
  kGULNetworkMessageCodeURLSession007 = 901007,  // I-NET901007
  kGULNetworkMessageCodeURLSession008 = 901008,  // I-NET901008
  kGULNetworkMessageCodeURLSession009 = 901009,  // I-NET901009
  kGULNetworkMessageCodeURLSession010 = 901010,  // I-NET901010
  kGULNetworkMessageCodeURLSession011 = 901011,  // I-NET901011
  kGULNetworkMessageCodeURLSession012 = 901012,  // I-NET901012
  kGULNetworkMessageCodeURLSession013 = 901013,  // I-NET901013
  kGULNetworkMessageCodeURLSession014 = 901014,  // I-NET901014
  kGULNetworkMessageCodeURLSession015 = 901015,  // I-NET901015
  kGULNetworkMessageCodeURLSession016 = 901016,  // I-NET901016
  kGULNetworkMessageCodeURLSession017 = 901017,  // I-NET901017
  kGULNetworkMessageCodeURLSession018 = 901018,  // I-NET901018
  kGULNetworkMessageCodeURLSession019 = 901019,  // I-NET901019
};
frameworks/GoogleUtilities.framework/Headers/GULNetworkURLSession.h
New file
@@ -0,0 +1,62 @@
/*
 * 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>
#import "GULNetworkLoggerProtocol.h"
NS_ASSUME_NONNULL_BEGIN
typedef void (^GULNetworkCompletionHandler)(NSHTTPURLResponse *_Nullable response,
                                            NSData *_Nullable data,
                                            NSError *_Nullable error);
typedef void (^GULNetworkURLSessionCompletionHandler)(NSHTTPURLResponse *_Nullable response,
                                                      NSData *_Nullable data,
                                                      NSString *sessionID,
                                                      NSError *_Nullable error);
typedef void (^GULNetworkSystemCompletionHandler)(void);
/// The protocol that uses NSURLSession for iOS >= 7.0 to handle requests and responses.
@interface GULNetworkURLSession : NSObject
/// Indicates whether the background network is enabled. Default value is NO.
@property(nonatomic, getter=isBackgroundNetworkEnabled) BOOL backgroundNetworkEnabled;
/// The logger delegate to log message, errors or warnings that occur during the network operations.
@property(nonatomic, weak, nullable) id<GULNetworkLoggerDelegate> loggerDelegate;
/// Calls the system provided completion handler after the background session is finished.
+ (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID
                            completionHandler:(GULNetworkSystemCompletionHandler)completionHandler;
/// Initializes with logger delegate.
- (instancetype)initWithNetworkLoggerDelegate:
    (nullable id<GULNetworkLoggerDelegate>)networkLoggerDelegate NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
/// Sends an asynchronous POST request and calls the provided completion handler when the request
/// completes or when errors occur, and returns an ID of the session/connection.
- (nullable NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request
                                   completionHandler:(GULNetworkURLSessionCompletionHandler)handler;
/// Sends an asynchronous GET request and calls the provided completion handler when the request
/// completes or when errors occur, and returns an ID of the session.
- (nullable NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request
                                  completionHandler:(GULNetworkURLSessionCompletionHandler)handler;
NS_ASSUME_NONNULL_END
@end
frameworks/GoogleUtilities.framework/Headers/GULObjectSwizzler.h
New file
@@ -0,0 +1,123 @@
/*
 * Copyright 2018 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.
 */
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/** Enums that map to their OBJC-prefixed counterparts. */
typedef OBJC_ENUM(uintptr_t, GUL_ASSOCIATION){
    // Is a weak association.
    GUL_ASSOCIATION_ASSIGN,
    // Is a nonatomic strong association.
    GUL_ASSOCIATION_RETAIN_NONATOMIC,
    // Is a nonatomic copy association.
    GUL_ASSOCIATION_COPY_NONATOMIC,
    // Is an atomic strong association.
    GUL_ASSOCIATION_RETAIN,
    // Is an atomic copy association.
    GUL_ASSOCIATION_COPY};
/** This class handles swizzling a specific instance of a class by generating a
 *  dynamic subclass and installing selectors and properties onto the dynamic
 *  subclass. Then, the instance's class is set to the dynamic subclass. There
 *  should be a 1:1 ratio of object swizzlers to swizzled instances.
 */
@interface GULObjectSwizzler : NSObject
/** The subclass that is generated. */
@property(nullable, nonatomic, readonly) Class generatedClass;
/** Sets an associated object in the runtime. This mechanism can be used to
 *  simulate adding properties.
 *
 *  @param object The object that will be queried for the associated object.
 *  @param key The key of the associated object.
 *  @param value The value to associate to the swizzled object.
 *  @param association The mechanism to use when associating the objects.
 */
+ (void)setAssociatedObject:(id)object
                        key:(NSString *)key
                      value:(nullable id)value
                association:(GUL_ASSOCIATION)association;
/** Gets an associated object in the runtime. This mechanism can be used to
 *  simulate adding properties.
 *
 *  @param object The object that will be queried for the associated object.
 *  @param key The key of the associated object.
 */
+ (nullable id)getAssociatedObject:(id)object key:(NSString *)key;
/** Please use the designated initializer. */
- (instancetype)init NS_UNAVAILABLE;
/** Instantiates an object swizzler using an object it will operate on.
 *  Generates a new class pair.
 *
 *  @note There is no need to store this object. After calling -swizzle, this
 *  object can be found by calling -gul_objectSwizzler
 *
 *  @param object The object to be swizzled.
 *  @return An instance of this class.
 */
- (instancetype)initWithObject:(id)object NS_DESIGNATED_INITIALIZER;
/** Sets an associated object in the runtime. This mechanism can be used to
 *  simulate adding properties.
 *
 *  @param key The key of the associated object.
 *  @param value The value to associate to the swizzled object.
 *  @param association The mechanism to use when associating the objects.
 */
- (void)setAssociatedObjectWithKey:(NSString *)key
                             value:(id)value
                       association:(GUL_ASSOCIATION)association;
/** Gets an associated object in the runtime. This mechanism can be used to
 *  simulate adding properties.
 *
 *  @param key The key of the associated object.
 */
- (nullable id)getAssociatedObjectForKey:(NSString *)key;
/** Copies a selector from an existing class onto the generated dynamic subclass
 *  that this object will adopt. This mechanism can be used to add methods to
 *  specific instances of a class.
 *
 *  @note Should not be called after calling -swizzle.
 *  @param selector The selector to add to the instance.
 *  @param aClass The class supplying an implementation of the method.
 *  @param isClassSelector A BOOL specifying whether the selector is a class or
 * instance selector.
 */
- (void)copySelector:(SEL)selector fromClass:(Class)aClass isClassSelector:(BOOL)isClassSelector;
/** Swizzles the object, changing its class to the generated class. Registers
 *  the class pair. */
- (void)swizzle;
/** @return The value of -[objectBeingSwizzled isProxy] */
- (BOOL)isSwizzlingProxyObject;
@end
NS_ASSUME_NONNULL_END
frameworks/GoogleUtilities.framework/Headers/GULOriginalIMPConvenienceMacros.h
New file
@@ -0,0 +1,207 @@
/*
 * Copyright 2018 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.
 */
/**
 * GULOriginalIMPConvenienceMacros.h
 *
 * This header contains convenience macros for invoking the original IMP of a swizzled method.
 */
/**
 *  Invokes original IMP when the original selector takes no arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 */
#define GUL_INVOKE_ORIGINAL_IMP0(__receivingObject, __swizzledSEL, __returnType, __originalIMP) \
  ((__returnType(*)(id, SEL))__originalIMP)(__receivingObject, __swizzledSEL)
/**
 *  Invokes original IMP when the original selector takes 1 argument.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP1(__receivingObject, __swizzledSEL, __returnType, __originalIMP,   \
                                 __arg1)                                                          \
  ((__returnType(*)(id, SEL, __typeof__(__arg1)))__originalIMP)(__receivingObject, __swizzledSEL, \
                                                                __arg1)
/**
 *  Invokes original IMP when the original selector takes 2 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP2(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \
                                 __arg1, __arg2)                                                \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2)))__originalIMP)(            \
      __receivingObject, __swizzledSEL, __arg1, __arg2)
/**
 *  Invokes original IMP when the original selector takes 3 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 *  @param __arg3 The third argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP3(__receivingObject, __swizzledSEL, __returnType, __originalIMP,  \
                                 __arg1, __arg2, __arg3)                                         \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2),                             \
                    __typeof__(__arg3)))__originalIMP)(__receivingObject, __swizzledSEL, __arg1, \
                                                       __arg2, __arg3)
/**
 *  Invokes original IMP when the original selector takes 4 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 *  @param __arg3 The third argument.
 *  @param __arg4 The fourth argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP4(__receivingObject, __swizzledSEL, __returnType, __originalIMP,  \
                                 __arg1, __arg2, __arg3, __arg4)                                 \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3),         \
                    __typeof__(__arg4)))__originalIMP)(__receivingObject, __swizzledSEL, __arg1, \
                                                       __arg2, __arg3, __arg4)
/**
 *  Invokes original IMP when the original selector takes 5 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 *  @param __arg3 The third argument.
 *  @param __arg4 The fourth argument.
 *  @param __arg5 The fifth argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP5(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \
                                 __arg1, __arg2, __arg3, __arg4, __arg5)                        \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3),        \
                    __typeof__(__arg4), __typeof__(__arg5)))__originalIMP)(                     \
      __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5)
/**
 *  Invokes original IMP when the original selector takes 6 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 *  @param __arg3 The third argument.
 *  @param __arg4 The fourth argument.
 *  @param __arg5 The fifth argument.
 *  @param __arg6 The sixth argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP6(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \
                                 __arg1, __arg2, __arg3, __arg4, __arg5, __arg6)                \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3),        \
                    __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6)))__originalIMP)( \
      __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6)
/**
 *  Invokes original IMP when the original selector takes 7 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 *  @param __arg3 The third argument.
 *  @param __arg4 The fourth argument.
 *  @param __arg5 The fifth argument.
 *  @param __arg6 The sixth argument.
 *  @param __arg7 The seventh argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP7(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \
                                 __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7)        \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3),        \
                    __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6),                 \
                    __typeof__(__arg7)))__originalIMP)(                                         \
      __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7)
/**
 *  Invokes original IMP when the original selector takes 8 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 *  @param __arg3 The third argument.
 *  @param __arg4 The fourth argument.
 *  @param __arg5 The fifth argument.
 *  @param __arg6 The sixth argument.
 *  @param __arg7 The seventh argument.
 *  @param __arg8 The eighth argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP8(__receivingObject, __swizzledSEL, __returnType, __originalIMP,  \
                                 __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, __arg8) \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3),         \
                    __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6),                  \
                    __typeof__(__arg7), __typeof__(__arg8)))__originalIMP)(                      \
      __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7,  \
      __arg8)
/**
 *  Invokes original IMP when the original selector takes 9 arguments.
 *
 *  @param __receivingObject The object on which the IMP is invoked.
 *  @param __swizzledSEL The selector used for swizzling.
 *  @param __returnType  The return type of the original implementation.
 *  @param __originalIMP The original IMP.
 *  @param __arg1 The first argument.
 *  @param __arg2 The second argument.
 *  @param __arg3 The third argument.
 *  @param __arg4 The fourth argument.
 *  @param __arg5 The fifth argument.
 *  @param __arg6 The sixth argument.
 *  @param __arg7 The seventh argument.
 *  @param __arg8 The eighth argument.
 *  @param __arg9 The ninth argument.
 */
#define GUL_INVOKE_ORIGINAL_IMP9(__receivingObject, __swizzledSEL, __returnType, __originalIMP,  \
                                 __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, __arg8, \
                                 __arg9)                                                         \
  ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3),         \
                    __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6),                  \
                    __typeof__(__arg7), __typeof__(__arg8), __typeof__(__arg9)))__originalIMP)(  \
      __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7,  \
      __arg8, __arg9)
frameworks/GoogleUtilities.framework/Headers/GULReachabilityChecker.h
New file
@@ -0,0 +1,79 @@
/*
 * 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>
#if !TARGET_OS_WATCH
#import <SystemConfiguration/SystemConfiguration.h>
#endif
/// Reachability Status
typedef enum {
  kGULReachabilityUnknown,  ///< Have not yet checked or been notified whether host is reachable.
  kGULReachabilityNotReachable,  ///< Host is not reachable.
  kGULReachabilityViaWifi,       ///< Host is reachable via Wifi.
  kGULReachabilityViaCellular,   ///< Host is reachable via cellular.
} GULReachabilityStatus;
const NSString *GULReachabilityStatusString(GULReachabilityStatus status);
@class GULReachabilityChecker;
/// Google Analytics iOS Reachability Checker.
@protocol GULReachabilityDelegate
@required
/// Called when network status has changed.
- (void)reachability:(GULReachabilityChecker *)reachability
       statusChanged:(GULReachabilityStatus)status;
@end
/// Google Analytics iOS Network Status Checker.
@interface GULReachabilityChecker : NSObject
/// The last known reachability status, or GULReachabilityStatusUnknown if the
/// checker is not active.
@property(nonatomic, readonly) GULReachabilityStatus reachabilityStatus;
/// The host to which reachability status is to be checked.
@property(nonatomic, copy, readonly) NSString *host;
/// The delegate to be notified of reachability status changes.
@property(nonatomic, weak) id<GULReachabilityDelegate> reachabilityDelegate;
/// `YES` if the reachability checker is active, `NO` otherwise.
@property(nonatomic, readonly) BOOL isActive;
/// Initialize the reachability checker. Note that you must call start to begin checking for and
/// receiving notifications about network status changes.
///
/// @param reachabilityDelegate The delegate to be notified when reachability status to host
/// changes.
///
/// @param host The name of the host.
///
- (instancetype)initWithReachabilityDelegate:(id<GULReachabilityDelegate>)reachabilityDelegate
                                    withHost:(NSString *)host;
- (instancetype)init NS_UNAVAILABLE;
/// Start checking for reachability to the specified host. This has no effect if the status
/// checker is already checking for connectivity.
///
/// @return `YES` if initiating status checking was successful or the status checking has already
/// been initiated, `NO` otherwise.
- (BOOL)start;
/// Stop checking for reachability to the specified host. This has no effect if the status
/// checker is not checking for connectivity.
- (void)stop;
@end
frameworks/GoogleUtilities.framework/Headers/GULSceneDelegateSwizzler.h
New file
@@ -0,0 +1,76 @@
/*
 * Copyright 2019 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.
 */
#import <Foundation/Foundation.h>
#import <TargetConditionals.h>
#if !TARGET_OS_OSX
#import <UIKit/UIKit.h>
#endif  // !TARGET_OS_OSX
#if ((TARGET_OS_IOS || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 130000))
#define UISCENE_SUPPORTED 1
#endif
NS_ASSUME_NONNULL_BEGIN
typedef NSString *const GULSceneDelegateInterceptorID;
/** This class contains methods that isa swizzle the scene delegate. */
@interface GULSceneDelegateSwizzler : NSProxy
#if UISCENE_SUPPORTED
/** Registers a scene delegate interceptor whose methods will be invoked as they're invoked on the
 *  original scene delegate.
 *
 *  @param interceptor An instance of a class that conforms to the application delegate protocol.
 *      The interceptor is NOT retained.
 *  @return A unique GULSceneDelegateInterceptorID if interceptor was successfully registered; nil
 *      if it fails.
 */
+ (nullable GULSceneDelegateInterceptorID)registerSceneDelegateInterceptor:
    (id<UISceneDelegate>)interceptor API_AVAILABLE(ios(13.0), tvos(13.0));
/** Unregisters an interceptor with the given ID if it exists.
 *
 *  @param interceptorID The object that was generated when the interceptor was registered.
 */
+ (void)unregisterSceneDelegateInterceptorWithID:(GULSceneDelegateInterceptorID)interceptorID
    API_AVAILABLE(ios(13.0), tvos(13.0));
/** Do not initialize this class. */
- (instancetype)init NS_UNAVAILABLE;
#endif  // UISCENE_SUPPORTED
/** This method ensures that the original scene delegate has been proxied. Call this before
 *  registering your interceptor. This method is safe to call multiple times (but it only proxies
 *  the scene delegate once).
 *
 *  The method has no effect for extensions.
 */
+ (void)proxyOriginalSceneDelegate;
/** Indicates whether scene delegate proxy is explicitly disabled or enabled. Enabled by default.
 *
 *  @return YES if SceneDelegateProxy is Enabled, NO otherwise.
 */
+ (BOOL)isSceneDelegateProxyEnabled;
@end
NS_ASSUME_NONNULL_END
frameworks/GoogleUtilities.framework/Headers/GULSecureCoding.h
frameworks/GoogleUtilities.framework/Headers/GULSwizzledObject.h
New file
@@ -0,0 +1,44 @@
/*
 * Copyright 2018 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.
 */
#import <Foundation/Foundation.h>
@class GULObjectSwizzler;
FOUNDATION_EXPORT NSString *kSwizzlerAssociatedObjectKey;
/** This class exists as a method donor. These methods will be added to all objects that are
 *  swizzled by the object swizzler. This class should not be instantiated.
 */
@interface GULSwizzledObject : NSObject
- (instancetype)init NS_UNAVAILABLE;
/** Copies the methods below to the swizzled object.
 *
 *  @param objectSwizzler The swizzler to use when adding the methods below.
 */
+ (void)copyDonorSelectorsUsingObjectSwizzler:(GULObjectSwizzler *)objectSwizzler;
#pragma mark - Donor methods.
/** @return The generated subclass. Used in respondsToSelector: calls. */
- (Class)gul_class;
/** @return The object swizzler that manages this object. */
- (GULObjectSwizzler *)gul_objectSwizzler;
@end
frameworks/GoogleUtilities.framework/Headers/GULSwizzler.h
New file
@@ -0,0 +1,71 @@
/*
 * Copyright 2018 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.
 */
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/** This class handles the runtime manipulation necessary to instrument selectors. It stores the
 *  classes and selectors that have been swizzled, and runs all operations on its own queue.
 */
@interface GULSwizzler : NSObject
/** Manipulates the Objective-C runtime to replace the original IMP with the supplied block.
 *
 *  @param aClass The class to swizzle.
 *  @param selector The selector of the class to swizzle.
 *  @param isClassSelector A BOOL specifying whether the selector is a class or instance selector.
 *  @param block The block that replaces the original IMP.
 */
+ (void)swizzleClass:(Class)aClass
            selector:(SEL)selector
     isClassSelector:(BOOL)isClassSelector
           withBlock:(nullable id)block;
/** Returns the current IMP for the given class and selector.
 *
 *  @param aClass The class to use.
 *  @param selector The selector to find the implementation of.
 *  @param isClassSelector A BOOL specifying whether the selector is a class or instance selector.
 *  @return The implementation of the selector in the runtime.
 */
+ (nullable IMP)currentImplementationForClass:(Class)aClass
                                     selector:(SEL)selector
                              isClassSelector:(BOOL)isClassSelector;
/** Checks the runtime to see if a selector exists on a class. If a property is declared as
 *  @dynamic, we have a reverse swizzling situation, where the implementation of a method exists
 *  only in concrete subclasses, and NOT in the superclass. We can detect that situation using
 *  this helper method. Similarly, we can detect situations where a class doesn't implement a
 *  protocol method.
 *
 *  @param selector The selector to check for.
 *  @param aClass The class to check.
 *  @param isClassSelector A BOOL specifying whether the selector is a class or instance selector.
 *  @return YES if the method was found in this selector/class combination, NO otherwise.
 */
+ (BOOL)selector:(SEL)selector existsInClass:(Class)aClass isClassSelector:(BOOL)isClassSelector;
/** Returns a list of all Objective-C (and not primitive) ivars contained by the given object.
 *
 *  @param object The object whose ivars will be iterated.
 *  @return The list of ivar objects.
 */
+ (NSArray<id> *)ivarObjectsForObject:(id)object;
@end
NS_ASSUME_NONNULL_END
frameworks/GoogleUtilities.framework/Headers/GULURLSessionDataResponse.h
File was renamed from frameworks/GoogleDataTransport.framework/Headers/GDTCORReachability.h
@@ -1,5 +1,5 @@
/*
 * Copyright 2019 Google
 * 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.
@@ -16,15 +16,15 @@
#import <Foundation/Foundation.h>
#import "GDTCORPlatform.h"
NS_ASSUME_NONNULL_BEGIN
/** This class helps determine upload conditions by determining connectivity. */
@interface GDTCORReachability : NSObject
/** The class represents HTTP response received from `NSURLSession`. */
@interface GULURLSessionDataResponse : NSObject
/** The current set flags indicating network conditions */
+ (GDTCORNetworkReachabilityFlags)currentFlags;
@property(nonatomic, readonly) NSHTTPURLResponse *HTTPResponse;
@property(nonatomic, nullable, readonly) NSData *HTTPBody;
- (instancetype)initWithResponse:(NSHTTPURLResponse *)response HTTPBody:(nullable NSData *)body;
@end
frameworks/GoogleUtilities.framework/Headers/GULUserDefaults.h
New file
@@ -0,0 +1,110 @@
// 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>
NS_ASSUME_NONNULL_BEGIN
/// A thread-safe user defaults that uses C functions from CFPreferences.h instead of
/// `NSUserDefaults`. This is to avoid sending an `NSNotification` when it's changed from a
/// background thread to avoid crashing. // TODO: Insert radar number here.
@interface GULUserDefaults : NSObject
/// A shared user defaults similar to +[NSUserDefaults standardUserDefaults] and accesses the same
/// data of the standardUserDefaults.
+ (GULUserDefaults *)standardUserDefaults;
/// Initializes preferences with a suite name that is the same with the NSUserDefaults' suite name.
/// Both of CFPreferences and NSUserDefaults share the same plist file so their data will exactly
/// the same.
///
/// @param suiteName The name of the suite of the user defaults.
- (instancetype)initWithSuiteName:(nullable NSString *)suiteName;
#pragma mark - Getters
/// Searches the receiver's search list for a default with the key 'defaultName' and return it. If
/// another process has changed defaults in the search list, NSUserDefaults will automatically
/// update to the latest values. If the key in question has been marked as ubiquitous via a Defaults
/// Configuration File, the latest value may not be immediately available, and the registered value
/// will be returned instead.
- (nullable id)objectForKey:(NSString *)defaultName;
/// Equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray.
- (nullable NSArray *)arrayForKey:(NSString *)defaultName;
/// Equivalent to -objectForKey:, except that it will return nil if the value
/// is not an NSDictionary.
- (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
/// Equivalent to -objectForKey:, except that it will convert NSNumber values to their NSString
/// representation. If a non-string non-number value is found, nil will be returned.
- (nullable NSString *)stringForKey:(NSString *)defaultName;
/// Equivalent to -objectForKey:, except that it converts the returned value to an NSInteger. If the
/// value is an NSNumber, the result of -integerValue will be returned. If the value is an NSString,
/// it will be converted to NSInteger if possible. If the value is a boolean, it will be converted
/// to either 1 for YES or 0 for NO. If the value is absent or can't be converted to an integer, 0
/// will be returned.
- (NSInteger)integerForKey:(NSString *)defaultName;
/// Similar to -integerForKey:, except that it returns a float, and boolean values will not be
/// converted.
- (float)floatForKey:(NSString *)defaultName;
/// Similar to -integerForKey:, except that it returns a double, and boolean values will not be
/// converted.
- (double)doubleForKey:(NSString *)defaultName;
/// Equivalent to -objectForKey:, except that it converts the returned value to a BOOL. If the value
/// is an NSNumber, NO will be returned if the value is 0, YES otherwise. If the value is an
/// NSString, values of "YES" or "1" will return YES, and values of "NO", "0", or any other string
/// will return NO. If the value is absent or can't be converted to a BOOL, NO will be returned.
- (BOOL)boolForKey:(NSString *)defaultName;
#pragma mark - Setters
/// Immediately stores a value (or removes the value if `nil` is passed as the value) for the
/// provided key in the search list entry for the receiver's suite name in the current user and any
/// host, then asynchronously stores the value persistently, where it is made available to other
/// processes.
- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
/// Equivalent to -setObject:forKey: except that the value is converted from a float to an NSNumber.
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
/// Equivalent to -setObject:forKey: except that the value is converted from a double to an
/// NSNumber.
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
/// Equivalent to -setObject:forKey: except that the value is converted from an NSInteger to an
/// NSNumber.
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
/// Equivalent to -setObject:forKey: except that the value is converted from a BOOL to an NSNumber.
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
#pragma mark - Removing Defaults
/// Equivalent to -[... setObject:nil forKey:defaultName]
- (void)removeObjectForKey:(NSString *)defaultName;
#pragma mark - Save data
/// Blocks the calling thread until all in-progress set operations have completed.
- (void)synchronize;
@end
NS_ASSUME_NONNULL_END
frameworks/GoogleUtilities.framework/Headers/GoogleUtilities-umbrella.h
@@ -10,9 +10,31 @@
#endif
#endif
#import "GULAppDelegateSwizzler.h"
#import "GULApplication.h"
#import "GULSceneDelegateSwizzler.h"
#import "GULAppEnvironmentUtil.h"
#import "GULHeartbeatDateStorage.h"
#import "GULKeychainStorage.h"
#import "GULKeychainUtils.h"
#import "GULSecureCoding.h"
#import "GULURLSessionDataResponse.h"
#import "NSURLSession+GULPromises.h"
#import "GULObjectSwizzler.h"
#import "GULSwizzledObject.h"
#import "GULLogger.h"
#import "GULLoggerLevel.h"
#import "GULLoggerCodes.h"
#import "GULOriginalIMPConvenienceMacros.h"
#import "GULSwizzler.h"
#import "GULNSData+zlib.h"
#import "GULMutableDictionary.h"
#import "GULNetwork.h"
#import "GULNetworkConstants.h"
#import "GULNetworkLoggerProtocol.h"
#import "GULNetworkMessageCode.h"
#import "GULNetworkURLSession.h"
#import "GULReachabilityChecker.h"
#import "GULUserDefaults.h"
FOUNDATION_EXPORT double GoogleUtilitiesVersionNumber;
FOUNDATION_EXPORT const unsigned char GoogleUtilitiesVersionString[];
frameworks/GoogleUtilities.framework/Headers/NSURLSession+GULPromises.h
New file
@@ -0,0 +1,37 @@
/*
 * 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.
 */
#import <Foundation/Foundation.h>
@class FBLPromise<Value>;
@class GULURLSessionDataResponse;
NS_ASSUME_NONNULL_BEGIN
/** Promise based API for `NSURLSession`. */
@interface NSURLSession (GULPromises)
/** Creates a promise wrapping `-[NSURLSession dataTaskWithRequest:completionHandler:]` method.
 * @param URLRequest The request to create a data task with.
 * @return A promise that is fulfilled when an HTTP response is received (with any response code),
 * or is rejected with the error passed to the task completion.
 */
- (FBLPromise<GULURLSessionDataResponse *> *)gul_dataTaskPromiseWithRequest:
    (NSURLRequest *)URLRequest;
@end
NS_ASSUME_NONNULL_END
frameworks/GoogleUtilities.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>GoogleUtilities</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-GoogleUtilities</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>GoogleUtilities</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>7.2.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/PromisesObjC.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>PromisesObjC</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-PromisesObjC</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>PromisesObjC</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>1.2.12</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/PromisesObjC.framework/PromisesObjC
Binary files differ
frameworks/WAFirebaseImpl.framework/Headers/WAFirebaseImpl.h
@@ -16,5 +16,5 @@
// In this header, you should import all the public headers of your framework using statements like #import <WAFirebaseImpl/PublicHeader.h>
//time:2020/09/02 15:35 ver:3.8.5
//time:2021/01/23 15:35 ver:3.9.2
frameworks/WAFirebaseImpl.framework/Info.plist
Binary files differ
frameworks/WAFirebaseImpl.framework/WAFirebaseImpl
Binary files differ
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeDirectory
Binary files differ
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeRequirements
Binary files differ
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeRequirements-1
Binary files differ
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeResources
@@ -6,11 +6,11 @@
    <dict>
        <key>Headers/WAFirebaseImpl.h</key>
        <data>
        YhnbGibSGVOxkRJEuf+snerysE8=
        Wx5f2IC8qtXRoup68duE3SJK+kc=
        </data>
        <key>Info.plist</key>
        <data>
        lp6enMqCBh6AT50+6kOOIfDIUZs=
        fXO/Dl9htAtsbV3X04RKPOzZ79s=
        </data>
        <key>Modules/module.modulemap</key>
        <data>
@@ -23,11 +23,11 @@
        <dict>
            <key>hash</key>
            <data>
            YhnbGibSGVOxkRJEuf+snerysE8=
            Wx5f2IC8qtXRoup68duE3SJK+kc=
            </data>
            <key>hash2</key>
            <data>
            P417On82s+y0oTLzN0vf1IPKFklRGzegntW5zQ/cjB8=
            yNUrjWlplqIKkC1nH60MH2jp40kDXkQZwO2GKRd0/8o=
            </data>
        </dict>
        <key>Modules/module.modulemap</key>
frameworks/WAFirebaseImpl.framework/_CodeSignature/CodeSignature
Binary files differ
frameworks/nanopb.framework/Headers/pb.h
@@ -51,7 +51,7 @@
/* Version of the nanopb library. Just in case you want to check it in
 * your own program. */
#define NANOPB_VERSION nanopb-0.3.9.6
#define NANOPB_VERSION nanopb-0.3.9.7
/* Include all the system headers needed by nanopb. You will need the
 * definitions of the following:
frameworks/nanopb.framework/Headers/pb_encode.h
@@ -123,7 +123,7 @@
 * structure. Call this from the callback before writing out field contents. */
bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field);
/* Encode field header by manually specifing wire type. You need to use this
/* Encode field header by manually specifying wire type. You need to use this
 * if you want to write out packed arrays from a callback field. */
bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number);
frameworks/nanopb.framework/Info.plist
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>nanopb</string>
    <key>CFBundleIdentifier</key>
    <string>com.firebase.Firebase-nanopb</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>nanopb</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>2.30907.0</string>
    <key>DTSDKName</key>
    <string>iphonesimulator11.2</string>
</dict>
</plist>
frameworks/nanopb.framework/nanopb
Binary files differ