diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/Info.plist b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/Info.plist new file mode 100644 index 0000000000..ceab989a3c --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/Info.plist @@ -0,0 +1,57 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + ios-arm64_armv7 + LibraryPath + GoogleAnalytics.framework + SupportedArchitectures + + arm64 + armv7 + + SupportedPlatform + ios + + + LibraryIdentifier + ios-arm64_i386_x86_64-simulator + LibraryPath + GoogleAnalytics.framework + SupportedArchitectures + + arm64 + i386 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + LibraryIdentifier + ios-arm64_x86_64-maccatalyst + LibraryPath + GoogleAnalytics.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + maccatalyst + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/GoogleAnalytics b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/GoogleAnalytics new file mode 100644 index 0000000000..a6b7ec6b18 Binary files /dev/null and b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/GoogleAnalytics differ diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAI.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAI.h new file mode 100644 index 0000000000..c4b1d0f5fb --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAI.h @@ -0,0 +1,192 @@ +/*! + @header GAI.h + @abstract Google Analytics iOS SDK Header + @version 3.21 + @copyright Copyright 2015 Google Inc. All rights reserved. + */ + +#import + +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +typedef NS_ENUM(NSUInteger, GAIDispatchResult) { + kGAIDispatchNoData, + kGAIDispatchGood, + kGAIDispatchError +}; + +/*! Google Analytics product string. */ +extern NSString *const kGAIProduct; + +/*! Google Analytics version string. */ +extern NSString *const kGAIVersion; + +/*! + NSError objects returned by the Google Analytics SDK may have this error domain + to indicate that the error originated in the Google Analytics SDK. + */ +extern NSString *const kGAIErrorDomain; + +/*! Google Analytics error codes. */ +typedef enum { + // This error code indicates that there was no error. Never used. + kGAINoError = 0, + + // This error code indicates that there was a database-related error. + kGAIDatabaseError, + + // This error code indicates that there was a network-related error. + kGAINetworkError, +} GAIErrorCode; + +/*! + Google Analytics iOS top-level class. Provides facilities to create trackers + and set behaviorial flags. + */ +@interface GAI : NSObject + +/*! + For convenience, this class exposes a default tracker instance. + This is initialized to `nil` and will be set to the first tracker that is + instantiated in trackerWithTrackingId:. It may be overridden as desired. + + The GAITrackedViewController class will, by default, use this tracker instance. + */ +@property(nonatomic, assign) id defaultTracker; + +/*! + The GAILogger to use. + */ +@property(nonatomic, retain) id logger; + +/*! + When this is true, no tracking information will be gathered; tracking calls + will effectively become no-ops. When set to true, all tracking information that + has not yet been submitted. The value of this flag will be persisted + automatically by the SDK. Developers can optionally use this flag to implement + an opt-out setting in the app to allows users to opt out of Google Analytics + tracking. + + This is set to `NO` the first time the Google Analytics SDK is used on a + device, and is persisted thereafter. + */ +@property(nonatomic, assign) BOOL optOut; + +/*! + If this value is positive, tracking information will be automatically + dispatched every dispatchInterval seconds. Otherwise, tracking information must + be sent manually by calling dispatch. + + By default, this is set to `120`, which indicates tracking information should + be dispatched automatically every 120 seconds. + */ +@property(nonatomic, assign) NSTimeInterval dispatchInterval; + +/*! + When set to true, the SDK will record the currently registered uncaught + exception handler, and then register an uncaught exception handler which tracks + the exceptions that occurred using defaultTracker. If defaultTracker is not + `nil`, this function will track the exception on the tracker and attempt to + dispatch any outstanding tracking information for 5 seconds. It will then call + the previously registered exception handler, if any. When set back to false, + the previously registered uncaught exception handler will be restored. + */ +@property(nonatomic, assign) BOOL trackUncaughtExceptions; + +/*! + When this is 'YES', no tracking information will be sent. Defaults to 'NO'. + */ +@property(nonatomic, assign) BOOL dryRun; + +/*! Get the shared instance of the Google Analytics for iOS class. */ ++ (GAI *)sharedInstance; + +/*! + Creates or retrieves a GAITracker implementation with the specified name and + tracking ID. If the tracker for the specified name does not already exist, then + it will be created and returned; otherwise, the existing tracker will be + returned. If the existing tracker for the respective name has a different + tracking ID, that tracking ID is not changed by this method. If defaultTracker + is not set, it will be set to the tracker instance returned here. + + @param name The name of this tracker. Must not be `nil` or empty. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. + + @return A GAITracker associated with the specified name. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular name, the tracker for that name will be + returned, and subsequent calls with the same name will return the same + instance. It is not necessary to retain the tracker because the tracker will be + retained internally by the library. + + If an error occurs or the name is not valid, this method will return + `nil`. + */ +- (id)trackerWithName:(NSString *)name + trackingId:(NSString *)trackingId; + +/*! + Creates or retrieves a GAITracker implementation with name equal to + the specified tracking ID. If the tracker for the respective name does not + already exist, it is created, has it's tracking ID set to |trackingId|, + and is returned; otherwise, the existing tracker is returned. If the existing + tracker for the respective name has a different tracking ID, that tracking ID + is not changed by this method. If defaultTracker is not set, it is set to the + tracker instance returned here. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingId. + + @return A GAITracker associated with the specified trackingId. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular trackingId, the tracker for the respective + name will be returned, and subsequent calls with the same trackingId + will return the same instance. It is not necessary to retain the tracker + because the tracker will be retained internally by the library. + + If an error occurs or the trackingId is not valid, this method will return + `nil`. + */ +- (id)trackerWithTrackingId:(NSString *)trackingId; + +/*! + Remove a tracker from the trackers dictionary. If it is the default tracker, + clears the default tracker as well. + + @param name The name of the tracker. + */ +- (void)removeTrackerByName:(NSString *)name; + +/*! + Dispatches any pending tracking information. + + Note that this does not have any effect on dispatchInterval, and can be used in + conjunction with periodic dispatch. */ +- (void)dispatch; + +/*! + Dispatches the next tracking beacon in the queue, calling completionHandler when + the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted + (returning kGAIDispatchError). If there is no network connection or there is no data to send, + kGAIDispatchNoData is returned. + + Note that calling this method with a non-nil completionHandler disables periodic dispatch. + Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when + the app resumes from the background. + + Calling this method with a nil completionHandler is the same as calling the dispatch + above. + + This method can be used for background data fetching in iOS 7.0 or later. It would be wise to + call this when the application is exiting to initiate the submission of any unsubmitted + tracking information. + + @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult + param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch. + */ +- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h new file mode 100644 index 0000000000..aa96cba11b --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h @@ -0,0 +1,214 @@ +/*! + @header GAIDictionaryBuilder.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" + +/*! + * Helper class to build a dictionary of hit parameters and values. + *
+ * Examples: + * + * id t = // get a tracker. + * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory" + * action:@"EventAction" + * label:nil + * value:nil] + * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]]; + * + * This will send an event hit type with the specified parameters + * and a custom dimension parameter. + *
+ * If you want to send a parameter with all hits, set it on GAITracker directly. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"PlusOne" + * target:@"SOME_URL"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"Share" + * target:@"SOME_POST"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"HangOut" + * target:@"SOME_CIRCLE"] + * build]]; + * + * You can override a value set on the tracker by adding it to the dictionary. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:...]; + * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click" + * action:@"popup" + * label:nil + * value:nil] + * set:@"popup title" forKey:kGAIScreenName] build]]; + * + * The values set via [GAIDictionaryBuilder set] or + * [GAIDictionaryBuilder setAll] will override any existing values in the + * GAIDictionaryBuilder object (i.e. initialized by + * [GAIDictionaryBuilder createXYZ]). e.g. + * + * GAIDictionaryBuilder *m = + * GAIDictionaryBuilder createTimingWithCategory:@"category" + * interval:@0 + * name:@"name" + * label:nil]; + * [t send:[m.set:@"10" forKey:kGAITimingVar] build]; + * [t send:[m.set:@"20" forKey:kGAITimingVar] build]; + * + */ +@interface GAIDictionaryBuilder : NSObject + +- (GAIDictionaryBuilder *)set:(NSString *)value + forKey:(NSString *)key; + +/*! + * Copies all the name-value pairs from params into this object, ignoring any + * keys that are not NSString and any values that are neither NSString or + * NSNull. + */ +- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params; + +/*! + * Returns the value for the input parameter paramName, or nil if paramName + * is not present. + */ +- (NSString *)get:(NSString *)paramName; + +/*! + * Return an NSMutableDictionary object with all the parameters set in this + */ +- (NSMutableDictionary *)build; + +/*! + * Parses and translates utm campaign parameters to analytics campaign param + * and returns them as a map. + * + * @param urlString url containing utm campaign parameters. + * + * Valid campaign parameters are: + *
    + *
  • utm_id
  • + *
  • utm_campaign
  • + *
  • utm_content
  • + *
  • utm_medium
  • + *
  • utm_source
  • + *
  • utm_term
  • + *
  • dclid
  • + *
  • gclid
  • + *
  • gmob_t
  • + *
  • aclid
  • + *
  • anid
  • + *
+ *

+ * Example: + * http://my.site.com/index.html?utm_campaign=wow&utm_source=source + * utm_campaign=wow&utm_source=source. + *

+ * For more information on manual and auto-tagging, see + * https://support.google.com/analytics/answer/1733663?hl=en + */ +- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an appview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value: on the + GAITracker instance. + + This method is deprecated. Use createScreenView instead. + */ ++ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead."); + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a screenview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value: on the + GAITracker instance. + */ ++ (GAIDictionaryBuilder *)createScreenView; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an event hit. + */ ++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category + action:(NSString *)action + label:(NSString *)label + value:(NSNumber *)value; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an exception + hit. + */ ++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description + withFatal:(NSNumber *)fatal; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an item hit. + */ ++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId + name:(NSString *)name + sku:(NSString *)sku + category:(NSString *)category + price:(NSNumber *)price + quantity:(NSNumber *)quantity + currencyCode:(NSString *)currencyCode; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a social hit. + */ ++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network + action:(NSString *)action + target:(NSString *)target; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a timing hit. + */ ++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category + interval:(NSNumber *)intervalMillis + name:(NSString *)name + label:(NSString *)label; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a transaction + hit. + */ ++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId + affiliation:(NSString *)affiliation + revenue:(NSNumber *)revenue + tax:(NSNumber *)tax + shipping:(NSNumber *)shipping + currencyCode:(NSString *)currencyCode; + +/*! + Set the product action field for this hit. + */ +- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction; + +/*! + Adds a product to this hit. + */ +- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product; + +/*! + Add a product impression to this hit. + */ +- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product + impressionList:(NSString *)name + impressionSource:(NSString *)source; + +/*! + Add a promotion to this hit. + */ +- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h new file mode 100644 index 0000000000..dc9797f037 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h @@ -0,0 +1,124 @@ +/*! + @header GAIEcommerceFields.h + @abstract Google Analytics iOS SDK Ecommerce Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + This class provides several fields and methods useful as wire format parameters for + Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details + on how to use the Enhanced Ecommerce features. + */ + +// Enhanced Ecommerce Product fields +extern NSString *const kGAIProductId; +extern NSString *const kGAIProductName; +extern NSString *const kGAIProductBrand; +extern NSString *const kGAIProductCategory; +extern NSString *const kGAIProductVariant; +extern NSString *const kGAIProductPrice; +extern NSString *const kGAIProductQuantity; +extern NSString *const kGAIProductCouponCode; +extern NSString *const kGAIProductPosition; + +extern NSString *const kGAIProductAction; + +// product action values +extern NSString *const kGAIPADetail; +extern NSString *const kGAIPAClick; +extern NSString *const kGAIPAAdd; +extern NSString *const kGAIPARemove; +extern NSString *const kGAIPACheckout; +extern NSString *const kGAIPACheckoutOption; +extern NSString *const kGAIPAPurchase; +extern NSString *const kGAIPARefund; + +// product action fields +// used for 'purchase' and 'refund' actions +extern NSString *const kGAIPATransactionId; +extern NSString *const kGAIPAAffiliation; +extern NSString *const kGAIPARevenue; +extern NSString *const kGAIPATax; +extern NSString *const kGAIPAShipping; +extern NSString *const kGAIPACouponCode; +// used for 'checkout' action +extern NSString *const kGAICheckoutStep; +extern NSString *const kGAICheckoutOption; +// used for 'detail' and 'click' actions +extern NSString *const kGAIProductActionList; +extern NSString *const kGAIProductListSource; + +// Enhanced Ecommerce Impressions fields +extern NSString *const kGAIImpressionName; +extern NSString *const kGAIImpressionListSource; +extern NSString *const kGAIImpressionProduct; +extern NSString *const kGAIImpressionProductId; +extern NSString *const kGAIImpressionProductName; +extern NSString *const kGAIImpressionProductBrand; +extern NSString *const kGAIImpressionProductCategory; +extern NSString *const kGAIImpressionProductVariant; +extern NSString *const kGAIImpressionProductPosition; +extern NSString *const kGAIImpressionProductPrice; + +// Enhanced Ecommerce Promotions fields +extern NSString *const kGAIPromotionId; +extern NSString *const kGAIPromotionName; +extern NSString *const kGAIPromotionCreative; +extern NSString *const kGAIPromotionPosition; + +// Promotion actions +extern NSString *const kGAIPromotionAction; +extern NSString *const kGAIPromotionView; +extern NSString *const kGAIPromotionClick; + +@interface GAIEcommerceFields : NSObject + +/*! + Generates an enhanced ecommerce product field. Note that field names generated by + customDimensionForIndex and customMetricForIndex can be used as suffixes. + + @param index the index of the product + @param suffix the product field suffix (such as kGAIProductPrice). + + @return an NSString representing the product field parameter + */ ++ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix; + +/*! + Genrates an enhanced ecommerce impression list field name with an index. The return value of + this method should also be used as input to the productImpressionForList method below. + + @param index the index of the impression list + + @return an NSString representing the impression list parameter + */ ++ (NSString *)impressionListForIndex:(NSUInteger)index; + +/*! + Generates an enhanced ecommerce product impression field with the impression list, product index + and product suffix as parameters. The output of the method impressionListForIndex above should be + used as the input list for this method. The output of customDimensionForIndex and + customMetricForIndex can be used as suffixes. + + @param list the impression list for this product impression + @param index the index of this product in the impression list + @param suffix the product impression suffix for this field + + @return an NSString representing this product impression field parameter + */ ++ (NSString *)productImpressionForList:(NSString *)list + index:(NSUInteger)index + suffix:(NSString *)suffix; + +/*! + Generates an enhanced ecommerce promotion field with an index and suffix. + + @param index the index of the promotion + @param suffix the promotion suffix (such as kGAIPromotionId) + + @return an NSString representing this promotion field paramter + */ ++ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h new file mode 100644 index 0000000000..b0ba7aaf0c --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h @@ -0,0 +1,102 @@ +/*! + @header GAIEcommerceProduct.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct product related information for a Google Analytics beacon. Use this class to + * report information about products sold by merchants or impressions of products seen by users. + * Instances of this class can be associated with both Product Actions and Product + * Impression Lists. + *
+ * Typical usage: + * + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProductImpression:product impressionList:@"listName"]; + * [tracker send:[builder build]]; + * + */ +@interface GAIEcommerceProduct : NSObject + +/*! + Sets the id that is used to identify a product in GA reports. + */ +- (GAIEcommerceProduct *)setId:(NSString *)productId; + +/*! + Sets the name that is used to identify the product in GA reports. + */ +- (GAIEcommerceProduct *)setName:(NSString *)productName; + +/*! + Sets the brand associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand; + +/*! + Sets the category associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory; + +/*! + Sets the variant of the product. + */ +- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant; + +/*! + Sets the price of the product. + */ +- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice; + +/*! + Sets the quantity of the product. This field is usually not used with product impressions. + */ +- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity; + +/*! + Sets the coupon code associated with the product. This field is usually not used with product + impressions. + */ +- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode; + +/*! + Sets the position of the product on the screen/product impression list, etc. + */ +- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition; + +/*! + Sets the custom dimension associated with this product. + */ +- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value; + +/*! + Sets the custom metric associated with this product. + */ +- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for a product action. The + index parameter is the index of this product in the product action list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for an impression list. The + lIndex parameter is the index of the product impression list while the index parameter is the + index of this product in that impression list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h new file mode 100644 index 0000000000..e3da1c1502 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h @@ -0,0 +1,107 @@ +/*! + @header GAIProductAction.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct transaction/checkout or other product interaction related information for a + * Google Analytics hit. Use this class to report information about products sold, viewed or + * refunded. This class is intended to be used with GAIDictionaryBuilder. + *
+ * Typical usage: + * + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init]; + * [action setAction:kGAIPAPurchase]; + * [action setTransactionId:@"TT-1234"]; + * [action setRevenue:@3.14]; + * [action setCouponCode:@"EXTRA100"]; + * [builder setProductAction:action]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProduct:product]; + * [tracker send:[builder build]]; + * + */ +@interface GAIEcommerceProductAction : NSObject + +/*! + Sets the product action field for this product action. Valid values can be found in + GAIEcommerceFields.h under "product action values". + */ +- (GAIEcommerceProductAction *)setAction:(NSString *)productAction; + +/*! + The unique id associated with the transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId; + +/*! + Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation; + +/*! + Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue; + +/*! + Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax; + +/*! + Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping; + +/*! + Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode; + +/*! + Sets the checkout process's progress. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep; + +/*! + Sets the option associated with the checkout. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption; + +/*! + Sets the list name associated with the products in Google Analytics beacons. This value is + used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList; + +/*! + Sets the list source name associated with the products in Google Analytics beacons. This value + is used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource; + +/*! + Builds an NSDictionary of fields stored in this instance representing this product action. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)build; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h new file mode 100644 index 0000000000..c7bf25af02 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h @@ -0,0 +1,54 @@ +/*! + @header GAIEcommercePromotion.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct promotion related fields for Google Analytics hits. The fields from this class + * can be used to represent internal promotions that run within an app, such as banners, banner ads + * etc. + * + * Typical usage: + * + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init]; + * [promotion setId:@"PROMO-ID1234"]; + * [promotion setName:@"Home screen banner"]; + * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction]; + * [builder addPromotion:promotion]; + * [tracker send:builder.build]]; + * + */ +@interface GAIEcommercePromotion : NSObject + +/*! + Sets the id that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setId:(NSString *)pid; + +/*! + Sets the name that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setName:(NSString *)name; + +/*! + Sets the name of the creative associated with the promotion. + */ +- (GAIEcommercePromotion *)setCreative:(NSString *)creative; + +/*! + Sets the position of the promotion. + */ +- (GAIEcommercePromotion *)setPosition:(NSString *)position; + +/*! + Builds an NSDictionary of fields stored in this instance. The index parameter is the + index of this promotion in that promotion list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIFields.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIFields.h new file mode 100644 index 0000000000..762f31faaf --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAIFields.h @@ -0,0 +1,134 @@ +/*! + @header GAIFields.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +/*! + These fields can be used for the wire format parameter names required by + the |GAITracker| get, set and send methods as well as the set methods in the + |GAIDictionaryBuilder| class. + */ +extern NSString *const kGAIUseSecure; + +extern NSString *const kGAIHitType; +extern NSString *const kGAITrackingId; +extern NSString *const kGAIClientId; +extern NSString *const kGAIDataSource; +extern NSString *const kGAIAnonymizeIp; +extern NSString *const kGAISessionControl; +extern NSString *const kGAIDeviceModelVersion; +extern NSString *const kGAIScreenResolution; +extern NSString *const kGAIViewportSize; +extern NSString *const kGAIEncoding; +extern NSString *const kGAIScreenColors; +extern NSString *const kGAILanguage; +extern NSString *const kGAIJavaEnabled; +extern NSString *const kGAIFlashVersion; +extern NSString *const kGAINonInteraction; +extern NSString *const kGAIReferrer; +extern NSString *const kGAILocation; +extern NSString *const kGAIHostname; +extern NSString *const kGAIPage; +extern NSString *const kGAIDescription; // synonym for kGAIScreenName +extern NSString *const kGAIScreenName; // synonym for kGAIDescription +extern NSString *const kGAITitle; +extern NSString *const kGAIAdMobHitId; +extern NSString *const kGAIAppName; +extern NSString *const kGAIAppVersion; +extern NSString *const kGAIAppId; +extern NSString *const kGAIAppInstallerId; +extern NSString *const kGAIUserId; + +extern NSString *const kGAIEventCategory; +extern NSString *const kGAIEventAction; +extern NSString *const kGAIEventLabel; +extern NSString *const kGAIEventValue; + +extern NSString *const kGAISocialNetwork; +extern NSString *const kGAISocialAction; +extern NSString *const kGAISocialTarget; + +extern NSString *const kGAITransactionId; +extern NSString *const kGAITransactionAffiliation; +extern NSString *const kGAITransactionRevenue; +extern NSString *const kGAITransactionShipping; +extern NSString *const kGAITransactionTax; +extern NSString *const kGAICurrencyCode; + +extern NSString *const kGAIItemPrice; +extern NSString *const kGAIItemQuantity; +extern NSString *const kGAIItemSku; +extern NSString *const kGAIItemName; +extern NSString *const kGAIItemCategory; + +extern NSString *const kGAICampaignSource; +extern NSString *const kGAICampaignMedium; +extern NSString *const kGAICampaignName; +extern NSString *const kGAICampaignKeyword; +extern NSString *const kGAICampaignContent; +extern NSString *const kGAICampaignId; +extern NSString *const kGAICampaignAdNetworkClickId; +extern NSString *const kGAICampaignAdNetworkId; + +extern NSString *const kGAITimingCategory; +extern NSString *const kGAITimingVar; +extern NSString *const kGAITimingValue; +extern NSString *const kGAITimingLabel; + +extern NSString *const kGAIExDescription; +extern NSString *const kGAIExFatal; + +extern NSString *const kGAISampleRate; + +extern NSString *const kGAIIdfa; +extern NSString *const kGAIAdTargetingEnabled; +extern NSString *const kGAINpa; + +// hit types +extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead."); +extern NSString *const kGAIScreenView; +extern NSString *const kGAIEvent; +extern NSString *const kGAISocial; +extern NSString *const kGAITransaction; +extern NSString *const kGAIItem; +extern NSString *const kGAIException; +extern NSString *const kGAITiming; + +/*! + This class provides several fields and methods useful as wire format parameter + names. The methods are used for wire format parameter names that are indexed. + */ + +@interface GAIFields : NSObject + +/*! + Generates the correct parameter name for a content group with an index. + + @param index the index of the content group. + + @return an NSString representing the content group parameter for the index. + */ ++ (NSString *)contentGroupForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custon dimension with an index. + + @param index the index of the custom dimension. + + @return an NSString representing the custom dimension parameter for the index. + */ ++ (NSString *)customDimensionForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custom metric with an index. + + @param index the index of the custom metric. + + @return an NSString representing the custom metric parameter for the index. + */ ++ (NSString *)customMetricForIndex:(NSUInteger)index; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAILogger.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAILogger.h new file mode 100644 index 0000000000..06291f2c1b --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAILogger.h @@ -0,0 +1,49 @@ +/*! + @header GAILogger.h + @abstract Google Analytics iOS SDK Source + @copyright Copyright 2011 Google Inc. All rights reserved. + */ + +#import + +typedef NS_ENUM(NSUInteger, GAILogLevel) { + kGAILogLevelNone = 0, + kGAILogLevelError = 1, + kGAILogLevelWarning = 2, + kGAILogLevelInfo = 3, + kGAILogLevelVerbose = 4 +}; + +/*! + Protocol to be used for logging debug and informational messages from the SDK. + Implementations of this protocol can be provided to the |GAI| class, + to be used as the logger by the SDK. See the |logger| property in GAI.h. + */ +@protocol GAILogger +@required + +/*! + Only messages of |logLevel| and below are logged. + */ +@property (nonatomic, assign) GAILogLevel logLevel; + +/*! + Logs message with log level |kGAILogLevelVerbose|. + */ +- (void)verbose:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelInfo|. + */ +- (void)info:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelWarning|. + */ +- (void)warning:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelError|. + */ +- (void)error:(NSString *)message; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAITrackedViewController.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAITrackedViewController.h new file mode 100644 index 0000000000..de19def00a --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAITrackedViewController.h @@ -0,0 +1,33 @@ +/*! + @header GAITrackedViewController.h + @abstract Google Analytics for iOS Tracked View Controller Header + @copyright Copyright 2012 Google Inc. All rights reserved. + */ + +#import +#import + +@protocol GAITracker; + +/*! + Extends UIViewController to generate Google Analytics screenview calls + whenever the view appears; this is done by overriding the `viewDidAppear:` + method. The screen name must be set for any tracking calls to be made. + + By default, this will use [GAI defaultTracker] for tracking calls, but one can + override this by setting the tracker property. + */ +@interface GAITrackedViewController : UIViewController + +/*! + The tracker on which view tracking calls are be made, or `nil`, in which case + [GAI defaultTracker] will be used. + */ +@property(nonatomic, assign) id tracker; +/*! + The screen name, for purposes of Google Analytics tracking. If this is `nil`, + no tracking calls will be made. + */ +@property(nonatomic, copy) NSString *screenName; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAITracker.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAITracker.h new file mode 100644 index 0000000000..ca26e5df05 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GAITracker.h @@ -0,0 +1,62 @@ +/*! + @header GAITracker.h + @abstract Google Analytics iOS SDK Tracker Header + @copyright Copyright 2013 Google Inc. All rights reserved. +*/ + +#import + +/*! + Google Analytics tracking interface. Obtain instances of this interface from + [GAI trackerWithTrackingId:] to track screens, events, transactions, timing, + and exceptions. The implementation of this interface is thread-safe, and no + calls are expected to block or take a long time. All network and disk activity + will take place in the background. + */ +@protocol GAITracker + +/*! + Name of this tracker. + */ +@property(nonatomic, readonly) NSString *name; + +/*! + Allow collection of IDFA and related fields if set to true. Default is false. + */ +@property(nonatomic) BOOL allowIDFACollection; + +/*! + Allow fields to be included in personalization features. Default is true. + */ +@property(nonatomic) BOOL allowAdPersonalizationSignals; + +/*! + Set a tracking parameter. + + @param parameterName The parameter name. + + @param value The value to set for the parameter. If this is nil, the + value for the parameter will be cleared. + */ +- (void)set:(NSString *)parameterName + value:(NSString *)value; + +/*! + Get a tracking parameter. + + @param parameterName The parameter name. + + @returns The parameter value, or nil if no value for the given parameter is + set. + */ +- (NSString *)get:(NSString *)parameterName; + +/*! + Queue tracking information with the given parameter values. + + @param parameters A map from parameter names to parameter values which will be + set just for this piece of tracking information, or nil for none. + */ +- (void)send:(NSDictionary *)parameters; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h new file mode 100644 index 0000000000..ecdf71e2b3 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h @@ -0,0 +1,26 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GAI.h" +#import "GAIDictionaryBuilder.h" +#import "GAIEcommerceFields.h" +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" +#import "GAIFields.h" +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +FOUNDATION_EXPORT double GoogleAnalyticsVersionNumber; +FOUNDATION_EXPORT const unsigned char GoogleAnalyticsVersionString[]; + diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Info.plist b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Info.plist new file mode 100644 index 0000000000..489d587a75 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAnalytics + CFBundleIdentifier + com.firebase.Firebase-GoogleAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 3.21.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Modules/module.modulemap b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..0ad464ac01 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_armv7/GoogleAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,7 @@ +framework module GoogleAnalytics { +umbrella header "GoogleAnalytics-umbrella.h" +export * +module * { export * } + link "sqlite3" + link "z" +} diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/GoogleAnalytics b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/GoogleAnalytics new file mode 100644 index 0000000000..569664e159 Binary files /dev/null and b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/GoogleAnalytics differ diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAI.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAI.h new file mode 100644 index 0000000000..c4b1d0f5fb --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAI.h @@ -0,0 +1,192 @@ +/*! + @header GAI.h + @abstract Google Analytics iOS SDK Header + @version 3.21 + @copyright Copyright 2015 Google Inc. All rights reserved. + */ + +#import + +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +typedef NS_ENUM(NSUInteger, GAIDispatchResult) { + kGAIDispatchNoData, + kGAIDispatchGood, + kGAIDispatchError +}; + +/*! Google Analytics product string. */ +extern NSString *const kGAIProduct; + +/*! Google Analytics version string. */ +extern NSString *const kGAIVersion; + +/*! + NSError objects returned by the Google Analytics SDK may have this error domain + to indicate that the error originated in the Google Analytics SDK. + */ +extern NSString *const kGAIErrorDomain; + +/*! Google Analytics error codes. */ +typedef enum { + // This error code indicates that there was no error. Never used. + kGAINoError = 0, + + // This error code indicates that there was a database-related error. + kGAIDatabaseError, + + // This error code indicates that there was a network-related error. + kGAINetworkError, +} GAIErrorCode; + +/*! + Google Analytics iOS top-level class. Provides facilities to create trackers + and set behaviorial flags. + */ +@interface GAI : NSObject + +/*! + For convenience, this class exposes a default tracker instance. + This is initialized to `nil` and will be set to the first tracker that is + instantiated in trackerWithTrackingId:. It may be overridden as desired. + + The GAITrackedViewController class will, by default, use this tracker instance. + */ +@property(nonatomic, assign) id defaultTracker; + +/*! + The GAILogger to use. + */ +@property(nonatomic, retain) id logger; + +/*! + When this is true, no tracking information will be gathered; tracking calls + will effectively become no-ops. When set to true, all tracking information that + has not yet been submitted. The value of this flag will be persisted + automatically by the SDK. Developers can optionally use this flag to implement + an opt-out setting in the app to allows users to opt out of Google Analytics + tracking. + + This is set to `NO` the first time the Google Analytics SDK is used on a + device, and is persisted thereafter. + */ +@property(nonatomic, assign) BOOL optOut; + +/*! + If this value is positive, tracking information will be automatically + dispatched every dispatchInterval seconds. Otherwise, tracking information must + be sent manually by calling dispatch. + + By default, this is set to `120`, which indicates tracking information should + be dispatched automatically every 120 seconds. + */ +@property(nonatomic, assign) NSTimeInterval dispatchInterval; + +/*! + When set to true, the SDK will record the currently registered uncaught + exception handler, and then register an uncaught exception handler which tracks + the exceptions that occurred using defaultTracker. If defaultTracker is not + `nil`, this function will track the exception on the tracker and attempt to + dispatch any outstanding tracking information for 5 seconds. It will then call + the previously registered exception handler, if any. When set back to false, + the previously registered uncaught exception handler will be restored. + */ +@property(nonatomic, assign) BOOL trackUncaughtExceptions; + +/*! + When this is 'YES', no tracking information will be sent. Defaults to 'NO'. + */ +@property(nonatomic, assign) BOOL dryRun; + +/*! Get the shared instance of the Google Analytics for iOS class. */ ++ (GAI *)sharedInstance; + +/*! + Creates or retrieves a GAITracker implementation with the specified name and + tracking ID. If the tracker for the specified name does not already exist, then + it will be created and returned; otherwise, the existing tracker will be + returned. If the existing tracker for the respective name has a different + tracking ID, that tracking ID is not changed by this method. If defaultTracker + is not set, it will be set to the tracker instance returned here. + + @param name The name of this tracker. Must not be `nil` or empty. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. + + @return A GAITracker associated with the specified name. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular name, the tracker for that name will be + returned, and subsequent calls with the same name will return the same + instance. It is not necessary to retain the tracker because the tracker will be + retained internally by the library. + + If an error occurs or the name is not valid, this method will return + `nil`. + */ +- (id)trackerWithName:(NSString *)name + trackingId:(NSString *)trackingId; + +/*! + Creates or retrieves a GAITracker implementation with name equal to + the specified tracking ID. If the tracker for the respective name does not + already exist, it is created, has it's tracking ID set to |trackingId|, + and is returned; otherwise, the existing tracker is returned. If the existing + tracker for the respective name has a different tracking ID, that tracking ID + is not changed by this method. If defaultTracker is not set, it is set to the + tracker instance returned here. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingId. + + @return A GAITracker associated with the specified trackingId. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular trackingId, the tracker for the respective + name will be returned, and subsequent calls with the same trackingId + will return the same instance. It is not necessary to retain the tracker + because the tracker will be retained internally by the library. + + If an error occurs or the trackingId is not valid, this method will return + `nil`. + */ +- (id)trackerWithTrackingId:(NSString *)trackingId; + +/*! + Remove a tracker from the trackers dictionary. If it is the default tracker, + clears the default tracker as well. + + @param name The name of the tracker. + */ +- (void)removeTrackerByName:(NSString *)name; + +/*! + Dispatches any pending tracking information. + + Note that this does not have any effect on dispatchInterval, and can be used in + conjunction with periodic dispatch. */ +- (void)dispatch; + +/*! + Dispatches the next tracking beacon in the queue, calling completionHandler when + the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted + (returning kGAIDispatchError). If there is no network connection or there is no data to send, + kGAIDispatchNoData is returned. + + Note that calling this method with a non-nil completionHandler disables periodic dispatch. + Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when + the app resumes from the background. + + Calling this method with a nil completionHandler is the same as calling the dispatch + above. + + This method can be used for background data fetching in iOS 7.0 or later. It would be wise to + call this when the application is exiting to initiate the submission of any unsubmitted + tracking information. + + @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult + param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch. + */ +- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h new file mode 100644 index 0000000000..aa96cba11b --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h @@ -0,0 +1,214 @@ +/*! + @header GAIDictionaryBuilder.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" + +/*! + * Helper class to build a dictionary of hit parameters and values. + *
+ * Examples: + * + * id t = // get a tracker. + * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory" + * action:@"EventAction" + * label:nil + * value:nil] + * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]]; + * + * This will send an event hit type with the specified parameters + * and a custom dimension parameter. + *
+ * If you want to send a parameter with all hits, set it on GAITracker directly. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"PlusOne" + * target:@"SOME_URL"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"Share" + * target:@"SOME_POST"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"HangOut" + * target:@"SOME_CIRCLE"] + * build]]; + * + * You can override a value set on the tracker by adding it to the dictionary. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:...]; + * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click" + * action:@"popup" + * label:nil + * value:nil] + * set:@"popup title" forKey:kGAIScreenName] build]]; + * + * The values set via [GAIDictionaryBuilder set] or + * [GAIDictionaryBuilder setAll] will override any existing values in the + * GAIDictionaryBuilder object (i.e. initialized by + * [GAIDictionaryBuilder createXYZ]). e.g. + * + * GAIDictionaryBuilder *m = + * GAIDictionaryBuilder createTimingWithCategory:@"category" + * interval:@0 + * name:@"name" + * label:nil]; + * [t send:[m.set:@"10" forKey:kGAITimingVar] build]; + * [t send:[m.set:@"20" forKey:kGAITimingVar] build]; + * + */ +@interface GAIDictionaryBuilder : NSObject + +- (GAIDictionaryBuilder *)set:(NSString *)value + forKey:(NSString *)key; + +/*! + * Copies all the name-value pairs from params into this object, ignoring any + * keys that are not NSString and any values that are neither NSString or + * NSNull. + */ +- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params; + +/*! + * Returns the value for the input parameter paramName, or nil if paramName + * is not present. + */ +- (NSString *)get:(NSString *)paramName; + +/*! + * Return an NSMutableDictionary object with all the parameters set in this + */ +- (NSMutableDictionary *)build; + +/*! + * Parses and translates utm campaign parameters to analytics campaign param + * and returns them as a map. + * + * @param urlString url containing utm campaign parameters. + * + * Valid campaign parameters are: + *

    + *
  • utm_id
  • + *
  • utm_campaign
  • + *
  • utm_content
  • + *
  • utm_medium
  • + *
  • utm_source
  • + *
  • utm_term
  • + *
  • dclid
  • + *
  • gclid
  • + *
  • gmob_t
  • + *
  • aclid
  • + *
  • anid
  • + *
+ *

+ * Example: + * http://my.site.com/index.html?utm_campaign=wow&utm_source=source + * utm_campaign=wow&utm_source=source. + *

+ * For more information on manual and auto-tagging, see + * https://support.google.com/analytics/answer/1733663?hl=en + */ +- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an appview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value: on the + GAITracker instance. + + This method is deprecated. Use createScreenView instead. + */ ++ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead."); + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a screenview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value: on the + GAITracker instance. + */ ++ (GAIDictionaryBuilder *)createScreenView; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an event hit. + */ ++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category + action:(NSString *)action + label:(NSString *)label + value:(NSNumber *)value; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an exception + hit. + */ ++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description + withFatal:(NSNumber *)fatal; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an item hit. + */ ++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId + name:(NSString *)name + sku:(NSString *)sku + category:(NSString *)category + price:(NSNumber *)price + quantity:(NSNumber *)quantity + currencyCode:(NSString *)currencyCode; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a social hit. + */ ++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network + action:(NSString *)action + target:(NSString *)target; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a timing hit. + */ ++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category + interval:(NSNumber *)intervalMillis + name:(NSString *)name + label:(NSString *)label; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a transaction + hit. + */ ++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId + affiliation:(NSString *)affiliation + revenue:(NSNumber *)revenue + tax:(NSNumber *)tax + shipping:(NSNumber *)shipping + currencyCode:(NSString *)currencyCode; + +/*! + Set the product action field for this hit. + */ +- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction; + +/*! + Adds a product to this hit. + */ +- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product; + +/*! + Add a product impression to this hit. + */ +- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product + impressionList:(NSString *)name + impressionSource:(NSString *)source; + +/*! + Add a promotion to this hit. + */ +- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h new file mode 100644 index 0000000000..dc9797f037 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h @@ -0,0 +1,124 @@ +/*! + @header GAIEcommerceFields.h + @abstract Google Analytics iOS SDK Ecommerce Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + This class provides several fields and methods useful as wire format parameters for + Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details + on how to use the Enhanced Ecommerce features. + */ + +// Enhanced Ecommerce Product fields +extern NSString *const kGAIProductId; +extern NSString *const kGAIProductName; +extern NSString *const kGAIProductBrand; +extern NSString *const kGAIProductCategory; +extern NSString *const kGAIProductVariant; +extern NSString *const kGAIProductPrice; +extern NSString *const kGAIProductQuantity; +extern NSString *const kGAIProductCouponCode; +extern NSString *const kGAIProductPosition; + +extern NSString *const kGAIProductAction; + +// product action values +extern NSString *const kGAIPADetail; +extern NSString *const kGAIPAClick; +extern NSString *const kGAIPAAdd; +extern NSString *const kGAIPARemove; +extern NSString *const kGAIPACheckout; +extern NSString *const kGAIPACheckoutOption; +extern NSString *const kGAIPAPurchase; +extern NSString *const kGAIPARefund; + +// product action fields +// used for 'purchase' and 'refund' actions +extern NSString *const kGAIPATransactionId; +extern NSString *const kGAIPAAffiliation; +extern NSString *const kGAIPARevenue; +extern NSString *const kGAIPATax; +extern NSString *const kGAIPAShipping; +extern NSString *const kGAIPACouponCode; +// used for 'checkout' action +extern NSString *const kGAICheckoutStep; +extern NSString *const kGAICheckoutOption; +// used for 'detail' and 'click' actions +extern NSString *const kGAIProductActionList; +extern NSString *const kGAIProductListSource; + +// Enhanced Ecommerce Impressions fields +extern NSString *const kGAIImpressionName; +extern NSString *const kGAIImpressionListSource; +extern NSString *const kGAIImpressionProduct; +extern NSString *const kGAIImpressionProductId; +extern NSString *const kGAIImpressionProductName; +extern NSString *const kGAIImpressionProductBrand; +extern NSString *const kGAIImpressionProductCategory; +extern NSString *const kGAIImpressionProductVariant; +extern NSString *const kGAIImpressionProductPosition; +extern NSString *const kGAIImpressionProductPrice; + +// Enhanced Ecommerce Promotions fields +extern NSString *const kGAIPromotionId; +extern NSString *const kGAIPromotionName; +extern NSString *const kGAIPromotionCreative; +extern NSString *const kGAIPromotionPosition; + +// Promotion actions +extern NSString *const kGAIPromotionAction; +extern NSString *const kGAIPromotionView; +extern NSString *const kGAIPromotionClick; + +@interface GAIEcommerceFields : NSObject + +/*! + Generates an enhanced ecommerce product field. Note that field names generated by + customDimensionForIndex and customMetricForIndex can be used as suffixes. + + @param index the index of the product + @param suffix the product field suffix (such as kGAIProductPrice). + + @return an NSString representing the product field parameter + */ ++ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix; + +/*! + Genrates an enhanced ecommerce impression list field name with an index. The return value of + this method should also be used as input to the productImpressionForList method below. + + @param index the index of the impression list + + @return an NSString representing the impression list parameter + */ ++ (NSString *)impressionListForIndex:(NSUInteger)index; + +/*! + Generates an enhanced ecommerce product impression field with the impression list, product index + and product suffix as parameters. The output of the method impressionListForIndex above should be + used as the input list for this method. The output of customDimensionForIndex and + customMetricForIndex can be used as suffixes. + + @param list the impression list for this product impression + @param index the index of this product in the impression list + @param suffix the product impression suffix for this field + + @return an NSString representing this product impression field parameter + */ ++ (NSString *)productImpressionForList:(NSString *)list + index:(NSUInteger)index + suffix:(NSString *)suffix; + +/*! + Generates an enhanced ecommerce promotion field with an index and suffix. + + @param index the index of the promotion + @param suffix the promotion suffix (such as kGAIPromotionId) + + @return an NSString representing this promotion field paramter + */ ++ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h new file mode 100644 index 0000000000..b0ba7aaf0c --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h @@ -0,0 +1,102 @@ +/*! + @header GAIEcommerceProduct.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct product related information for a Google Analytics beacon. Use this class to + * report information about products sold by merchants or impressions of products seen by users. + * Instances of this class can be associated with both Product Actions and Product + * Impression Lists. + *
+ * Typical usage: + * + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProductImpression:product impressionList:@"listName"]; + * [tracker send:[builder build]]; + * + */ +@interface GAIEcommerceProduct : NSObject + +/*! + Sets the id that is used to identify a product in GA reports. + */ +- (GAIEcommerceProduct *)setId:(NSString *)productId; + +/*! + Sets the name that is used to identify the product in GA reports. + */ +- (GAIEcommerceProduct *)setName:(NSString *)productName; + +/*! + Sets the brand associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand; + +/*! + Sets the category associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory; + +/*! + Sets the variant of the product. + */ +- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant; + +/*! + Sets the price of the product. + */ +- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice; + +/*! + Sets the quantity of the product. This field is usually not used with product impressions. + */ +- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity; + +/*! + Sets the coupon code associated with the product. This field is usually not used with product + impressions. + */ +- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode; + +/*! + Sets the position of the product on the screen/product impression list, etc. + */ +- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition; + +/*! + Sets the custom dimension associated with this product. + */ +- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value; + +/*! + Sets the custom metric associated with this product. + */ +- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for a product action. The + index parameter is the index of this product in the product action list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for an impression list. The + lIndex parameter is the index of the product impression list while the index parameter is the + index of this product in that impression list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h new file mode 100644 index 0000000000..e3da1c1502 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h @@ -0,0 +1,107 @@ +/*! + @header GAIProductAction.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct transaction/checkout or other product interaction related information for a + * Google Analytics hit. Use this class to report information about products sold, viewed or + * refunded. This class is intended to be used with GAIDictionaryBuilder. + *
+ * Typical usage: + * + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init]; + * [action setAction:kGAIPAPurchase]; + * [action setTransactionId:@"TT-1234"]; + * [action setRevenue:@3.14]; + * [action setCouponCode:@"EXTRA100"]; + * [builder setProductAction:action]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProduct:product]; + * [tracker send:[builder build]]; + * + */ +@interface GAIEcommerceProductAction : NSObject + +/*! + Sets the product action field for this product action. Valid values can be found in + GAIEcommerceFields.h under "product action values". + */ +- (GAIEcommerceProductAction *)setAction:(NSString *)productAction; + +/*! + The unique id associated with the transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId; + +/*! + Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation; + +/*! + Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue; + +/*! + Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax; + +/*! + Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping; + +/*! + Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode; + +/*! + Sets the checkout process's progress. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep; + +/*! + Sets the option associated with the checkout. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption; + +/*! + Sets the list name associated with the products in Google Analytics beacons. This value is + used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList; + +/*! + Sets the list source name associated with the products in Google Analytics beacons. This value + is used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource; + +/*! + Builds an NSDictionary of fields stored in this instance representing this product action. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)build; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h new file mode 100644 index 0000000000..c7bf25af02 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h @@ -0,0 +1,54 @@ +/*! + @header GAIEcommercePromotion.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct promotion related fields for Google Analytics hits. The fields from this class + * can be used to represent internal promotions that run within an app, such as banners, banner ads + * etc. + * + * Typical usage: + * + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init]; + * [promotion setId:@"PROMO-ID1234"]; + * [promotion setName:@"Home screen banner"]; + * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction]; + * [builder addPromotion:promotion]; + * [tracker send:builder.build]]; + * + */ +@interface GAIEcommercePromotion : NSObject + +/*! + Sets the id that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setId:(NSString *)pid; + +/*! + Sets the name that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setName:(NSString *)name; + +/*! + Sets the name of the creative associated with the promotion. + */ +- (GAIEcommercePromotion *)setCreative:(NSString *)creative; + +/*! + Sets the position of the promotion. + */ +- (GAIEcommercePromotion *)setPosition:(NSString *)position; + +/*! + Builds an NSDictionary of fields stored in this instance. The index parameter is the + index of this promotion in that promotion list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIFields.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIFields.h new file mode 100644 index 0000000000..762f31faaf --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAIFields.h @@ -0,0 +1,134 @@ +/*! + @header GAIFields.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +/*! + These fields can be used for the wire format parameter names required by + the |GAITracker| get, set and send methods as well as the set methods in the + |GAIDictionaryBuilder| class. + */ +extern NSString *const kGAIUseSecure; + +extern NSString *const kGAIHitType; +extern NSString *const kGAITrackingId; +extern NSString *const kGAIClientId; +extern NSString *const kGAIDataSource; +extern NSString *const kGAIAnonymizeIp; +extern NSString *const kGAISessionControl; +extern NSString *const kGAIDeviceModelVersion; +extern NSString *const kGAIScreenResolution; +extern NSString *const kGAIViewportSize; +extern NSString *const kGAIEncoding; +extern NSString *const kGAIScreenColors; +extern NSString *const kGAILanguage; +extern NSString *const kGAIJavaEnabled; +extern NSString *const kGAIFlashVersion; +extern NSString *const kGAINonInteraction; +extern NSString *const kGAIReferrer; +extern NSString *const kGAILocation; +extern NSString *const kGAIHostname; +extern NSString *const kGAIPage; +extern NSString *const kGAIDescription; // synonym for kGAIScreenName +extern NSString *const kGAIScreenName; // synonym for kGAIDescription +extern NSString *const kGAITitle; +extern NSString *const kGAIAdMobHitId; +extern NSString *const kGAIAppName; +extern NSString *const kGAIAppVersion; +extern NSString *const kGAIAppId; +extern NSString *const kGAIAppInstallerId; +extern NSString *const kGAIUserId; + +extern NSString *const kGAIEventCategory; +extern NSString *const kGAIEventAction; +extern NSString *const kGAIEventLabel; +extern NSString *const kGAIEventValue; + +extern NSString *const kGAISocialNetwork; +extern NSString *const kGAISocialAction; +extern NSString *const kGAISocialTarget; + +extern NSString *const kGAITransactionId; +extern NSString *const kGAITransactionAffiliation; +extern NSString *const kGAITransactionRevenue; +extern NSString *const kGAITransactionShipping; +extern NSString *const kGAITransactionTax; +extern NSString *const kGAICurrencyCode; + +extern NSString *const kGAIItemPrice; +extern NSString *const kGAIItemQuantity; +extern NSString *const kGAIItemSku; +extern NSString *const kGAIItemName; +extern NSString *const kGAIItemCategory; + +extern NSString *const kGAICampaignSource; +extern NSString *const kGAICampaignMedium; +extern NSString *const kGAICampaignName; +extern NSString *const kGAICampaignKeyword; +extern NSString *const kGAICampaignContent; +extern NSString *const kGAICampaignId; +extern NSString *const kGAICampaignAdNetworkClickId; +extern NSString *const kGAICampaignAdNetworkId; + +extern NSString *const kGAITimingCategory; +extern NSString *const kGAITimingVar; +extern NSString *const kGAITimingValue; +extern NSString *const kGAITimingLabel; + +extern NSString *const kGAIExDescription; +extern NSString *const kGAIExFatal; + +extern NSString *const kGAISampleRate; + +extern NSString *const kGAIIdfa; +extern NSString *const kGAIAdTargetingEnabled; +extern NSString *const kGAINpa; + +// hit types +extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead."); +extern NSString *const kGAIScreenView; +extern NSString *const kGAIEvent; +extern NSString *const kGAISocial; +extern NSString *const kGAITransaction; +extern NSString *const kGAIItem; +extern NSString *const kGAIException; +extern NSString *const kGAITiming; + +/*! + This class provides several fields and methods useful as wire format parameter + names. The methods are used for wire format parameter names that are indexed. + */ + +@interface GAIFields : NSObject + +/*! + Generates the correct parameter name for a content group with an index. + + @param index the index of the content group. + + @return an NSString representing the content group parameter for the index. + */ ++ (NSString *)contentGroupForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custon dimension with an index. + + @param index the index of the custom dimension. + + @return an NSString representing the custom dimension parameter for the index. + */ ++ (NSString *)customDimensionForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custom metric with an index. + + @param index the index of the custom metric. + + @return an NSString representing the custom metric parameter for the index. + */ ++ (NSString *)customMetricForIndex:(NSUInteger)index; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAILogger.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAILogger.h new file mode 100644 index 0000000000..06291f2c1b --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAILogger.h @@ -0,0 +1,49 @@ +/*! + @header GAILogger.h + @abstract Google Analytics iOS SDK Source + @copyright Copyright 2011 Google Inc. All rights reserved. + */ + +#import + +typedef NS_ENUM(NSUInteger, GAILogLevel) { + kGAILogLevelNone = 0, + kGAILogLevelError = 1, + kGAILogLevelWarning = 2, + kGAILogLevelInfo = 3, + kGAILogLevelVerbose = 4 +}; + +/*! + Protocol to be used for logging debug and informational messages from the SDK. + Implementations of this protocol can be provided to the |GAI| class, + to be used as the logger by the SDK. See the |logger| property in GAI.h. + */ +@protocol GAILogger +@required + +/*! + Only messages of |logLevel| and below are logged. + */ +@property (nonatomic, assign) GAILogLevel logLevel; + +/*! + Logs message with log level |kGAILogLevelVerbose|. + */ +- (void)verbose:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelInfo|. + */ +- (void)info:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelWarning|. + */ +- (void)warning:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelError|. + */ +- (void)error:(NSString *)message; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAITrackedViewController.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAITrackedViewController.h new file mode 100644 index 0000000000..de19def00a --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAITrackedViewController.h @@ -0,0 +1,33 @@ +/*! + @header GAITrackedViewController.h + @abstract Google Analytics for iOS Tracked View Controller Header + @copyright Copyright 2012 Google Inc. All rights reserved. + */ + +#import +#import + +@protocol GAITracker; + +/*! + Extends UIViewController to generate Google Analytics screenview calls + whenever the view appears; this is done by overriding the `viewDidAppear:` + method. The screen name must be set for any tracking calls to be made. + + By default, this will use [GAI defaultTracker] for tracking calls, but one can + override this by setting the tracker property. + */ +@interface GAITrackedViewController : UIViewController + +/*! + The tracker on which view tracking calls are be made, or `nil`, in which case + [GAI defaultTracker] will be used. + */ +@property(nonatomic, assign) id tracker; +/*! + The screen name, for purposes of Google Analytics tracking. If this is `nil`, + no tracking calls will be made. + */ +@property(nonatomic, copy) NSString *screenName; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAITracker.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAITracker.h new file mode 100644 index 0000000000..ca26e5df05 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GAITracker.h @@ -0,0 +1,62 @@ +/*! + @header GAITracker.h + @abstract Google Analytics iOS SDK Tracker Header + @copyright Copyright 2013 Google Inc. All rights reserved. +*/ + +#import + +/*! + Google Analytics tracking interface. Obtain instances of this interface from + [GAI trackerWithTrackingId:] to track screens, events, transactions, timing, + and exceptions. The implementation of this interface is thread-safe, and no + calls are expected to block or take a long time. All network and disk activity + will take place in the background. + */ +@protocol GAITracker + +/*! + Name of this tracker. + */ +@property(nonatomic, readonly) NSString *name; + +/*! + Allow collection of IDFA and related fields if set to true. Default is false. + */ +@property(nonatomic) BOOL allowIDFACollection; + +/*! + Allow fields to be included in personalization features. Default is true. + */ +@property(nonatomic) BOOL allowAdPersonalizationSignals; + +/*! + Set a tracking parameter. + + @param parameterName The parameter name. + + @param value The value to set for the parameter. If this is nil, the + value for the parameter will be cleared. + */ +- (void)set:(NSString *)parameterName + value:(NSString *)value; + +/*! + Get a tracking parameter. + + @param parameterName The parameter name. + + @returns The parameter value, or nil if no value for the given parameter is + set. + */ +- (NSString *)get:(NSString *)parameterName; + +/*! + Queue tracking information with the given parameter values. + + @param parameters A map from parameter names to parameter values which will be + set just for this piece of tracking information, or nil for none. + */ +- (void)send:(NSDictionary *)parameters; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h new file mode 100644 index 0000000000..ecdf71e2b3 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h @@ -0,0 +1,26 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GAI.h" +#import "GAIDictionaryBuilder.h" +#import "GAIEcommerceFields.h" +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" +#import "GAIFields.h" +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +FOUNDATION_EXPORT double GoogleAnalyticsVersionNumber; +FOUNDATION_EXPORT const unsigned char GoogleAnalyticsVersionString[]; + diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Info.plist b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Info.plist new file mode 100644 index 0000000000..489d587a75 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAnalytics + CFBundleIdentifier + com.firebase.Firebase-GoogleAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 3.21.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Modules/module.modulemap b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..0ad464ac01 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,7 @@ +framework module GoogleAnalytics { +umbrella header "GoogleAnalytics-umbrella.h" +export * +module * { export * } + link "sqlite3" + link "z" +} diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/GoogleAnalytics b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/GoogleAnalytics new file mode 100644 index 0000000000..7da00f0a95 Binary files /dev/null and b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/GoogleAnalytics differ diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAI.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAI.h new file mode 100644 index 0000000000..c4b1d0f5fb --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAI.h @@ -0,0 +1,192 @@ +/*! + @header GAI.h + @abstract Google Analytics iOS SDK Header + @version 3.21 + @copyright Copyright 2015 Google Inc. All rights reserved. + */ + +#import + +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +typedef NS_ENUM(NSUInteger, GAIDispatchResult) { + kGAIDispatchNoData, + kGAIDispatchGood, + kGAIDispatchError +}; + +/*! Google Analytics product string. */ +extern NSString *const kGAIProduct; + +/*! Google Analytics version string. */ +extern NSString *const kGAIVersion; + +/*! + NSError objects returned by the Google Analytics SDK may have this error domain + to indicate that the error originated in the Google Analytics SDK. + */ +extern NSString *const kGAIErrorDomain; + +/*! Google Analytics error codes. */ +typedef enum { + // This error code indicates that there was no error. Never used. + kGAINoError = 0, + + // This error code indicates that there was a database-related error. + kGAIDatabaseError, + + // This error code indicates that there was a network-related error. + kGAINetworkError, +} GAIErrorCode; + +/*! + Google Analytics iOS top-level class. Provides facilities to create trackers + and set behaviorial flags. + */ +@interface GAI : NSObject + +/*! + For convenience, this class exposes a default tracker instance. + This is initialized to `nil` and will be set to the first tracker that is + instantiated in trackerWithTrackingId:. It may be overridden as desired. + + The GAITrackedViewController class will, by default, use this tracker instance. + */ +@property(nonatomic, assign) id defaultTracker; + +/*! + The GAILogger to use. + */ +@property(nonatomic, retain) id logger; + +/*! + When this is true, no tracking information will be gathered; tracking calls + will effectively become no-ops. When set to true, all tracking information that + has not yet been submitted. The value of this flag will be persisted + automatically by the SDK. Developers can optionally use this flag to implement + an opt-out setting in the app to allows users to opt out of Google Analytics + tracking. + + This is set to `NO` the first time the Google Analytics SDK is used on a + device, and is persisted thereafter. + */ +@property(nonatomic, assign) BOOL optOut; + +/*! + If this value is positive, tracking information will be automatically + dispatched every dispatchInterval seconds. Otherwise, tracking information must + be sent manually by calling dispatch. + + By default, this is set to `120`, which indicates tracking information should + be dispatched automatically every 120 seconds. + */ +@property(nonatomic, assign) NSTimeInterval dispatchInterval; + +/*! + When set to true, the SDK will record the currently registered uncaught + exception handler, and then register an uncaught exception handler which tracks + the exceptions that occurred using defaultTracker. If defaultTracker is not + `nil`, this function will track the exception on the tracker and attempt to + dispatch any outstanding tracking information for 5 seconds. It will then call + the previously registered exception handler, if any. When set back to false, + the previously registered uncaught exception handler will be restored. + */ +@property(nonatomic, assign) BOOL trackUncaughtExceptions; + +/*! + When this is 'YES', no tracking information will be sent. Defaults to 'NO'. + */ +@property(nonatomic, assign) BOOL dryRun; + +/*! Get the shared instance of the Google Analytics for iOS class. */ ++ (GAI *)sharedInstance; + +/*! + Creates or retrieves a GAITracker implementation with the specified name and + tracking ID. If the tracker for the specified name does not already exist, then + it will be created and returned; otherwise, the existing tracker will be + returned. If the existing tracker for the respective name has a different + tracking ID, that tracking ID is not changed by this method. If defaultTracker + is not set, it will be set to the tracker instance returned here. + + @param name The name of this tracker. Must not be `nil` or empty. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. + + @return A GAITracker associated with the specified name. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular name, the tracker for that name will be + returned, and subsequent calls with the same name will return the same + instance. It is not necessary to retain the tracker because the tracker will be + retained internally by the library. + + If an error occurs or the name is not valid, this method will return + `nil`. + */ +- (id)trackerWithName:(NSString *)name + trackingId:(NSString *)trackingId; + +/*! + Creates or retrieves a GAITracker implementation with name equal to + the specified tracking ID. If the tracker for the respective name does not + already exist, it is created, has it's tracking ID set to |trackingId|, + and is returned; otherwise, the existing tracker is returned. If the existing + tracker for the respective name has a different tracking ID, that tracking ID + is not changed by this method. If defaultTracker is not set, it is set to the + tracker instance returned here. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingId. + + @return A GAITracker associated with the specified trackingId. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular trackingId, the tracker for the respective + name will be returned, and subsequent calls with the same trackingId + will return the same instance. It is not necessary to retain the tracker + because the tracker will be retained internally by the library. + + If an error occurs or the trackingId is not valid, this method will return + `nil`. + */ +- (id)trackerWithTrackingId:(NSString *)trackingId; + +/*! + Remove a tracker from the trackers dictionary. If it is the default tracker, + clears the default tracker as well. + + @param name The name of the tracker. + */ +- (void)removeTrackerByName:(NSString *)name; + +/*! + Dispatches any pending tracking information. + + Note that this does not have any effect on dispatchInterval, and can be used in + conjunction with periodic dispatch. */ +- (void)dispatch; + +/*! + Dispatches the next tracking beacon in the queue, calling completionHandler when + the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted + (returning kGAIDispatchError). If there is no network connection or there is no data to send, + kGAIDispatchNoData is returned. + + Note that calling this method with a non-nil completionHandler disables periodic dispatch. + Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when + the app resumes from the background. + + Calling this method with a nil completionHandler is the same as calling the dispatch + above. + + This method can be used for background data fetching in iOS 7.0 or later. It would be wise to + call this when the application is exiting to initiate the submission of any unsubmitted + tracking information. + + @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult + param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch. + */ +- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h new file mode 100644 index 0000000000..aa96cba11b --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIDictionaryBuilder.h @@ -0,0 +1,214 @@ +/*! + @header GAIDictionaryBuilder.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" + +/*! + * Helper class to build a dictionary of hit parameters and values. + *
+ * Examples: + * + * id t = // get a tracker. + * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory" + * action:@"EventAction" + * label:nil + * value:nil] + * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]]; + * + * This will send an event hit type with the specified parameters + * and a custom dimension parameter. + *
+ * If you want to send a parameter with all hits, set it on GAITracker directly. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"PlusOne" + * target:@"SOME_URL"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"Share" + * target:@"SOME_POST"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"HangOut" + * target:@"SOME_CIRCLE"] + * build]]; + * + * You can override a value set on the tracker by adding it to the dictionary. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:...]; + * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click" + * action:@"popup" + * label:nil + * value:nil] + * set:@"popup title" forKey:kGAIScreenName] build]]; + * + * The values set via [GAIDictionaryBuilder set] or + * [GAIDictionaryBuilder setAll] will override any existing values in the + * GAIDictionaryBuilder object (i.e. initialized by + * [GAIDictionaryBuilder createXYZ]). e.g. + * + * GAIDictionaryBuilder *m = + * GAIDictionaryBuilder createTimingWithCategory:@"category" + * interval:@0 + * name:@"name" + * label:nil]; + * [t send:[m.set:@"10" forKey:kGAITimingVar] build]; + * [t send:[m.set:@"20" forKey:kGAITimingVar] build]; + * + */ +@interface GAIDictionaryBuilder : NSObject + +- (GAIDictionaryBuilder *)set:(NSString *)value + forKey:(NSString *)key; + +/*! + * Copies all the name-value pairs from params into this object, ignoring any + * keys that are not NSString and any values that are neither NSString or + * NSNull. + */ +- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params; + +/*! + * Returns the value for the input parameter paramName, or nil if paramName + * is not present. + */ +- (NSString *)get:(NSString *)paramName; + +/*! + * Return an NSMutableDictionary object with all the parameters set in this + */ +- (NSMutableDictionary *)build; + +/*! + * Parses and translates utm campaign parameters to analytics campaign param + * and returns them as a map. + * + * @param urlString url containing utm campaign parameters. + * + * Valid campaign parameters are: + *

    + *
  • utm_id
  • + *
  • utm_campaign
  • + *
  • utm_content
  • + *
  • utm_medium
  • + *
  • utm_source
  • + *
  • utm_term
  • + *
  • dclid
  • + *
  • gclid
  • + *
  • gmob_t
  • + *
  • aclid
  • + *
  • anid
  • + *
+ *

+ * Example: + * http://my.site.com/index.html?utm_campaign=wow&utm_source=source + * utm_campaign=wow&utm_source=source. + *

+ * For more information on manual and auto-tagging, see + * https://support.google.com/analytics/answer/1733663?hl=en + */ +- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an appview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value: on the + GAITracker instance. + + This method is deprecated. Use createScreenView instead. + */ ++ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead."); + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a screenview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value: on the + GAITracker instance. + */ ++ (GAIDictionaryBuilder *)createScreenView; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an event hit. + */ ++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category + action:(NSString *)action + label:(NSString *)label + value:(NSNumber *)value; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an exception + hit. + */ ++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description + withFatal:(NSNumber *)fatal; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an item hit. + */ ++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId + name:(NSString *)name + sku:(NSString *)sku + category:(NSString *)category + price:(NSNumber *)price + quantity:(NSNumber *)quantity + currencyCode:(NSString *)currencyCode; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a social hit. + */ ++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network + action:(NSString *)action + target:(NSString *)target; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a timing hit. + */ ++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category + interval:(NSNumber *)intervalMillis + name:(NSString *)name + label:(NSString *)label; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a transaction + hit. + */ ++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId + affiliation:(NSString *)affiliation + revenue:(NSNumber *)revenue + tax:(NSNumber *)tax + shipping:(NSNumber *)shipping + currencyCode:(NSString *)currencyCode; + +/*! + Set the product action field for this hit. + */ +- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction; + +/*! + Adds a product to this hit. + */ +- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product; + +/*! + Add a product impression to this hit. + */ +- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product + impressionList:(NSString *)name + impressionSource:(NSString *)source; + +/*! + Add a promotion to this hit. + */ +- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h new file mode 100644 index 0000000000..dc9797f037 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceFields.h @@ -0,0 +1,124 @@ +/*! + @header GAIEcommerceFields.h + @abstract Google Analytics iOS SDK Ecommerce Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + This class provides several fields and methods useful as wire format parameters for + Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details + on how to use the Enhanced Ecommerce features. + */ + +// Enhanced Ecommerce Product fields +extern NSString *const kGAIProductId; +extern NSString *const kGAIProductName; +extern NSString *const kGAIProductBrand; +extern NSString *const kGAIProductCategory; +extern NSString *const kGAIProductVariant; +extern NSString *const kGAIProductPrice; +extern NSString *const kGAIProductQuantity; +extern NSString *const kGAIProductCouponCode; +extern NSString *const kGAIProductPosition; + +extern NSString *const kGAIProductAction; + +// product action values +extern NSString *const kGAIPADetail; +extern NSString *const kGAIPAClick; +extern NSString *const kGAIPAAdd; +extern NSString *const kGAIPARemove; +extern NSString *const kGAIPACheckout; +extern NSString *const kGAIPACheckoutOption; +extern NSString *const kGAIPAPurchase; +extern NSString *const kGAIPARefund; + +// product action fields +// used for 'purchase' and 'refund' actions +extern NSString *const kGAIPATransactionId; +extern NSString *const kGAIPAAffiliation; +extern NSString *const kGAIPARevenue; +extern NSString *const kGAIPATax; +extern NSString *const kGAIPAShipping; +extern NSString *const kGAIPACouponCode; +// used for 'checkout' action +extern NSString *const kGAICheckoutStep; +extern NSString *const kGAICheckoutOption; +// used for 'detail' and 'click' actions +extern NSString *const kGAIProductActionList; +extern NSString *const kGAIProductListSource; + +// Enhanced Ecommerce Impressions fields +extern NSString *const kGAIImpressionName; +extern NSString *const kGAIImpressionListSource; +extern NSString *const kGAIImpressionProduct; +extern NSString *const kGAIImpressionProductId; +extern NSString *const kGAIImpressionProductName; +extern NSString *const kGAIImpressionProductBrand; +extern NSString *const kGAIImpressionProductCategory; +extern NSString *const kGAIImpressionProductVariant; +extern NSString *const kGAIImpressionProductPosition; +extern NSString *const kGAIImpressionProductPrice; + +// Enhanced Ecommerce Promotions fields +extern NSString *const kGAIPromotionId; +extern NSString *const kGAIPromotionName; +extern NSString *const kGAIPromotionCreative; +extern NSString *const kGAIPromotionPosition; + +// Promotion actions +extern NSString *const kGAIPromotionAction; +extern NSString *const kGAIPromotionView; +extern NSString *const kGAIPromotionClick; + +@interface GAIEcommerceFields : NSObject + +/*! + Generates an enhanced ecommerce product field. Note that field names generated by + customDimensionForIndex and customMetricForIndex can be used as suffixes. + + @param index the index of the product + @param suffix the product field suffix (such as kGAIProductPrice). + + @return an NSString representing the product field parameter + */ ++ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix; + +/*! + Genrates an enhanced ecommerce impression list field name with an index. The return value of + this method should also be used as input to the productImpressionForList method below. + + @param index the index of the impression list + + @return an NSString representing the impression list parameter + */ ++ (NSString *)impressionListForIndex:(NSUInteger)index; + +/*! + Generates an enhanced ecommerce product impression field with the impression list, product index + and product suffix as parameters. The output of the method impressionListForIndex above should be + used as the input list for this method. The output of customDimensionForIndex and + customMetricForIndex can be used as suffixes. + + @param list the impression list for this product impression + @param index the index of this product in the impression list + @param suffix the product impression suffix for this field + + @return an NSString representing this product impression field parameter + */ ++ (NSString *)productImpressionForList:(NSString *)list + index:(NSUInteger)index + suffix:(NSString *)suffix; + +/*! + Generates an enhanced ecommerce promotion field with an index and suffix. + + @param index the index of the promotion + @param suffix the promotion suffix (such as kGAIPromotionId) + + @return an NSString representing this promotion field paramter + */ ++ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h new file mode 100644 index 0000000000..b0ba7aaf0c --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceProduct.h @@ -0,0 +1,102 @@ +/*! + @header GAIEcommerceProduct.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct product related information for a Google Analytics beacon. Use this class to + * report information about products sold by merchants or impressions of products seen by users. + * Instances of this class can be associated with both Product Actions and Product + * Impression Lists. + *
+ * Typical usage: + * + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProductImpression:product impressionList:@"listName"]; + * [tracker send:[builder build]]; + * + */ +@interface GAIEcommerceProduct : NSObject + +/*! + Sets the id that is used to identify a product in GA reports. + */ +- (GAIEcommerceProduct *)setId:(NSString *)productId; + +/*! + Sets the name that is used to identify the product in GA reports. + */ +- (GAIEcommerceProduct *)setName:(NSString *)productName; + +/*! + Sets the brand associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand; + +/*! + Sets the category associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory; + +/*! + Sets the variant of the product. + */ +- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant; + +/*! + Sets the price of the product. + */ +- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice; + +/*! + Sets the quantity of the product. This field is usually not used with product impressions. + */ +- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity; + +/*! + Sets the coupon code associated with the product. This field is usually not used with product + impressions. + */ +- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode; + +/*! + Sets the position of the product on the screen/product impression list, etc. + */ +- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition; + +/*! + Sets the custom dimension associated with this product. + */ +- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value; + +/*! + Sets the custom metric associated with this product. + */ +- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for a product action. The + index parameter is the index of this product in the product action list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for an impression list. The + lIndex parameter is the index of the product impression list while the index parameter is the + index of this product in that impression list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h new file mode 100644 index 0000000000..e3da1c1502 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommerceProductAction.h @@ -0,0 +1,107 @@ +/*! + @header GAIProductAction.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct transaction/checkout or other product interaction related information for a + * Google Analytics hit. Use this class to report information about products sold, viewed or + * refunded. This class is intended to be used with GAIDictionaryBuilder. + *
+ * Typical usage: + * + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init]; + * [action setAction:kGAIPAPurchase]; + * [action setTransactionId:@"TT-1234"]; + * [action setRevenue:@3.14]; + * [action setCouponCode:@"EXTRA100"]; + * [builder setProductAction:action]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProduct:product]; + * [tracker send:[builder build]]; + * + */ +@interface GAIEcommerceProductAction : NSObject + +/*! + Sets the product action field for this product action. Valid values can be found in + GAIEcommerceFields.h under "product action values". + */ +- (GAIEcommerceProductAction *)setAction:(NSString *)productAction; + +/*! + The unique id associated with the transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId; + +/*! + Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation; + +/*! + Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue; + +/*! + Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax; + +/*! + Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping; + +/*! + Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode; + +/*! + Sets the checkout process's progress. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep; + +/*! + Sets the option associated with the checkout. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption; + +/*! + Sets the list name associated with the products in Google Analytics beacons. This value is + used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList; + +/*! + Sets the list source name associated with the products in Google Analytics beacons. This value + is used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource; + +/*! + Builds an NSDictionary of fields stored in this instance representing this product action. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)build; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h new file mode 100644 index 0000000000..c7bf25af02 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIEcommercePromotion.h @@ -0,0 +1,54 @@ +/*! + @header GAIEcommercePromotion.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import + +/*! + * Class to construct promotion related fields for Google Analytics hits. The fields from this class + * can be used to represent internal promotions that run within an app, such as banners, banner ads + * etc. + * + * Typical usage: + * + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init]; + * [promotion setId:@"PROMO-ID1234"]; + * [promotion setName:@"Home screen banner"]; + * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction]; + * [builder addPromotion:promotion]; + * [tracker send:builder.build]]; + * + */ +@interface GAIEcommercePromotion : NSObject + +/*! + Sets the id that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setId:(NSString *)pid; + +/*! + Sets the name that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setName:(NSString *)name; + +/*! + Sets the name of the creative associated with the promotion. + */ +- (GAIEcommercePromotion *)setCreative:(NSString *)creative; + +/*! + Sets the position of the promotion. + */ +- (GAIEcommercePromotion *)setPosition:(NSString *)position; + +/*! + Builds an NSDictionary of fields stored in this instance. The index parameter is the + index of this promotion in that promotion list. +
+ Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIFields.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIFields.h new file mode 100644 index 0000000000..762f31faaf --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAIFields.h @@ -0,0 +1,134 @@ +/*! + @header GAIFields.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +/*! + These fields can be used for the wire format parameter names required by + the |GAITracker| get, set and send methods as well as the set methods in the + |GAIDictionaryBuilder| class. + */ +extern NSString *const kGAIUseSecure; + +extern NSString *const kGAIHitType; +extern NSString *const kGAITrackingId; +extern NSString *const kGAIClientId; +extern NSString *const kGAIDataSource; +extern NSString *const kGAIAnonymizeIp; +extern NSString *const kGAISessionControl; +extern NSString *const kGAIDeviceModelVersion; +extern NSString *const kGAIScreenResolution; +extern NSString *const kGAIViewportSize; +extern NSString *const kGAIEncoding; +extern NSString *const kGAIScreenColors; +extern NSString *const kGAILanguage; +extern NSString *const kGAIJavaEnabled; +extern NSString *const kGAIFlashVersion; +extern NSString *const kGAINonInteraction; +extern NSString *const kGAIReferrer; +extern NSString *const kGAILocation; +extern NSString *const kGAIHostname; +extern NSString *const kGAIPage; +extern NSString *const kGAIDescription; // synonym for kGAIScreenName +extern NSString *const kGAIScreenName; // synonym for kGAIDescription +extern NSString *const kGAITitle; +extern NSString *const kGAIAdMobHitId; +extern NSString *const kGAIAppName; +extern NSString *const kGAIAppVersion; +extern NSString *const kGAIAppId; +extern NSString *const kGAIAppInstallerId; +extern NSString *const kGAIUserId; + +extern NSString *const kGAIEventCategory; +extern NSString *const kGAIEventAction; +extern NSString *const kGAIEventLabel; +extern NSString *const kGAIEventValue; + +extern NSString *const kGAISocialNetwork; +extern NSString *const kGAISocialAction; +extern NSString *const kGAISocialTarget; + +extern NSString *const kGAITransactionId; +extern NSString *const kGAITransactionAffiliation; +extern NSString *const kGAITransactionRevenue; +extern NSString *const kGAITransactionShipping; +extern NSString *const kGAITransactionTax; +extern NSString *const kGAICurrencyCode; + +extern NSString *const kGAIItemPrice; +extern NSString *const kGAIItemQuantity; +extern NSString *const kGAIItemSku; +extern NSString *const kGAIItemName; +extern NSString *const kGAIItemCategory; + +extern NSString *const kGAICampaignSource; +extern NSString *const kGAICampaignMedium; +extern NSString *const kGAICampaignName; +extern NSString *const kGAICampaignKeyword; +extern NSString *const kGAICampaignContent; +extern NSString *const kGAICampaignId; +extern NSString *const kGAICampaignAdNetworkClickId; +extern NSString *const kGAICampaignAdNetworkId; + +extern NSString *const kGAITimingCategory; +extern NSString *const kGAITimingVar; +extern NSString *const kGAITimingValue; +extern NSString *const kGAITimingLabel; + +extern NSString *const kGAIExDescription; +extern NSString *const kGAIExFatal; + +extern NSString *const kGAISampleRate; + +extern NSString *const kGAIIdfa; +extern NSString *const kGAIAdTargetingEnabled; +extern NSString *const kGAINpa; + +// hit types +extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead."); +extern NSString *const kGAIScreenView; +extern NSString *const kGAIEvent; +extern NSString *const kGAISocial; +extern NSString *const kGAITransaction; +extern NSString *const kGAIItem; +extern NSString *const kGAIException; +extern NSString *const kGAITiming; + +/*! + This class provides several fields and methods useful as wire format parameter + names. The methods are used for wire format parameter names that are indexed. + */ + +@interface GAIFields : NSObject + +/*! + Generates the correct parameter name for a content group with an index. + + @param index the index of the content group. + + @return an NSString representing the content group parameter for the index. + */ ++ (NSString *)contentGroupForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custon dimension with an index. + + @param index the index of the custom dimension. + + @return an NSString representing the custom dimension parameter for the index. + */ ++ (NSString *)customDimensionForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custom metric with an index. + + @param index the index of the custom metric. + + @return an NSString representing the custom metric parameter for the index. + */ ++ (NSString *)customMetricForIndex:(NSUInteger)index; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAILogger.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAILogger.h new file mode 100644 index 0000000000..06291f2c1b --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAILogger.h @@ -0,0 +1,49 @@ +/*! + @header GAILogger.h + @abstract Google Analytics iOS SDK Source + @copyright Copyright 2011 Google Inc. All rights reserved. + */ + +#import + +typedef NS_ENUM(NSUInteger, GAILogLevel) { + kGAILogLevelNone = 0, + kGAILogLevelError = 1, + kGAILogLevelWarning = 2, + kGAILogLevelInfo = 3, + kGAILogLevelVerbose = 4 +}; + +/*! + Protocol to be used for logging debug and informational messages from the SDK. + Implementations of this protocol can be provided to the |GAI| class, + to be used as the logger by the SDK. See the |logger| property in GAI.h. + */ +@protocol GAILogger +@required + +/*! + Only messages of |logLevel| and below are logged. + */ +@property (nonatomic, assign) GAILogLevel logLevel; + +/*! + Logs message with log level |kGAILogLevelVerbose|. + */ +- (void)verbose:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelInfo|. + */ +- (void)info:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelWarning|. + */ +- (void)warning:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelError|. + */ +- (void)error:(NSString *)message; +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAITrackedViewController.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAITrackedViewController.h new file mode 100644 index 0000000000..de19def00a --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAITrackedViewController.h @@ -0,0 +1,33 @@ +/*! + @header GAITrackedViewController.h + @abstract Google Analytics for iOS Tracked View Controller Header + @copyright Copyright 2012 Google Inc. All rights reserved. + */ + +#import +#import + +@protocol GAITracker; + +/*! + Extends UIViewController to generate Google Analytics screenview calls + whenever the view appears; this is done by overriding the `viewDidAppear:` + method. The screen name must be set for any tracking calls to be made. + + By default, this will use [GAI defaultTracker] for tracking calls, but one can + override this by setting the tracker property. + */ +@interface GAITrackedViewController : UIViewController + +/*! + The tracker on which view tracking calls are be made, or `nil`, in which case + [GAI defaultTracker] will be used. + */ +@property(nonatomic, assign) id tracker; +/*! + The screen name, for purposes of Google Analytics tracking. If this is `nil`, + no tracking calls will be made. + */ +@property(nonatomic, copy) NSString *screenName; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAITracker.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAITracker.h new file mode 100644 index 0000000000..ca26e5df05 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GAITracker.h @@ -0,0 +1,62 @@ +/*! + @header GAITracker.h + @abstract Google Analytics iOS SDK Tracker Header + @copyright Copyright 2013 Google Inc. All rights reserved. +*/ + +#import + +/*! + Google Analytics tracking interface. Obtain instances of this interface from + [GAI trackerWithTrackingId:] to track screens, events, transactions, timing, + and exceptions. The implementation of this interface is thread-safe, and no + calls are expected to block or take a long time. All network and disk activity + will take place in the background. + */ +@protocol GAITracker + +/*! + Name of this tracker. + */ +@property(nonatomic, readonly) NSString *name; + +/*! + Allow collection of IDFA and related fields if set to true. Default is false. + */ +@property(nonatomic) BOOL allowIDFACollection; + +/*! + Allow fields to be included in personalization features. Default is true. + */ +@property(nonatomic) BOOL allowAdPersonalizationSignals; + +/*! + Set a tracking parameter. + + @param parameterName The parameter name. + + @param value The value to set for the parameter. If this is nil, the + value for the parameter will be cleared. + */ +- (void)set:(NSString *)parameterName + value:(NSString *)value; + +/*! + Get a tracking parameter. + + @param parameterName The parameter name. + + @returns The parameter value, or nil if no value for the given parameter is + set. + */ +- (NSString *)get:(NSString *)parameterName; + +/*! + Queue tracking information with the given parameter values. + + @param parameters A map from parameter names to parameter values which will be + set just for this piece of tracking information, or nil for none. + */ +- (void)send:(NSDictionary *)parameters; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h new file mode 100644 index 0000000000..ecdf71e2b3 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Headers/GoogleAnalytics-umbrella.h @@ -0,0 +1,26 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GAI.h" +#import "GAIDictionaryBuilder.h" +#import "GAIEcommerceFields.h" +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" +#import "GAIFields.h" +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +FOUNDATION_EXPORT double GoogleAnalyticsVersionNumber; +FOUNDATION_EXPORT const unsigned char GoogleAnalyticsVersionString[]; + diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Info.plist b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Info.plist new file mode 100644 index 0000000000..489d587a75 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAnalytics + CFBundleIdentifier + com.firebase.Firebase-GoogleAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 3.21.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Modules/module.modulemap b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..0ad464ac01 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/GoogleAnalytics/Frameworks/GoogleAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,7 @@ +framework module GoogleAnalytics { +umbrella header "GoogleAnalytics-umbrella.h" +export * +module * { export * } + link "sqlite3" + link "z" +} diff --git a/Libraries/Segment-GoogleAnalytics/LICENSE b/Libraries/Segment-GoogleAnalytics/LICENSE new file mode 100644 index 0000000000..1298520867 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Segment.io, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegration.h b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegration.h new file mode 100644 index 0000000000..034f97078c --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegration.h @@ -0,0 +1,16 @@ +#import +#if defined(__has_include) && __has_include() +#import +#else +#import +#endif + + +@interface SEGGoogleAnalyticsIntegration : NSObject + +@property (nonatomic, copy) NSDictionary *settings; +@property (nonatomic, copy) NSDictionary *traits; + +- (id)initWithSettings:(NSDictionary *)settings; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegration.m b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegration.m new file mode 100644 index 0000000000..84c32a8ea0 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegration.m @@ -0,0 +1,289 @@ +#import +#import +#import "SEGGoogleAnalyticsIntegration.h" +#import + +#if defined(__has_include) && __has_include() +#import +#import +#else +#import +#import +#endif + + +@interface SEGGoogleAnalyticsIntegration () + +@property (nonatomic, assign) id tracker; + +@end + + +@implementation SEGGoogleAnalyticsIntegration + +- (id)initWithSettings:(NSDictionary *)settings +{ + if (self = [super init]) { + self.settings = settings; + // Require setup with the trackingId. + NSString *trackingId = [settings objectForKey:@"mobileTrackingId"]; + self.tracker = [[GAI sharedInstance] trackerWithTrackingId:trackingId]; + [[GAI sharedInstance] setDefaultTracker:self.tracker]; + + // Optionally turn on uncaught exception tracking. + NSString *reportUncaughtExceptions = [settings objectForKey:@"reportUncaughtExceptions"]; + if ([reportUncaughtExceptions boolValue]) { + [GAI sharedInstance].trackUncaughtExceptions = YES; + SEGLog(@"[[GAI sharedInstance] defaultTracker] trackUncaughtExceptions = YES;"); + } + + // Optionally turn on GA remarketing features + NSString *demographicReports = [settings objectForKey:@"doubleClick"]; + if ([demographicReports boolValue]) { + [self.tracker setAllowIDFACollection:YES]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] setAllowIDFACollection:YES];"); + } + } + return self; +} + +- (void)identify:(SEGIdentifyPayload *)payload +{ + // remove existing traits + [self resetTraits]; + + if (self.shouldSendUserId && payload.userId) { + [self.tracker set:@"&uid" value:payload.userId]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] set:&uid value:%@];", payload.userId); + } + + self.traits = payload.traits; + + [self.traits enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [self.tracker set:key value:obj]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] set:%@ value:%@];", key, obj); + }]; + + [self setCustomDimensionsAndMetricsOnDefaultTracker:payload.traits]; +} + ++ (NSNumber *)extractRevenue:(NSDictionary *)dictionary withKey:(NSString *)revenueKey +{ + id revenueProperty = nil; + + for (NSString *key in dictionary.allKeys) { + if ([key caseInsensitiveCompare:revenueKey] == NSOrderedSame) { + revenueProperty = dictionary[key]; + break; + } + } + + if (revenueProperty) { + if ([revenueProperty isKindOfClass:[NSString class]]) { + // Format the revenue. + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; + return [formatter numberFromString:revenueProperty]; + } else if ([revenueProperty isKindOfClass:[NSNumber class]]) { + return revenueProperty; + } + } + return nil; +} + +- (void)track:(SEGTrackPayload *)payload +{ + if ([payload.event isEqualToString:@"Order Completed"]) { + [self orderCompleted:payload.properties]; + return; + } + + // Try to extract a "category" property. + NSString *category = @"All"; // default + NSString *categoryProperty = [payload.properties objectForKey:@"category"]; + if (categoryProperty) { + category = categoryProperty; + } + + // Try to extract a "label" property. + NSString *label = [payload.properties objectForKey:@"label"]; + + // Try to extract a "revenue" or "value" property. + NSNumber *value = [SEGGoogleAnalyticsIntegration extractRevenue:payload.properties withKey:@"revenue"]; + NSNumber *valueFallback = [SEGGoogleAnalyticsIntegration extractRevenue:payload.properties withKey:@"value"]; + if (!value && valueFallback) { + // fall back to the "value" property + value = valueFallback; + } + + GAIDictionaryBuilder *hitBuilder = + [GAIDictionaryBuilder createEventWithCategory:category + action:payload.event + label:label + value:value]; + NSDictionary *hit = [self setCustomDimensionsAndMetricsAndCampaignData:payload.properties context:payload.context event:payload.event onHit:hitBuilder]; + [self.tracker send:hit]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] send:%@];", hit); +} + +- (void)screen:(SEGScreenPayload *)payload +{ + [self.tracker set:kGAIScreenName value:payload.name]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] set:%@ value:%@];", kGAIScreenName, payload.name); + + GAIDictionaryBuilder *hitBuilder = [GAIDictionaryBuilder createScreenView]; + + NSDictionary *hit = [self setCustomDimensionsAndMetricsAndCampaignData:payload.properties context:payload.context event:payload.name onHit:hitBuilder]; + + [self.tracker send:hit]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] send:%@];", hit); +} + +#pragma mark - Ecommerce + +- (void)orderCompleted:(NSDictionary *)properties +{ + NSString *orderId = properties[@"orderId"]; + NSString *currency = properties[@"currency"] ?: @"USD"; + + NSDictionary *transaction = [[GAIDictionaryBuilder createTransactionWithId:orderId + affiliation:properties[@"affiliation"] + revenue:[SEGGoogleAnalyticsIntegration extractRevenue:properties withKey:@"revenue"] + tax:properties[@"tax"] + shipping:properties[@"shipping"] + currencyCode:currency] build]; + [self.tracker send:transaction]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] send:%@];", transaction); + + NSDictionary *item = [[GAIDictionaryBuilder createItemWithTransactionId:orderId + name:properties[@"name"] + sku:properties[@"sku"] + category:properties[@"category"] + price:properties[@"price"] + quantity:properties[@"quantity"] + currencyCode:currency] build]; + [self.tracker send:item]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] send:%@];", item); +} + +- (void)reset +{ + [self.tracker set:@"&uid" value:nil]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] set:&uid value:nil];"); + + [self resetTraits]; +} + + +- (void)flush +{ + [[GAI sharedInstance] dispatch]; +} + +#pragma mark - Private + +// event and screen properties are generall hit-scoped dimensions, so we want +// to set them on the hits, not the tracker +- (NSDictionary *)setCustomDimensionsAndMetricsAndCampaignData:(NSDictionary *)properties context:(NSDictionary *)context event:(NSString *)event onHit:(GAIDictionaryBuilder *)hit +{ + NSDictionary *customDimensions = self.settings[@"dimensions"]; + NSDictionary *customMetrics = self.settings[@"metrics"]; + + for (NSString *key in properties) { + NSString *dimensionString = [customDimensions objectForKey:key]; + NSUInteger dimension = [self extractNumber:dimensionString from:[@"dimension" length]]; + if (dimension != 0) { + [hit set:[properties objectForKey:key] + forKey:[GAIFields customDimensionForIndex:dimension]]; + } + + NSString *metricString = [customMetrics objectForKey:key]; + NSUInteger metric = [self extractNumber:metricString from:[@"metric" length]]; + if (metric != 0) { + [hit set:[properties objectForKey:key] + forKey:[GAIFields customMetricForIndex:metric]]; + } + + } + + NSDictionary *campaign = context[@"campaign"]; + if ([campaign isKindOfClass:[NSDictionary class]]) { + if ([campaign[@"source"] isKindOfClass:[NSString class]]) { + [hit set:campaign[@"source"] forKey:kGAICampaignSource]; + if ([campaign[@"name"] isKindOfClass:[NSString class]]) { + [hit set:campaign[@"name"] forKey:kGAICampaignName]; + } + if ([campaign[@"content"] isKindOfClass:[NSString class]]) { + [hit set:campaign[@"content"] forKey:kGAICampaignContent]; + } + if ([campaign[@"medium"] isKindOfClass:[NSString class]]) { + [hit set:campaign[@"medium"] forKey:kGAICampaignMedium]; + } + } else { + // https://developers.google.com/analytics/devguides/collection/ios/v3/campaigns + SEGLog(@"WARNING: campaign source is a required field for GA. Omitting campaign attributes"); + } + // Segment does not currently spec the following keys that GA accepts + // kGAICampaignKeyword + // kGAICampaignId + // kGAICampaignAdNetworkClickId + // kGAICampaignAdNetworkId + } + + if ([event isEqualToString:@"Deep Link Opened"]) { + [hit setCampaignParametersFromUrl:[properties valueForKey:@"url"]]; + SEGLog(@"[hit setCampaignParametersFromUrl: %@]", [properties valueForKey:@"url"]); + } + + return [hit build]; +} + + +// e.g. extractNumber:"dimension3" from:[@"dimension" length] returns 3 +// e.g. extractNumber:"metric9" from:[@"metric" length] returns 9 +- (int)extractNumber:(NSString *)text from:(NSUInteger)start +{ + if (text == nil || [text length] == 0) { + return 0; + } + return [[text substringFromIndex:start] intValue]; +} + +// traits are user-scoped dimensions. as such, it makes sense to set them on the tracker +- (void)setCustomDimensionsAndMetricsOnDefaultTracker:(NSDictionary *)traits +{ + NSDictionary *customDimensions = self.settings[@"dimensions"]; + NSDictionary *customMetrics = self.settings[@"metrics"]; + + for (NSString *key in traits) { + NSString *dimensionString = [customDimensions objectForKey:key]; + NSUInteger dimension = [self extractNumber:dimensionString from:[@"dimension" length]]; + if (dimension != 0) { + [self.tracker set:[GAIFields customDimensionForIndex:dimension] + value:[traits objectForKey:key]]; + } + + NSString *metricString = [customMetrics objectForKey:key]; + NSUInteger metric = [self extractNumber:metricString from:[@"metric" length]]; + if (metric != 0) { + [self.tracker set:[GAIFields customMetricForIndex:metric] + value:[traits objectForKey:key]]; + } + } +} + +- (BOOL)shouldSendUserId +{ + return [[self.settings objectForKey:@"sendUserId"] boolValue]; +} + +- (void)resetTraits +{ + [self.traits enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [self.tracker set:key value:nil]; + SEGLog(@"[[[GAI sharedInstance] defaultTracker] set:%@ value:nil];", key); + }]; + self.traits = nil; +} + +@end diff --git a/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegrationFactory.h b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegrationFactory.h new file mode 100644 index 0000000000..a2aa04db64 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegrationFactory.h @@ -0,0 +1,13 @@ +#import +#if defined(__has_include) && __has_include() +#import +#else +#import +#endif + + +@interface SEGGoogleAnalyticsIntegrationFactory : NSObject + ++ (instancetype)instance; + +@end diff --git a/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegrationFactory.m b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegrationFactory.m new file mode 100644 index 0000000000..9d9680a1c1 --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/Pod/Classes/SEGGoogleAnalyticsIntegrationFactory.m @@ -0,0 +1,33 @@ +#import "SEGGoogleAnalyticsIntegrationFactory.h" +#import "SEGGoogleAnalyticsIntegration.h" + + +@implementation SEGGoogleAnalyticsIntegrationFactory + ++ (instancetype)instance +{ + static dispatch_once_t once; + static SEGGoogleAnalyticsIntegrationFactory *sharedInstance; + dispatch_once(&once, ^{ + sharedInstance = [[self alloc] init]; + }); + return sharedInstance; +} + +- (id)init +{ + self = [super init]; + return self; +} + +- (id)createWithSettings:(NSDictionary *)settings forAnalytics:(SEGAnalytics *)analytics +{ + return [[SEGGoogleAnalyticsIntegration alloc] initWithSettings:settings]; +} + +- (NSString *)key +{ + return @"Google Analytics"; +} + +@end diff --git a/Libraries/Segment-GoogleAnalytics/README.md b/Libraries/Segment-GoogleAnalytics/README.md new file mode 100644 index 0000000000..89d6f6eb6d --- /dev/null +++ b/Libraries/Segment-GoogleAnalytics/README.md @@ -0,0 +1,75 @@ +# Analytics + +[![CircleCI](https://circleci.com/gh/segment-integrations/analytics-ios-integration-google-analytics.svg?style=svg)](https://circleci.com/gh/segment-integrations/analytics-ios-integration-google-analytics) +[![Version](https://img.shields.io/cocoapods/v/Segment-google-analytics.svg?style=flat)](http://cocoapods.org/pods/Segment-googleanalytics) +[![License](https://img.shields.io/cocoapods/l/Segment-google-analytics.svg?style=flat)](http://cocoapods.org/pods/Segment-googleanalytics) + +**WARNING**: This SDK has been deprecated. On September 17th, 2019 this repository will be archived as read-only and no longer actively maintained. [Google is sunsetting their Google Analytics mobile SDKs on October 31st.](https://support.google.com/firebase/answer/9167112?hl=en). Please [see our migration tutorial](https://segment.com/docs/destinations/google-analytics/#migrating-deprecated-google-analytics-mobile-sdks-to-firebase) to learn more about migrating to our Firebase SDKs for iOS. + +Google Analytics integration for analytics-ios. + +## Installation + +To install the Segment-Google Analytics integration, simply add this line to your [CocoaPods](http://cocoapods.org) `Podfile`: + +```ruby +pod "Segment-GoogleAnalytics" +``` + +## Usage + +After adding the dependency, you must register the integration with our SDK. To do this, import the Google Analytics integration in your `AppDelegate`: + +``` +#import +``` + +And add the following lines: + +``` +NSString *const SEGMENT_WRITE_KEY = @" ... "; +SEGAnalyticsConfiguration *config = [SEGAnalyticsConfiguration configurationWithWriteKey:SEGMENT_WRITE_KEY]; + +[config use:[SEGGoogleAnalyticsIntegrationFactory instance]]; + +[SEGAnalytics setupWithConfiguration:config]; + +``` + + +## License + +``` +WWWWWW||WWWWWW + W W W||W W W + || + ( OO )__________ + / | \ + /o o| MIT \ + \___/||_||__||_|| * + || || || || + _||_|| _||_|| + (__|__|(__|__| + +The MIT License (MIT) + +Copyright (c) 2014 Segment, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/Podfile b/Podfile index 3dfe552452..317d0319eb 100644 --- a/Podfile +++ b/Podfile @@ -26,7 +26,6 @@ target 'edX' do pod 'MSAL', '= 1.2.5', :modular_headers => true pod 'NewRelicAgent', '= 7.4.2' pod 'Segment-Appboy', '= 4.6.0' - pod 'Segment-GoogleAnalytics', '= 1.3.3' pod 'Smartling.i18n', '~> 1.0.14' pod 'YoutubePlayer-in-WKWebView', '~> 0.3.8' end diff --git a/Source/OEXAppDelegate.m b/Source/OEXAppDelegate.m index 838e1693e6..2823ff90cf 100644 --- a/Source/OEXAppDelegate.m +++ b/Source/OEXAppDelegate.m @@ -15,7 +15,7 @@ @import GoogleSignIn; #import -#import +#import "SEGGoogleAnalyticsIntegrationFactory.h" #import "SEGFirebaseIntegrationFactory.h" #import "OEXAppDelegate.h" #import "edX-Swift.h" diff --git a/edX.xcodeproj/project.pbxproj b/edX.xcodeproj/project.pbxproj index f15a0b4eb0..74243de625 100644 --- a/edX.xcodeproj/project.pbxproj +++ b/edX.xcodeproj/project.pbxproj @@ -842,6 +842,11 @@ E0EAD98E2ABC1B87001C6470 /* screen_3.gif in Resources */ = {isa = PBXBuildFile; fileRef = E0EAD98C2ABC1B87001C6470 /* screen_3.gif */; }; E0EAD98F2ABC1B87001C6470 /* screen_4.gif in Resources */ = {isa = PBXBuildFile; fileRef = E0EAD98D2ABC1B87001C6470 /* screen_4.gif */; }; E0EAD9912ABD3727001C6470 /* screen_1.gif in Resources */ = {isa = PBXBuildFile; fileRef = E0EAD9902ABD3727001C6470 /* screen_1.gif */; }; + E0EAD99E2ACEBA48001C6470 /* SEGGoogleAnalyticsIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = E0EAD9972ACEBA48001C6470 /* SEGGoogleAnalyticsIntegration.m */; }; + E0EAD99F2ACEBA48001C6470 /* SEGGoogleAnalyticsIntegrationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = E0EAD9982ACEBA48001C6470 /* SEGGoogleAnalyticsIntegrationFactory.m */; }; + E0EAD9A02ACEBA48001C6470 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = E0EAD9992ACEBA48001C6470 /* LICENSE */; }; + E0EAD9A12ACEBA48001C6470 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = E0EAD99A2ACEBA48001C6470 /* README.md */; }; + E0EAD9A22ACEBA48001C6470 /* GoogleAnalytics.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0EAD99D2ACEBA48001C6470 /* GoogleAnalytics.xcframework */; }; E0EC115C221AE70900F0574A /* ListenableObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E0EC115B221AE70900F0574A /* ListenableObject.m */; }; E0EC12AD2216A6910090EEF6 /* NSString+OEXFormatting.h in Headers */ = {isa = PBXBuildFile; fileRef = 77E647C51C90C70600B6740D /* NSString+OEXFormatting.h */; settings = {ATTRIBUTES = (Public, ); }; }; E0EDDBD12AB9698600DB3CFE /* screen_5.png in Resources */ = {isa = PBXBuildFile; fileRef = E0EDDBCF2AB9698600DB3CFE /* screen_5.png */; }; @@ -1948,6 +1953,13 @@ E0EAD98C2ABC1B87001C6470 /* screen_3.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = screen_3.gif; sourceTree = ""; }; E0EAD98D2ABC1B87001C6470 /* screen_4.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = screen_4.gif; sourceTree = ""; }; E0EAD9902ABD3727001C6470 /* screen_1.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = screen_1.gif; sourceTree = ""; }; + E0EAD9952ACEBA48001C6470 /* SEGGoogleAnalyticsIntegration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SEGGoogleAnalyticsIntegration.h; sourceTree = ""; }; + E0EAD9962ACEBA48001C6470 /* SEGGoogleAnalyticsIntegrationFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SEGGoogleAnalyticsIntegrationFactory.h; sourceTree = ""; }; + E0EAD9972ACEBA48001C6470 /* SEGGoogleAnalyticsIntegration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SEGGoogleAnalyticsIntegration.m; sourceTree = ""; }; + E0EAD9982ACEBA48001C6470 /* SEGGoogleAnalyticsIntegrationFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SEGGoogleAnalyticsIntegrationFactory.m; sourceTree = ""; }; + E0EAD9992ACEBA48001C6470 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + E0EAD99A2ACEBA48001C6470 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + E0EAD99D2ACEBA48001C6470 /* GoogleAnalytics.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = GoogleAnalytics.xcframework; sourceTree = ""; }; E0EC115A221AE70900F0574A /* ListenableObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ListenableObject.h; sourceTree = ""; }; E0EC115B221AE70900F0574A /* ListenableObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ListenableObject.m; sourceTree = ""; }; E0EDDBCF2AB9698600DB3CFE /* screen_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = screen_5.png; sourceTree = ""; }; @@ -2014,6 +2026,7 @@ E02661732269A821002721B7 /* libOCMock.a in Frameworks */, BE0EE28B192B78DA00F9FF98 /* libz.dylib in Frameworks */, BE0EE287192B78C400F9FF98 /* CoreTelephony.framework in Frameworks */, + E0EAD9A22ACEBA48001C6470 /* GoogleAnalytics.xcframework in Frameworks */, E082D60325C0070800C94C9A /* Photos.framework in Frameworks */, BECB7B131924C0C3009C77F1 /* UIKit.framework in Frameworks */, BECB7B0F1924C0C3009C77F1 /* Foundation.framework in Frameworks */, @@ -3535,6 +3548,7 @@ BE76FEAA193C8D9C00BB9BDD /* External Libraries */ = { isa = PBXGroup; children = ( + E0EAD9922ACEBA48001C6470 /* Segment-GoogleAnalytics */, E0AA9106280FFC8E00D39A4D /* KeychainSwift */, 5FFB73AE2849F10D000523BF /* DropDown */, 5F592ACE257521CF00D96214 /* SwiftDate */, @@ -4035,6 +4049,53 @@ name = WhatsNew; sourceTree = ""; }; + E0EAD9922ACEBA48001C6470 /* Segment-GoogleAnalytics */ = { + isa = PBXGroup; + children = ( + E0EAD9932ACEBA48001C6470 /* Pod */, + E0EAD9992ACEBA48001C6470 /* LICENSE */, + E0EAD99A2ACEBA48001C6470 /* README.md */, + E0EAD99B2ACEBA48001C6470 /* GoogleAnalytics */, + ); + name = "Segment-GoogleAnalytics"; + path = "Libraries/Segment-GoogleAnalytics"; + sourceTree = SOURCE_ROOT; + }; + E0EAD9932ACEBA48001C6470 /* Pod */ = { + isa = PBXGroup; + children = ( + E0EAD9942ACEBA48001C6470 /* Classes */, + ); + path = Pod; + sourceTree = ""; + }; + E0EAD9942ACEBA48001C6470 /* Classes */ = { + isa = PBXGroup; + children = ( + E0EAD9952ACEBA48001C6470 /* SEGGoogleAnalyticsIntegration.h */, + E0EAD9962ACEBA48001C6470 /* SEGGoogleAnalyticsIntegrationFactory.h */, + E0EAD9972ACEBA48001C6470 /* SEGGoogleAnalyticsIntegration.m */, + E0EAD9982ACEBA48001C6470 /* SEGGoogleAnalyticsIntegrationFactory.m */, + ); + path = Classes; + sourceTree = ""; + }; + E0EAD99B2ACEBA48001C6470 /* GoogleAnalytics */ = { + isa = PBXGroup; + children = ( + E0EAD99C2ACEBA48001C6470 /* Frameworks */, + ); + path = GoogleAnalytics; + sourceTree = ""; + }; + E0EAD99C2ACEBA48001C6470 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E0EAD99D2ACEBA48001C6470 /* GoogleAnalytics.xcframework */, + ); + path = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -4291,6 +4352,7 @@ 5F6F2B62255AABA400AA3708 /* Inter-Bold.ttf in Resources */, E048260227AD519A0046B8AF /* screen_2.png in Resources */, 77DC29601ABCA0F200FAD22C /* OEXLoginSplashViewController.xib in Resources */, + E0EAD9A02ACEBA48001C6470 /* LICENSE in Resources */, 69ECC6181D50D1170030CF87 /* bt_google_RTL.png in Resources */, 6926CDB01D59BE3600A16E22 /* ic_seek_thumb.png in Resources */, 22F8A9141F4708A50025E18A /* Main.storyboard in Resources */, @@ -4316,6 +4378,7 @@ 69ECC6291D50D1170030CF87 /* check@2x.png in Resources */, 5F6F2B68255AABA400AA3708 /* Inter-ExtraBoldItalic.ttf in Resources */, E0514DE8285C4F7900D645E0 /* RobotoMono-SemiBold.ttf in Resources */, + E0EAD9A12ACEBA48001C6470 /* README.md in Resources */, 22A4191E1EB1CF1500BBC8CA /* shareCourse@2x.png in Resources */, E021F46C1F739599007A26E7 /* loginScreenImage@2x~ipad.png in Resources */, B4B6D64A1A95CF33000F44E8 /* OEXUserLicenseAgreementViewController.xib in Resources */, @@ -4728,6 +4791,7 @@ 7758FFDE1C32FD6A0072355B /* EnrollmentShared.swift in Sources */, 5D43B1861B0C1F9200448B52 /* PostTableViewCell.swift in Sources */, 774BC7F41B4B0D700084F902 /* DiscussionTopic.swift in Sources */, + E0EAD99E2ACEBA48001C6470 /* SEGGoogleAnalyticsIntegration.m in Sources */, E054B09D1EC2E8C900FACBA6 /* OEXInterface+WhatsNew.swift in Sources */, 1913DD4419502E5D00573977 /* OEXVideoSummary.m in Sources */, 9EAB5BE91B564C2F00CA9F3C /* ProgressController.swift in Sources */, @@ -4835,6 +4899,7 @@ 9EE684CB1B3D5FAB00C7B157 /* CourseHandoutsViewController.swift in Sources */, 7C2DD5511D4A790F006148E0 /* UserPreferenceAPI.swift in Sources */, 9E0D4BD31B0C84F800B2417D /* CourseUnknownBlockViewController.swift in Sources */, + E0EAD99F2ACEBA48001C6470 /* SEGGoogleAnalyticsIntegrationFactory.m in Sources */, 19E1F02B1A272DDC00C2E1BE /* LastAccessed.m in Sources */, 2285121720FDC365006A4736 /* DiscoveryHelper.swift in Sources */, 7784C68B1B03BA1E00529C7C /* LoadStateViewController.swift in Sources */,